示例#1
0
        public override void Kill(int timeLeft)
        {
            int projType = ProjectileType <Gambler.Projectiles.EaterCardProj2>();

            for (int l = 0; l < Main.projectile.Length; l++)
            {
                Projectile proj = Main.projectile[l];
                if (proj.active && proj.type == projType && proj.owner == projectile.owner)
                {
                    proj.Kill();
                }
            }
            for (int i = 0; i < 10; i++)
            {
                int dust = Dust.NewDust(projectile.position, projectile.width, projectile.height, 18);
                Main.dust[dust].velocity *= 1.5f;
                Main.dust[dust].scale    *= 1f;
            }
            projType = ProjectileType <Gambler.Projectiles.EaterCardProj3>();
            bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;

            OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0f, 0f, projType, projectile.damage * 5, 0, projectile.owner), dummy);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 18, 5, 3 + Main.rand.Next(5), false, 1.5f, 1f, 7f, true, true, false, 0, 0, true);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 18, 10, 5 + Main.rand.Next(5), false, 1f, 1f, 5f, true, true, false, 0, 0, true);
            Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 83);
        }
        public override void SafeAI()
        {
            Player player = Main.player[projectile.owner];

            projectile.width      = projectile.damage * 4;
            projectile.height     = projectile.width;
            projectile.position.X = player.Center.X - projectile.width / 2;
            projectile.position.Y = player.Center.Y - projectile.width / 2;

            for (int i = 0; i < 20; i++)
            {
                int dust2 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 6);
                Main.dust[dust2].scale       = 1.2f;
                Main.dust[dust2].noGravity   = true;
                Main.dust[dust2].velocity.X /= 3;
                Main.dust[dust2].velocity.Y /= 3;
            }
            OrchidModProjectile.spawnExplosionGore(projectile);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 6), 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 3), 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 2), 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 6), 15, true, 1.5f, 1f, 5f);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 3), 15, true, 1.5f, 1f, 5f);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 6, (int)(projectile.width / 2), 15, true, 1.5f, 1f, 5f);
        }
        public override bool OnTileCollide(Vector2 oldVelocity)
        {
            bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;

            for (int i = 0; i < 3; i++)
            {
                int     projType = ProjectileType <Gambler.Projectiles.JungleSlimeCardProjAlt>();
                Vector2 vel      = new Vector2(0f, -3f).RotatedBy(MathHelper.ToRadians(20 * (i - 1)));
                OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.position.X + (5 * (i - 1)), projectile.position.Y - 10, vel.X, vel.Y, projType, (int)(projectile.damage * 0.75f), projectile.knockBack, projectile.owner), dummy);
            }

            if (projectile.velocity.Y > 0f)
            {
                projectile.velocity.Y = -8;
                if (this.baseDamage < projectile.damage)
                {
                    projectile.damage = this.baseDamage;
                    OrchidModProjectile.spawnDustCircle(projectile.Center, 60, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, false, true);
                }
            }
            else
            {
                projectile.velocity.Y = 1f;
            }
            if (projectile.velocity.X != oldVelocity.X)
            {
                projectile.velocity.X = -oldVelocity.X;
                projectile.velocity.Y = 0f;
            }

            return(false);
        }
 public override void BonusProjectiles(Player player, OrchidModPlayer modPlayer, Projectile projectile, OrchidModGlobalProjectile modProjectile, bool dummy)
 {
     if (modProjectile.gamblerInternalCooldown == 0)
     {
         modProjectile.gamblerInternalCooldown = 30;
         float scale    = 1f - (Main.rand.NextFloat() * .3f);
         int   rand     = Main.rand.Next(3) + 1;
         int   projType = ProjectileType <Gambler.Projectiles.ForestCardProj>();
         for (int i = 0; i < rand; i++)
         {
             Vector2 target  = Main.MouseWorld;
             Vector2 heading = target - projectile.position;
             heading.Normalize();
             heading *= new Vector2(0f, 10f).Length();
             Vector2 vel = heading.RotatedByRandom(MathHelper.ToRadians(30));
             vel = vel * scale;
             int newProjectile = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, projectile.damage, projectile.knockBack, player.whoAmI), dummy);
             Main.projectile[newProjectile].ai[1]     = 1f;
             Main.projectile[newProjectile].netUpdate = true;
             if (i == 0)
             {
                 OrchidModProjectile.spawnDustCircle(projectile.Center, 31, 10, 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true);
             }
         }
     }
 }
示例#5
0
        public override void SafeKill(int timeLeft, Player player, OrchidModPlayer modPlayer)
        {
            Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 85);
            int dmg = projectile.damage;

            OrchidModProjectile.spawnDustCircle(projectile.Center, 184, 200, 15, false, 1.5f, 1f, 5f);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 184, 175, 30, false, 1.5f, 1f, 5f);

            Vector2 move     = Vector2.Zero;
            float   distance = 500f;

            for (int k = 0; k < 200; k++)
            {
                if (Main.npc[k].active && !Main.npc[k].friendly)
                {
                    Vector2 newMove    = Main.npc[k].Center - projectile.Center;
                    float   distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y);
                    if (distanceTo < distance)
                    {
                        OrchidModAlchemistNPC modTarget = Main.npc[k].GetGlobalNPC <OrchidModAlchemistNPC>();
                        modTarget.alchemistWater = 60 * 10;
                    }
                }
            }
        }
示例#6
0
 public override bool OnTileCollide(Vector2 oldVelocity)
 {
     if (projectile.velocity.Y > 0f)
     {
         projectile.velocity.Y = -10;
         projectile.ai[1]      = 1f;
         if (this.baseDamage < projectile.damage)
         {
             if (this.baseDamage < projectile.damage - 6)
             {
                 OrchidModProjectile.spawnDustCircle(projectile.Center, 60, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, false, true);
             }
             projectile.damage = this.baseDamage;
         }
     }
     else
     {
         projectile.velocity.Y = 1f;
         projectile.ai[1]      = 0f;
     }
     if (projectile.velocity.X != oldVelocity.X)
     {
         projectile.velocity.X = -oldVelocity.X;
         projectile.velocity.Y = 0f;
     }
     return(false);
 }
示例#7
0
 public override void BonusProjectiles(Player player, OrchidModPlayer modPlayer, Projectile projectile, OrchidModGlobalProjectile modProjectile, bool dummy)
 {
     if (modProjectile.gamblerInternalCooldown == 0)
     {
         modProjectile.gamblerInternalCooldown = 40;
         int     projType = ProjectileType <Gambler.Projectiles.SnowCardProj>();
         Vector2 target   = Main.MouseWorld;
         Vector2 vel      = new Vector2(0f, 0f);
         float   absX     = (float)Math.Sqrt((projectile.Center.X - target.X) * (projectile.Center.X - target.X));
         float   absY     = (float)Math.Sqrt((projectile.Center.Y - target.Y) * (projectile.Center.Y - target.Y));
         if (absX > absY)
         {
             vel.X = target.X < projectile.Center.X ? 1f : -1f;
         }
         else
         {
             vel.Y = target.Y < projectile.Center.Y ? 1f : -1f;
         }
         vel.Normalize();
         vel *= new Vector2(0f, 5f).Length();
         int newProjectile = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, projectile.damage, projectile.knockBack, player.whoAmI), dummy);
         Main.projectile[newProjectile].ai[1]     = 1f;
         Main.projectile[newProjectile].netUpdate = true;
         OrchidModProjectile.spawnDustCircle(projectile.Center, 31, 25, 10, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true);
     }
 }
示例#8
0
        public override void KillSecond(int timeLeft, Player player, OrchidModPlayer modPlayer, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
        {
            if (alchProj.fireFlask.type != 0)
            {
                int type = ProjectileType <Alchemist.Projectiles.Water.SlimeFlaskProj>();
                int dmg  = getSecondaryDamage(player, modPlayer, alchProj.nbElements);
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0f, 0f, type, dmg, 0.5f, projectile.owner);
                OrchidModProjectile.spawnDustCircle(projectile.Center, 6, 10, 10, true, 1f, 1f, 5f, true, true, false, 0, 0, true);
                OrchidModProjectile.spawnDustCircle(projectile.Center, 6, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, true);
                Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45);

                if (player.HasBuff(BuffType <Alchemist.Buffs.SlimeFlaskBuff>()))
                {
                    int nb = 2 + Main.rand.Next(3);
                    for (int i = 0; i < nb; i++)
                    {
                        Vector2 vel       = (new Vector2(0f, -(float)(3 + Main.rand.Next(4))).RotatedByRandom(MathHelper.ToRadians(80)));
                        int     spawnProj = ProjectileType <Alchemist.Projectiles.Fire.EmberVialProjAlt>();
                        Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj, 0, 0f, projectile.owner);
                    }
                    int itemType = ItemType <Alchemist.Weapons.Fire.EmberVial>();
                    int dmgAlt   = OrchidModAlchemistHelper.getSecondaryDamage(player, modPlayer, itemType, alchProj.nbElements, true);
                    int rand     = alchProj.nbElements + Main.rand.Next(2);
                    for (int i = 0; i < rand; i++)
                    {
                        Vector2 vel = (new Vector2(0f, -3f).RotatedByRandom(MathHelper.ToRadians(60)));
                        Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, ProjectileType <Alchemist.Projectiles.Fire.EmberVialProj>(), dmgAlt, 0f, projectile.owner);
                    }
                }
            }
        }
示例#9
0
        public override void SafeAI()
        {
            if (!this.initialized)
            {
                this.rotation = 0.3f * (Main.rand.Next(2) == 0 ? -1 : 1);
                OrchidModProjectile.spawnDustCircle(projectile.Center, 64, 5, 5, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true);
                this.initialized = true;
            }

            projectile.rotation += this.rotation;

            int dust = Dust.NewDust(projectile.position, projectile.width, projectile.height, 64);

            Main.dust[dust].scale    *= 1.5f;
            Main.dust[dust].noGravity = true;
            Main.dust[dust].noLight   = true;

            if (projectile.ai[0] != -1f && Main.myPlayer == projectile.owner)
            {
                if (projectile.position.Y >= projectile.ai[0])
                {
                    OrchidModProjectile.spawnDustCircle(projectile.Center, 64, 5, 5, true, 1.5f, 1f, 5f, true, true, false, 0, 0, true);
                    Vector2 mousePos = Main.MouseWorld;
                    projectile.velocity.X = (mousePos.X > projectile.Center.X ? projectile.velocity.Y : -projectile.velocity.Y);
                    projectile.velocity.Y = 0f;
                    projectile.ai[0]      = -1f;
                    projectile.netUpdate  = true;
                }
            }
        }
示例#10
0
        public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer)
        {
            OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>();

            if (projectile.owner == Main.myPlayer)
            {
                modTarget.gamblerDungeonCardCount++;
                if (modTarget.gamblerDungeonCardCount >= 3)
                {
                    modTarget.gamblerDungeonCardCount = 0;
                    OrchidModProjectile.spawnDustCircle(projectile.Center, 29, 10, 15, true, 1.3f, 1f, 8f, true, true, false, 0, 0, true);
                    Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45);
                    int     projType = ProjectileType <Gambler.Projectiles.DungeonCardProjAlt>();
                    float   scale    = 10f - (Main.rand.NextFloat() * 2.5f);
                    Vector2 vel      = (projectile.velocity.RotatedByRandom(MathHelper.ToRadians(20)));
                    vel.Normalize();
                    vel *= scale;
                    bool       dummy      = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;
                    int        newProjInt = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, (int)(projectile.damage * 5), 0.1f, projectile.owner), dummy);
                    Projectile newProj    = Main.projectile[newProjInt];
                    newProj.ai[1]     = (int)target.whoAmI;
                    newProj.netUpdate = true;
                }
            }

            if (modPlayer.gamblerElementalLens)
            {
                target.AddBuff(31, 60 * 3);                 // Confused
            }
        }
示例#11
0
        public override bool PreDrawCatalyst(SpriteBatch spriteBatch, Projectile projectile, Player player, ref Color lightColor)
        {
            Texture2D texture;
            Vector2   position;
            Color     color;

            OrchidModProjectile.SetSpriteBatch(spriteBatch, blendState: BlendState.Additive);
            {
                /*if (player.itemAnimation > 0)
                 * {
                 *      var progress = 1 - player.itemAnimation / (float)player.itemAnimationMax;
                 *      var scale = projectile.scale * 0.5f * OrchidHelper.GradientValue<float>(MathHelper.Lerp, progress, 0, .8f, 1, .8f, .4f, 0);
                 *
                 *      texture = OrchidHelper.GetExtraTexture(15);
                 *      position = projectile.Center - Main.screenPosition + new Vector2(0, projectile.gfxOffY) + new Vector2(MathHelper.Lerp(20f, -20f, progress), 0).RotatedBy(projectile.ai[0]);
                 *      color = Main.DiscoColor * 0.8f;
                 *      spriteBatch.Draw(texture, position, new Rectangle(0, 0, 180, 30), color, projectile.ai[0] + MathHelper.PiOver2, new Vector2(90, 30), scale, SpriteEffects.None, 0);
                 * }*/

                texture  = OrchidHelper.GetExtraTexture(16);
                position = projectile.Center - Main.screenPosition + new Vector2(0, projectile.gfxOffY);
                color    = Main.DiscoColor * 0.55f;
                spriteBatch.Draw(texture, position, null, color, projectile.rotation, texture.Size() * 0.5f, projectile.scale, SpriteEffects.None, 0f);
            }
            OrchidModProjectile.SetSpriteBatch(spriteBatch);

            lightColor = Color.White;
            return(true);
        }
示例#12
0
 public override void AI()
 {
     if (projectile.timeLeft == 1)
     {
         projectile.friendly = true;
         OrchidModProjectile.spawnDustCircle(projectile.Center, 44, 5, 5 + Main.rand.Next(3), true, 1.5f, 1f, 3f, true, true, false, 0, 0, true);
     }
 }
示例#13
0
 public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer)
 {
     OrchidModProjectile.spawnDustCircle(projectile.Center, 127, 20, 20, true, 1f);
     if (OrchidModShamanHelper.getNbShamanicBonds(player, modPlayer, mod) > 2)
     {
         target.AddBuff((72), 5 * 60);                 // Midas
     }
 }
示例#14
0
 public override void DrawEffects(NPC npc, ref Color drawColor)
 {
     if (npc.HasBuff(BuffType <Alchemist.Buffs.Debuffs.Attraction>()) && Main.time % 90 == 0)
     {
         OrchidModProjectile.spawnDustCircle(npc.Center, 60, 10, 10, true, 1.5f, 1f, 2f);
         OrchidModProjectile.spawnDustCircle(npc.Center, 60, 10, 12, true, 1.5f, 1f, 4f);
     }
 }
        public override void Reaction(Player player, OrchidModPlayer modPlayer)
        {
            int spawnProj = ProjectileType <Alchemist.Projectiles.Nature.JungleLilyFlaskReaction>();

            Projectile.NewProjectile(player.Center.X, player.Center.Y, 0f, 0f, spawnProj, 0, 0f, player.whoAmI);
            OrchidModProjectile.spawnDustCircle(player.Center, 15, 10, 7, true, 1.5f, 1f, 3f);
            OrchidModProjectile.spawnDustCircle(player.Center, 15, 15, 10, true, 1.5f, 1f, 5f);
        }
        public override void Kill(int timeLeft)
        {
            int range = 50;

            // OrchidModProjectile.spawnDustCircle(projectile.Center, 67, (int)(range / 2), 5, true, 1.5f, 1f, 6f, true, true, false, 0, 0, true);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 67, 5, 6, true, 1f, 1f, 4f);
            spawnGenericExplosion(projectile, projectile.damage, 1f, range * 2, 2, false, 27);
        }
示例#17
0
        public override void Kill(int timeLeft)
        {
            OrchidModProjectile.spawnDustCircle(projectile.Center, 170, 20, 15, true, 1f, 0f);
            int dust = Dust.NewDust(projectile.Center, 0, 0, 270, 0.0f, 0.0f, 0, new Color(), Main.rand.Next(30, 130) * 0.013f);

            Main.dust[dust].noGravity = true;
            Main.dust[dust].velocity *= 0.2f;
            Main.dust[dust].scale     = 2.5f;
        }
示例#18
0
        public override void AI()
        {
            Player          player    = Main.player[Main.myPlayer]; // < TEST MP
            OrchidModPlayer modPlayer = player.GetModPlayer <OrchidModPlayer>();
            NPC             target    = Main.npc[(int)projectile.ai[1]];

            projectile.velocity *= 0.95f;

            if (Main.time % 5 == 0)
            {
                projectile.frame++;
            }
            if (projectile.frame == 7)
            {
                projectile.frame = 0;
            }

            if (target.active == false)
            {
                projectile.Kill();
            }

            if (projectile.timeLeft < 540)
            {
                for (int k = 0; k < Main.player.Length; k++)
                {
                    Player  playerMove = Main.player[k];
                    Vector2 newMove    = playerMove.Center - projectile.Center;
                    float   distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y);
                    if (distanceTo < 100f)
                    {
                        newMove             *= 3f / distanceTo;
                        projectile.velocity  = newMove;
                        projectile.netUpdate = true;
                    }

                    if (projectile.owner == Main.myPlayer)
                    {
                        if (playerMove.Hitbox.Intersects(projectile.Hitbox))
                        {
                            bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;
                            if (!dummy)
                            {
                                OrchidModGamblerHelper.addGamblerChip(this.gamblingChipChance, player, modPlayer);
                            }

                            bool crit = (Main.rand.Next(101) <= modPlayer.gamblerCrit + this.baseCritChance);
                            player.ApplyDamageToNPC(target, Main.DamageVar(projectile.damage), 0.1f, player.direction, crit);
                            OrchidModProjectile.spawnDustCircle(projectile.Center, 29, 10, 10, true, 1.3f, 1f, 5f, true, true, false, 0, 0, true);
                            OrchidModProjectile.spawnDustCircle(target.Center, 29, 10, 10, true, 1.3f, 1f, 5f, true, true, false, 0, 0, true);
                            Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45);
                            projectile.Kill();
                        }
                    }
                }
            }
        }
示例#19
0
        public override void Kill(int timeLeft)
        {
            int dustType = this.redDust ? 60 : 59;

            OrchidModProjectile.spawnDustCircle(projectile.Center, dustType, 10, 5, true, 1.5f, 1f, 5f);
            for (int i = 0; i < 3; i++)
            {
                Main.dust[Dust.NewDust(projectile.position, projectile.width, projectile.height, dustType)].noGravity = true;
            }
        }
示例#20
0
        public override void SafeAI()
        {
            if (!this.initialized)
            {
                this.initialized  = true;
                this.baseVelocity = projectile.velocity;
            }

            Player          player    = Main.player[projectile.owner];
            OrchidModPlayer modPlayer = player.GetModPlayer <OrchidModPlayer>();
            int             cardType  = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj ? modPlayer.gamblerCardDummy.type : modPlayer.gamblerCardCurrent.type;

            projectile.rotation += projectile.ai[1] * 0.05f;
            this.fireTimer--;
            this.dustVal--;
            projectile.velocity += this.baseVelocity / 100f;

            if (Main.rand.Next(20) == 0)
            {
                int dust = Dust.NewDust(projectile.position, projectile.width, projectile.height, 27);
                Main.dust[dust].scale    *= 1.5f;
                Main.dust[dust].noGravity = true;
            }

            if (Main.myPlayer == projectile.owner)
            {
                Vector2 vectorDist = player.Center - projectile.Center;
                float   distanceTo = (float)Math.Sqrt(vectorDist.X * vectorDist.X + vectorDist.Y * vectorDist.Y);
                if ((!(Main.mouseLeft && cardType == ItemType <Gambler.Weapons.Cards.GoblinArmyCard>() && modPlayer.GamblerDeckInHand) && projectile.timeLeft < 840) || distanceTo > distance)
                {
                    bool dummy = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;
                    OrchidModProjectile.spawnDustCircle(projectile.Center, 27, 5, 5, true, 1.3f, 1f, 5f, true, true, false, 0, 0, true);
                    OrchidModProjectile.spawnDustCircle(projectile.Center, 27, 5, 5, true, 1.3f, 1f, 3f, true, true, false, 0, 0, true);
                    projectile.Kill();
                }
            }

            if (fireTimer <= 0 && projectile.ai[1] == 1f)
            {
                Vector2 target  = Main.MouseWorld;
                Vector2 heading = target - projectile.Center;
                heading.Normalize();
                heading *= 15f;
                int  projType = ProjectileType <Gambler.Projectiles.GoblinArmyCardProjAlt>();
                bool dummy    = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;
                OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, heading.X, heading.Y, projType, projectile.damage, projectile.knockBack, projectile.owner), dummy);
                OrchidModProjectile.spawnDustCircle(projectile.Center, 27, 5, 5, true, 1.3f, 1f, 3f, true, true, false, 0, 0, true);
                fireTimerRef -= fireTimerRef > 15 ? 4 : 0;
                fireTimer     = fireTimerRef;
                Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 8);
            }

            this.spawnDust(27, (int)distance);
        }
示例#21
0
 public override void SafeAI()
 {
     OrchidModProjectile.resetIFrames(projectile);
     for (int i = 0; i < 10; i++)
     {
         int dust2 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 18);
         Main.dust[dust2].scale       = 1.2f;
         Main.dust[dust2].noGravity   = true;
         Main.dust[dust2].velocity.X /= 3;
         Main.dust[dust2].velocity.Y /= 3;
     }
 }
示例#22
0
        public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer)
        {
            if (justHit == 0)
            {
                projectile.damage += 2;
                OrchidModProjectile.spawnDustCircle(projectile.Center, 178, 10, 10, true, 1.5f, 1f, 2f);
            }

            projectile.velocity.Y  = -6;
            projectile.velocity.X *= 0.5f;
            this.justHit           = 30;
        }
示例#23
0
 public override void SafeAI()
 {
     for (int i = 0; i < 20; i++)
     {
         int dust2 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 6);
         Main.dust[dust2].scale       = 1.2f;
         Main.dust[dust2].noGravity   = true;
         Main.dust[dust2].velocity.X /= 3;
         Main.dust[dust2].velocity.Y /= 3;
     }
     OrchidModProjectile.spawnExplosionGore(projectile);
 }
示例#24
0
        public override void Kill(int timeLeft)
        {
            int damage = (int)((projectile.damage / 8) * (projectile.frame + 1));
            int range  = (int)(25 * (projectile.frame + 1));
            int nb     = (int)(10 * (projectile.frame + 1));

            OrchidModProjectile.spawnDustCircle(projectile.Center, sporeType, range, nb, true, 1.5f, 1f, 8f);
            spawnGenericExplosion(projectile, damage, projectile.knockBack, range * 2, 2, true, 14);
            int spawnProj  = 0;
            int spawnProj2 = 0;

            switch (sporeType)
            {
            case 6:
                spawnProj  = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProj>();
                spawnProj2 = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProjAlt>();
                break;

            case 59:
                spawnProj  = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProj>();
                spawnProj2 = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProjAlt>();
                break;

            case 61:
                spawnProj  = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProj>();
                spawnProj2 = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProjAlt>();
                break;

            case 63:
                spawnProj  = ProjectileType <Alchemist.Projectiles.Air.AirSporeProj>();
                spawnProj2 = ProjectileType <Alchemist.Projectiles.Air.AirSporeProjAlt>();
                break;

            default:
                break;
            }

            if (spawnProj != 0)
            {
                for (int i = 0; i < 5; i++)
                {
                    Vector2 vel      = (new Vector2(0f, -5f).RotatedBy(MathHelper.ToRadians(Main.rand.Next(360))));
                    int     newSpore = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj, this.sporeDamage, 0f, projectile.owner);
                    Main.projectile[newSpore].localAI[1] = 1f;
                }
                for (int i = 0; i < 5; i++)
                {
                    Vector2 vel = (new Vector2(0f, (float)(3 + Main.rand.Next(4))).RotatedByRandom(MathHelper.ToRadians(180)));
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj2, 0, 0f, projectile.owner);
                }
            }
        }
示例#25
0
        public override void AI()
        {
            projectile.alpha += 30;

            if (projectile.timeLeft == 80)
            {
                storeVelocity = projectile.velocity;
                storeDamage   = projectile.damage;
            }

            if (projectile.timeLeft > 35)
            {
                projectile.velocity *= 0f;
                projectile.damage    = 0;
                dustScale           += 0.0195f;
            }

            if (projectile.timeLeft == 35)
            {
                projectile.damage       = storeDamage;
                projectile.velocity     = storeVelocity;
                projectile.extraUpdates = 1;

                OrchidModProjectile.spawnDustCircle(projectile.Center, 92, 20, 5, true, 1.5f, 1f, 1f, true, true, false, 0, 0, true);
                for (int i = 0; i < 5; i++)
                {
                    int index = Dust.NewDust(projectile.position, projectile.width, projectile.height, 92);
                    Main.dust[index].scale     = 1.5f;
                    Main.dust[index].velocity  = projectile.velocity.RotatedByRandom(MathHelper.ToRadians(20));
                    Main.dust[index].noGravity = true;
                }
            }

            for (int i = 0; i < 3; i++)
            {
                Vector2 Position = projectile.position;
                int     index2   = Dust.NewDust(Position, projectile.width, projectile.height, 92);
                Main.dust[index2].scale     = (float)90 * 0.010f + dustScale / 3;
                Main.dust[index2].velocity *= 0.2f;
                Main.dust[index2].noGravity = true;
            }

            if (!this.initialized)
            {
                this.initialized = true;
                Player                    player        = Main.player[projectile.owner];
                OrchidModPlayer           modPlayer     = player.GetModPlayer <OrchidModPlayer>();
                int                       newCrit       = 10 * OrchidModShamanHelper.getNbShamanicBonds(player, modPlayer, mod) + modPlayer.shamanCrit + player.inventory[player.selectedItem].crit;
                OrchidModGlobalProjectile modProjectile = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>();
                modProjectile.baseCritChance = newCrit;
            }
        }
示例#26
0
        public override void Kill(int timeLeft)
        {
            OrchidModProjectile.spawnDustCircle(projectile.Center, 172, 25, 10, true, 1.5f, 1f, 5f);
            int  projType = ProjectileType <Gambler.Projectiles.MushroomCardProjExplosion>();
            bool dummy    = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;

            OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.position.X, projectile.position.Y, 0f, 0f, projType, (int)(projectile.damage * 0.8), 3f, projectile.owner, 0.0f, 0.0f), dummy);
            int dustType = 172;

            for (int i = 0; i < 3; i++)
            {
                Main.dust[Dust.NewDust(projectile.position, projectile.width, projectile.height, dustType)].noGravity = true;
            }
        }
示例#27
0
        public override void Kill(int timeLeft)
        {
            int range = 50;

            OrchidModProjectile.spawnDustCircle(projectile.Center, sporeType, (int)(range / 3), 5, true, 1.25f, 1f, 4f, true, true, false, 0, 0, true);
            spawnGenericExplosion(projectile, projectile.damage, projectile.knockBack, range * 3, 2, false);

            if (Main.rand.Next(2) == 0)
            {
                int spawnProj  = 0;
                int spawnProj2 = 0;

                switch (sporeType)
                {
                case 6:
                    spawnProj  = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProj>();
                    spawnProj2 = ProjectileType <Alchemist.Projectiles.Fire.FireSporeProjAlt>();
                    break;

                case 59:
                    spawnProj  = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProj>();
                    spawnProj2 = ProjectileType <Alchemist.Projectiles.Water.WaterSporeProjAlt>();
                    break;

                case 61:
                    spawnProj  = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProj>();
                    spawnProj2 = ProjectileType <Alchemist.Projectiles.Nature.NatureSporeProjAlt>();
                    break;

                case 63:
                    spawnProj  = ProjectileType <Alchemist.Projectiles.Air.AirSporeProj>();
                    spawnProj2 = ProjectileType <Alchemist.Projectiles.Air.AirSporeProjAlt>();
                    break;

                default:
                    break;
                }

                if (spawnProj != 0)
                {
                    Vector2 vel      = (new Vector2(0f, -5f).RotatedBy(MathHelper.ToRadians(Main.rand.Next(360))));
                    int     newSpore = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj, this.sporeDamage, 0f, projectile.owner);
                    Main.projectile[newSpore].localAI[1] = 1f;
                    vel = (new Vector2(0f, (float)(3 + Main.rand.Next(4))).RotatedByRandom(MathHelper.ToRadians(180)));
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, spawnProj2, 0, 0f, projectile.owner);
                }
            }
        }
示例#28
0
        public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer)
        {
            if (justHit == 0)
            {
                projectile.damage += 2;
                bool dummy    = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;
                int  projType = ProjectileType <Gambler.Projectiles.KingSlimeCardProj2>();
                OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0f, 0f, projType, projectile.damage, projectile.knockBack, projectile.owner), dummy);
                OrchidModProjectile.spawnDustCircle(projectile.Center, 59, 10, 10, true, 1.5f, 1f, 2f, true, true, false, 0, 0, false, true);
            }

            projectile.velocity.Y  = -10f;
            projectile.velocity.X *= 0.5f;
            this.justHit           = 30;
            projectile.ai[1]       = 1f;
        }
示例#29
0
 public override void BonusProjectiles(Player player, OrchidModPlayer modPlayer, Projectile projectile, OrchidModGlobalProjectile modProjectile, bool dummy)
 {
     if (modProjectile.gamblerInternalCooldown == 0)
     {
         modProjectile.gamblerInternalCooldown = 50;
         int     projType = ProjectileType <Gambler.Projectiles.OceanCardProj>();
         Vector2 target   = Main.MouseWorld;
         Vector2 heading  = target - projectile.position;
         heading.Normalize();
         heading *= new Vector2(0f, 5f).Length();
         int newProjectile = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, heading.X, heading.Y, projType, projectile.damage, projectile.knockBack, player.whoAmI), dummy);
         Main.projectile[newProjectile].ai[1]     = 1f;
         Main.projectile[newProjectile].netUpdate = true;
         OrchidModProjectile.spawnDustCircle(projectile.Center, 31, 10, 10, true, 1.5f, 1f, 3f, true, true, false, 0, 0, true);
     }
 }
示例#30
0
        public override void SafeKill(int timeLeft, Player player, OrchidModPlayer modPlayer)
        {
            Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 85);
            int dmg = projectile.damage;

            OrchidModProjectile.spawnDustCircle(projectile.Center, 102, 100, 20, false, 1.5f, 1f, 5f);
            OrchidModProjectile.spawnDustCircle(projectile.Center, 102, 150, 20, false, 1.5f, 1f, 5f);
            Player  targetPlayer = Main.player[Main.myPlayer];
            Vector2 center       = new Vector2(projectile.position.X + projectile.width * 0.5f, projectile.position.Y + projectile.height * 0.5f);
            float   offsetX      = targetPlayer.Center.X - center.X;
            float   offsetY      = targetPlayer.Center.Y - center.Y;
            float   distance     = (float)Math.Sqrt(offsetX * offsetX + offsetY * offsetY);

            if (distance < 300f)
            {
                if (!targetPlayer.moonLeech)
                {
                    int damage = player.statLifeMax2 - player.statLife;
                    if (dmg > damage)
                    {
                        dmg = damage;
                    }
                    if (dmg > 0)
                    {
                        player.HealEffect(dmg, true);
                        player.statLife += dmg;
                    }
                }
            }

            Vector2 move = Vector2.Zero;

            distance = 500f;
            for (int k = 0; k < 200; k++)
            {
                if (Main.npc[k].active && !Main.npc[k].friendly)
                {
                    Vector2 newMove    = Main.npc[k].Center - projectile.Center;
                    float   distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y);
                    if (distanceTo < distance)
                    {
                        OrchidModAlchemistNPC modTarget = Main.npc[k].GetGlobalNPC <OrchidModAlchemistNPC>();
                        modTarget.alchemistNature = 600;
                    }
                }
            }
        }