Esempio n. 1
0
 public override void UpdateAnimation(TerraGuardian tg, GuardianSpecialAttackData data, ref bool UsingLeftArm, ref bool UsingRightArm)
 {
     if (data.Step == 1)
     {
         tg.BodyAnimationFrame = tg.LeftArmAnimationFrame = tg.RightArmAnimationFrame = 37 + Frame;
     }
 }
Esempio n. 2
0
 public override void UpdateAnimation(TerraGuardian tg, GuardianSpecialAttackData data, ref bool UsingLeftArm, ref bool UsingRightArm)
 {
     if (data.Step < 3)
     {
         if (!UsingLeftArm)
         {
             tg.LeftArmAnimationFrame = data.Step + 14;
         }
         if (!UsingRightArm)
         {
             tg.RightArmAnimationFrame = data.Step + 14;
         }
     }
     else
     {
         int Frame = 17 + FrameID;
         if (!UsingLeftArm)
         {
             tg.LeftArmAnimationFrame = Frame;
         }
         if (!UsingRightArm)
         {
             tg.RightArmAnimationFrame = Frame;
         }
     }
 }
Esempio n. 3
0
        public override void ModifyDrawing(TerraGuardian tg, GuardianSpecialAttackData d)
        {
            CaptainStenchBase.CaptainStenchData data =
                (CaptainStenchBase.CaptainStenchData)tg.Data;
            switch (data.SwordID)
            {
            case CaptainStenchBase.RubyFalchion:
            {
                if (d.Step >= 4)
                {
                    int       WhipFrame = d.Step - 4;
                    Texture2D texture   = tg.GetExtraTexture(CaptainStenchBase.RubyGPTextureID);
                    if (WhipFrame >= 0 && WhipFrame < 6)
                    {
                        Vector2 WhipPos = tg.CenterPosition - Main.screenPosition;
                        WhipPos.X += 40 * tg.Direction;
                        GuardianDrawData gdd = new GuardianDrawData(GuardianDrawData.TextureType.TGExtra, texture, WhipPos,
                                                                    new Rectangle(160 * WhipFrame, 0, 160, 160), Color.White, 0f, new Vector2(80, 80), tg.Scale,
                                                                    (tg.LookingLeft ? SpriteEffects.FlipHorizontally : SpriteEffects.None));
                        TerraGuardian.DrawFront.Add(gdd);
                    }
                    if (tg.HasBuff(Terraria.ModLoader.ModContent.BuffType <Buffs.DrainingHealth>()))
                    {
                        int SiphonFrame = d.Step - 5;
                        if (SiphonFrame >= 0 && SiphonFrame < 7)
                        {
                            GuardianDrawData gdd = new GuardianDrawData(GuardianDrawData.TextureType.TGExtra, texture, tg.Position - Main.screenPosition,
                                                                        new Rectangle(160 * SiphonFrame, 160, 160, 160), Color.White, 0f, new Vector2(80, 160), tg.Scale,
                                                                        (tg.LookingLeft ? SpriteEffects.FlipHorizontally : SpriteEffects.None));
                            TerraGuardian.DrawFront.Add(gdd);
                        }
                    }
                }
            }
            break;

            case CaptainStenchBase.DiamondFalchion:
            {
                int FlashFrame = (int)(((d.Step - 4) * AnimationTime + d.Time) * (1f / AnimationTime) * 0.5f);
                if (FlashFrame >= 0 && FlashFrame < 8)
                {
                    Texture2D        texture = tg.GetExtraTexture(CaptainStenchBase.DiamondGPTextureID);
                    GuardianDrawData gdd     = new GuardianDrawData(GuardianDrawData.TextureType.TGExtra, texture, tg.CenterPosition - Main.screenPosition,
                                                                    new Rectangle(200 * FlashFrame, 0, 200, 200), Color.White, 0f, new Vector2(100, 100), tg.Scale,
                                                                    (tg.LookingLeft ? SpriteEffects.FlipHorizontally : SpriteEffects.None));
                    TerraGuardian.DrawFront.Add(gdd);
                    FlashFrame++;
                    gdd = new GuardianDrawData(GuardianDrawData.TextureType.TGExtra, texture, tg.CenterPosition - Main.screenPosition,
                                               new Rectangle(200 * FlashFrame, 200, 200, 200), Color.White, 0f, new Vector2(100, 100), tg.Scale,
                                               (tg.LookingLeft ? SpriteEffects.FlipHorizontally : SpriteEffects.None));
                    TerraGuardian.DrawFront.Add(gdd);
                }
            }
            break;
            }
        }
Esempio n. 4
0
        public override void ModifyDrawing(TerraGuardian tg, GuardianSpecialAttackData data)
        {
            if (data.Step == 1)
            {
                Texture2D blade = tg.Base.sprites.GetExtraTexture(BaphaBase.HellSplitterTextureID);
                Vector2   Pivot = new Vector2(10, 102);
                if (tg.LookingLeft)
                {
                    Pivot.X = 88 - Pivot.X;
                }
                float Rotation = (MathHelper.ToRadians(-90) + (float)(FrameTime + Frame * 6) * (1f / (6 * 6)) * (MathHelper.ToRadians(210f))) * tg.Direction;

                GuardianDrawData gdd = new GuardianDrawData(GuardianDrawData.TextureType.TGExtra, blade, tg.GetGuardianLeftHandPosition - Main.screenPosition, new Rectangle(Frame * 88, AwakenedVersion ? 100 : 0, 88, 100), Color.White, Rotation, Pivot, tg.Scale, tg.LookingLeft ? SpriteEffects.FlipHorizontally : SpriteEffects.None);
                tg.Base.InjectTextureAfter(GuardianDrawData.TextureType.TGRightArm, gdd);
            }
        }
Esempio n. 5
0
        public override void UpdateAnimation(TerraGuardian tg, GuardianSpecialAttackData data, ref bool UsingLeftArm, ref bool UsingRightArm)
        {
            Vector2 AimPosition = tg.AimDirection - tg.CenterPosition;
            float   Angle       = Math.Abs(MathHelper.WrapAngle((float)Math.Atan2(AimPosition.Y, AimPosition.X)));

            if (AimPosition.X < 0)
            {
                Angle = (float)Math.PI - Angle;
            }
            tg.LeftArmAnimationFrame = 57;
            if (Angle < 30 * 0.017453f) //Middle
            {
                if (tg.Velocity.Y != 0)
                {
                    tg.LeftArmAnimationFrame = 61;
                }
            }
            else if (AimPosition.Y > 0) //Down
            {
                if (tg.Velocity.Y != 0)
                {
                    tg.LeftArmAnimationFrame = 60;
                }
                else
                {
                    tg.LeftArmAnimationFrame = 58;
                }
            }
            else //Up
            {
                if (tg.Velocity.Y != 0)
                {
                    tg.LeftArmAnimationFrame = 62;
                }
                else
                {
                    tg.LeftArmAnimationFrame = 59;
                }
            }
        }
Esempio n. 6
0
        public override void Update(TerraGuardian tg, GuardianSpecialAttackData d)
        {
            if (d.FirstFrame && d.Step == 1)
            {
                CaptainStenchBase.CaptainStenchData data = (CaptainStenchBase.CaptainStenchData)tg.Data;
                Rectangle AttackHitbox = new Rectangle((int)(-16 * tg.Direction * tg.Scale) + (int)tg.Position.X, (int)(-110 * tg.Scale + tg.Position.Y + tg.Base.CharacterPositionYDiscount), (int)(78 * tg.Scale), (int)(94 * tg.Scale));
                if (tg.LookingLeft)
                {
                    AttackHitbox.X -= AttackHitbox.Width;
                }
                for (int i = 0; i < 4; i++)
                {
                    Vector2 Position = new Vector2(AttackHitbox.X, AttackHitbox.Y);
                    switch (i)
                    {
                    case 1:
                        Position.X += AttackHitbox.Width;
                        break;

                    case 2:
                        Position.Y += AttackHitbox.Height;
                        break;

                    case 3:
                        Position.X += AttackHitbox.Width;
                        Position.Y += AttackHitbox.Height;
                        break;
                    }
                    Dust dust = Dust.NewDustDirect(Position, 1, 1, 50);
                    dust.noGravity = true;
                    dust.velocity  = Vector2.Zero;
                }
                int   Damage       = d.Damage;
                int   CriticalRate = 4 + tg.MeleeCriticalRate;
                float Knockback    = 8f;
                byte  SwordID      = data.SwordID;
                if (SwordID > 0)
                {
                    switch (SwordID)
                    {
                    case CaptainStenchBase.AmethystFalchion:
                        break;

                    case CaptainStenchBase.TopazFalchion:
                        Knockback += 12f;
                        break;

                    case CaptainStenchBase.SapphireFalchion:
                        //Knockback *= 0.11f;
                        break;

                    case CaptainStenchBase.EmeraldFalchion:
                        CriticalRate += 50;
                        break;
                    }
                }
                bool HitSomething = false;
                for (int n = 0; n < 200; n++)
                {
                    if (Main.npc[n].active && !Main.npc[n].friendly && !tg.NpcHasBeenHit(n) && Main.npc[n].getRect().Intersects(AttackHitbox))
                    {
                        if (!Main.npc[n].dontTakeDamage)
                        {
                            int HitDirection = tg.Direction;
                            if ((HitDirection == -1 && tg.Position.X < Main.npc[n].Center.X) ||
                                (HitDirection == 1 && tg.Position.X > Main.npc[n].Center.X))
                            {
                                HitDirection *= -1;
                            }
                            bool Critical  = (Main.rand.Next(100) < CriticalRate);
                            int  NewDamage = Damage;
                            if (tg.OwnerPos > -1 && !MainMod.DisableDamageReductionByNumberOfCompanions)
                            {
                                float DamageMult = Main.player[tg.OwnerPos].GetModPlayer <PlayerMod>().DamageMod;
                                NewDamage = (int)(NewDamage * DamageMult);
                            }
                            HitSomething = true;
                            double result = Main.npc[n].StrikeNPC(NewDamage, Knockback, HitDirection, Critical);
                            if (result > 0)
                            {
                                if (SwordID == CaptainStenchBase.AmethystFalchion)
                                {
                                    if (Main.rand.NextDouble() < 0.4)
                                    {
                                        Main.npc[n].AddBuff(Terraria.ID.BuffID.ShadowFlame, 10 * 60);
                                    }
                                }
                                else if (SwordID == CaptainStenchBase.RubyFalchion)
                                {
                                    int HealthRecover = (int)(Math.Max(1, result * 0.05f));
                                    tg.RestoreHP(HealthRecover);
                                }
                                else if (SwordID == CaptainStenchBase.DiamondFalchion)
                                {
                                    if (Main.rand.NextDouble() < 0.5)
                                    {
                                        Main.npc[n].AddBuff(Terraria.ID.BuffID.Dazed, 3 * 60);
                                    }
                                }
                                Main.PlaySound(Main.npc[n].HitSound, Main.npc[n].Center);
                            }
                            tg.AddNpcHit(n);
                            tg.IncreaseDamageStacker((int)result, Main.npc[n].lifeMax);
                            if (result > 0)
                            {
                                if (tg.HasFlag(GuardianFlags.BeetleOffenseEffect))
                                {
                                    tg.IncreaseCooldownValue(GuardianCooldownManager.CooldownType.BeetleCounter, (int)result);
                                }
                                tg.OnHitSomething(Main.npc[n]);
                                tg.AddSkillProgress((float)result, GuardianSkills.SkillTypes.Strength); //(float)result
                                if (SwordID == CaptainStenchBase.AmethystFalchion)
                                {
                                    tg.AddSkillProgress((float)result * 0.15f, GuardianSkills.SkillTypes.Mysticism);
                                }
                                if (Critical)
                                {
                                    tg.AddSkillProgress((float)result, GuardianSkills.SkillTypes.Luck); //(float)result
                                }
                            }
                        }
                        else
                        {
                        }
                    }
                }

                if (HitSomething)
                {
                    if (SwordID == CaptainStenchBase.SapphireFalchion)
                    {
                        tg.ChangeSubAttackCooldown(CaptainStenchBase.GPSubAttack, -0.25f);
                        tg.MP += (int)(2 * tg.ManaHealMult);
                        if (tg.MP > tg.MMP)
                        {
                            tg.MP = tg.MMP;
                        }
                    }
                }
            }
            if (d.Step < 2)
            {
                if (d.Time >= 4)
                {
                    d.ChangeStep();
                }
            }
            else
            {
                if (d.Time >= 8)
                {
                    d.EndUse();
                }
            }
        }
Esempio n. 7
0
 public override void OnUse(TerraGuardian tg, GuardianSpecialAttackData data)
 {
     data.Damage = CaptainStenchBase.GetCalculatedSwordDamage(tg);
 }
Esempio n. 8
0
 public override void UpdateAnimation(TerraGuardian tg, GuardianSpecialAttackData data, ref bool UsingLeftArm, ref bool UsingRightArm)
 {
     UsingRightArm             = true;
     tg.RightArmAnimationFrame = 43 + data.Step;
 }
Esempio n. 9
0
        public override void Update(TerraGuardian tg, GuardianSpecialAttackData d)
        {
            if (d.FirstFrame)
            {
                if (d.Step == 5)
                {
                    CaptainStenchBase.CaptainStenchData data =
                        (CaptainStenchBase.CaptainStenchData)tg.Data;
                    Rectangle AttackHitbox = new Rectangle((int)(-32 * tg.Direction * tg.Scale) + (int)tg.Position.X, (int)(-102 * tg.Scale + tg.Position.Y), (int)(104 * tg.Scale), (int)(98 * tg.Scale));
                    if (tg.LookingLeft)
                    {
                        AttackHitbox.X -= AttackHitbox.Width;
                    }
                    int   Damage       = d.Damage;
                    int   CriticalRate = 4 + tg.MeleeCriticalRate;
                    float Knockback    = 8f;
                    byte  SwordID      = data.SwordID;
                    Main.PlaySound(2, tg.CenterPosition, 1);
                    if (SwordID > 0)
                    {
                        switch (SwordID)
                        {
                        case CaptainStenchBase.AmethystFalchion:
                        {
                            Vector2 SpawnPos = tg.PositionWithOffset;
                            float   Scale    = (float)tg.Height / 74 * tg.Scale * 1.5f;
                            SpawnPos.Y -= 39 * Scale;         //78
                            int p = Projectile.NewProjectile(SpawnPos, new Vector2(16f * tg.Direction, 0), Terraria.ModLoader.ModContent.ProjectileType <Projectiles.AmethystGP>(),
                                                             (int)(Damage * 1.333f), Knockback, tg.GetSomeoneToSpawnProjectileFor);
                            Main.PlaySound(2, tg.CenterPosition, 101);
                            Main.projectile[p].scale     = Scale;
                            Main.projectile[p].netUpdate = true;
                        }
                        break;

                        case CaptainStenchBase.TopazFalchion:
                        {
                            Knockback += 12f;
                            for (int s = 0; s < 4; s++)
                            {
                                Vector2 ShardSpawnPosition = tg.PositionWithOffset;
                                ShardSpawnPosition.X += Main.rand.Next((int)(tg.Width * -0.5f), (int)(tg.Width * 0.5f));
                                ShardSpawnPosition.Y -= Main.rand.Next(8, tg.Height - 8);
                                int p = Projectile.NewProjectile(ShardSpawnPosition, new Vector2(4f * tg.Direction, 0),
                                                                 Terraria.ModLoader.ModContent.ProjectileType <Projectiles.TopazGP>(), (int)(Damage * 0.25f), Knockback, tg.GetSomeoneToSpawnProjectileFor);
                                Main.projectile[p].scale     = tg.Scale;
                                Main.projectile[p].netUpdate = true;
                                Main.PlaySound(2, tg.CenterPosition, 101);
                            }
                        }
                        break;

                        case CaptainStenchBase.SapphireFalchion:
                        {
                            //Knockback *= 0.11f;
                            int p = Projectile.NewProjectile(tg.CenterPosition, new Vector2(8f * tg.Direction, 0), Terraria.ModLoader.ModContent.ProjectileType <Projectiles.SapphireGP>(),
                                                             Damage, Knockback, tg.GetSomeoneToSpawnProjectileFor);
                            Main.projectile[p].scale     = tg.Scale;
                            Main.projectile[p].netUpdate = true;
                            Main.PlaySound(2, tg.CenterPosition, 39);
                        }
                        break;

                        case CaptainStenchBase.EmeraldFalchion:
                        {
                            CriticalRate += 50;
                            Vector2 SpawnPosition = tg.PositionWithOffset;
                            SpawnPosition.Y -= 40 * tg.Scale * 1.5f;         //78
                            int p = Projectile.NewProjectile(SpawnPosition, new Vector2(1f * tg.Direction, 0), Terraria.ModLoader.ModContent.ProjectileType <Projectiles.EmeraldGP>(),
                                                             (int)(Damage * 0.75f), Knockback * 0.9f, tg.GetSomeoneToSpawnProjectileFor);
                            Main.projectile[p].scale     = tg.Scale * 1.5f;
                            Main.projectile[p].netUpdate = true;
                        }
                        break;

                        case CaptainStenchBase.DiamondFalchion:
                        {
                            Damage += (int)(tg.MHP * 0.05f);
                        }
                        break;
                        }
                    }
                    for (int n = 0; n < 200; n++)
                    {
                        if (Main.npc[n].active && !Main.npc[n].friendly && !tg.NpcHasBeenHit(n) && Main.npc[n].getRect().Intersects(AttackHitbox))
                        {
                            if (!Main.npc[n].dontTakeDamage)
                            {
                                int HitDirection = tg.Direction;
                                if ((HitDirection == -1 && tg.Position.X < Main.npc[n].Center.X) ||
                                    (HitDirection == 1 && tg.Position.X > Main.npc[n].Center.X))
                                {
                                    HitDirection *= -1;
                                }
                                bool Critical  = (Main.rand.Next(100) < CriticalRate);
                                int  NewDamage = Damage;
                                if (tg.OwnerPos > -1 && !MainMod.DisableDamageReductionByNumberOfCompanions)
                                {
                                    float DamageMult = Main.player[tg.OwnerPos].GetModPlayer <PlayerMod>().DamageMod;
                                    NewDamage = (int)(NewDamage * DamageMult);
                                }
                                double result = Main.npc[n].StrikeNPC(NewDamage, Knockback, HitDirection, Critical);
                                if (result > 0)
                                {
                                    if (SwordID == CaptainStenchBase.AmethystFalchion)
                                    {
                                        if (Main.rand.NextDouble() < 0.4)
                                        {
                                            Main.npc[n].AddBuff(Terraria.ID.BuffID.ShadowFlame, 10 * 60);
                                        }
                                    }
                                    else if (SwordID == CaptainStenchBase.RubyFalchion)
                                    {
                                        float     HealthRecover     = 0.1f;
                                        Rectangle SweetSpotPosition = new Rectangle((int)(tg.Position.X + tg.Direction * (48 + 40) * tg.Scale), (int)(tg.CenterY - 40 * tg.Scale), (int)(32 * tg.Scale), (int)(32 * tg.Scale));
                                        if (tg.LookingLeft)
                                        {
                                            SweetSpotPosition.X -= SweetSpotPosition.Width;
                                        }
                                        if (Main.npc[n].getRect().Intersects(SweetSpotPosition))
                                        {
                                            HealthRecover = 0.5f;
                                            Main.PlaySound(1, tg.CenterPosition);
                                            for (int i = 0; i < 25; i++)
                                            {
                                                Dust.NewDust(Main.npc[n].position, Main.npc[n].width, Main.npc[n].height, Terraria.ID.DustID.Blood);
                                            }
                                        }
                                        if (HealthRecover * result >= 1)
                                        {
                                            tg.RestoreHP((int)(HealthRecover * result));
                                        }
                                        else
                                        {
                                            tg.RestoreHP(1);
                                        }
                                        tg.AddBuff(Terraria.ModLoader.ModContent.BuffType <Buffs.DrainingHealth>(), 60);
                                    }
                                    else if (SwordID == CaptainStenchBase.DiamondFalchion)
                                    {
                                        Main.npc[n].AddBuff(Terraria.ID.BuffID.Confused, 3 * 60);
                                    }
                                }
                                Main.PlaySound(Main.npc[n].HitSound, Main.npc[n].Center);
                                tg.AddNpcHit(n);
                                tg.IncreaseDamageStacker((int)result, Main.npc[n].lifeMax);
                                if (result > 0)
                                {
                                    if (tg.HasFlag(GuardianFlags.BeetleOffenseEffect))
                                    {
                                        tg.IncreaseCooldownValue(GuardianCooldownManager.CooldownType.BeetleCounter, (int)result);
                                    }
                                    tg.OnHitSomething(Main.npc[n]);
                                    tg.AddSkillProgress((float)result, GuardianSkills.SkillTypes.Strength); //(float)result
                                    if (SwordID == CaptainStenchBase.AmethystFalchion)
                                    {
                                        tg.AddSkillProgress((float)result * 0.15f, GuardianSkills.SkillTypes.Mysticism);
                                    }
                                    if (Critical)
                                    {
                                        tg.AddSkillProgress((float)result, GuardianSkills.SkillTypes.Luck); //(float)result
                                    }
                                }
                            }
                            else
                            {
                            }
                        }
                    }
                }
            }
            if (d.Step < 10)
            {
                if (d.Time >= AnimationTime)
                {
                    d.ChangeStep();
                }
            }
            else
            {
                d.EndUse();
            }
        }
Esempio n. 10
0
        public override void Update(TerraGuardian tg, GuardianSpecialAttackData data)
        {
            switch (data.Step)
            {
            case 0:
                if (tg.ItemAnimationTime == 0)
                {
                    data.ChangeStep();
                    Frame           = 0;
                    FrameTime       = 0;
                    AwakenedVersion = BaphaBase.IsAwakened(tg);
                }
                break;

            case 1:
            {
                bool Hit = false;
                FrameTime++;
                if (FrameTime >= 6)
                {
                    Frame++;
                    FrameTime = 0;
                    Hit       = Frame == 2;
                    if (Frame >= 6)
                    {
                        data.EndUse();
                        return;
                    }
                }
                if (Hit)
                {
                    Rectangle Rect = new Rectangle(0, 0, (int)(240 * tg.Scale), (int)(240 * tg.Scale));
                    Rect.X = (int)(tg.Position.X - (tg.LookingLeft ? Rect.Width * 0.55f : Rect.Width * 0.45f));
                    Rect.Y = (int)(tg.CenterY - Rect.Height * 0.45f);
                    int Damage = AwakenedVersion ? 50 : 25;
                    if (tg.SelectedItem > -1)
                    {
                        Damage += (int)(tg.Inventory[tg.SelectedItem].damage * ((float)tg.Inventory[tg.SelectedItem].useAnimation / tg.Inventory[tg.SelectedItem].useTime) * (AwakenedVersion ? 2 : 1.5f));
                    }
                    Damage = (int)(Damage * tg.MeleeDamageMultiplier);
                    GuardianSpecialAttackData.AffectedTargets[] targets = AreaDamage(tg, Damage, AwakenedVersion ? 12 : 8, Rect, BlockConsecutiveHits: false);
                    int BuffID = AwakenedVersion ? Terraria.ModLoader.ModContent.BuffType <Buffs.CrimsonConflagration>() : Terraria.ID.BuffID.OnFire;
                    foreach (GuardianSpecialAttackData.AffectedTargets t in targets)
                    {
                        switch (t.Target)
                        {
                        case GuardianSpecialAttackData.AffectedTargets.TargetTypes.Player:
                            Main.player[t.TargetID].AddBuff(BuffID, 5 * 60);
                            break;

                        case GuardianSpecialAttackData.AffectedTargets.TargetTypes.NPC:
                            Main.npc[t.TargetID].AddBuff(BuffID, 5 * 60);
                            Main.npc[t.TargetID].HitEffect(tg.Direction, t.Damage);
                            break;

                        case GuardianSpecialAttackData.AffectedTargets.TargetTypes.TerraGuardian:
                            MainMod.ActiveGuardians[t.TargetID].AddBuff(BuffID, 5 * 60);
                            break;
                        }
                    }
                }
            }
            break;
            }
        }
Esempio n. 11
0
 public override void Update(TerraGuardian tg, GuardianSpecialAttackData data)
 {
     tg.ShowOffHand = false;
     if (data.Step < 4)
     {
         Lighting.AddLight(tg.CenterPosition, Vector3.One);
     }
     if (data.FirstFrame)
     {
         if (data.Step == 4)
         {
             FrameID = 0;
             //
             Vector2 AimDirectionChange = tg.AimDirection;
             tg.LookingLeft = tg.Position.X - tg.AimDirection.X >= 0;
             float AngleChecker = MathHelper.WrapAngle((float)Math.Atan2((tg.CenterY - AimDirectionChange.Y) * tg.GravityDirection, tg.Position.X - AimDirectionChange.X));
             float ArmAngle     = tg.CalculateAimingUseAnimation(AngleChecker);
             if (ArmAngle < -0.75f)
             {
                 FrameID = 0;
             }
             else if (ArmAngle > 0.6f)
             {
                 FrameID = 3;
             }
             else if (ArmAngle >= -0.2f)
             {
                 FrameID = 1;
             }
             else
             {
                 FrameID = 2;
             }
             //
             int BackupLArmFrame = tg.LeftArmAnimationFrame, BackupRArmFrame = tg.RightArmAnimationFrame;
             for (byte i = 0; i < 2; i++)
             {
                 if ((i == 0 && TerraGuardian.UsingLeftArmAnimation) || (i == 1 && TerraGuardian.UsingRightArmAnimation))
                 {
                     continue;
                 }
                 if (i == 0)
                 {
                     tg.LeftArmAnimationFrame = 17 + FrameID;
                 }
                 else
                 {
                     tg.RightArmAnimationFrame = 17 + FrameID;
                 }
                 Vector2 ProjectileSpawnPosition = (i == 0 ? tg.GetGuardianLeftHandPosition : tg.GetGuardianRightHandPosition);
                 if (i == 0)
                 {
                     tg.LeftArmAnimationFrame = BackupLArmFrame;
                 }
                 else
                 {
                     tg.RightArmAnimationFrame = BackupRArmFrame;
                 }
                 Vector2 ShotDirection = tg.AimDirection - ProjectileSpawnPosition;
                 ShotDirection.Normalize();
                 ShotDirection *= 8f;
                 int Damage     = GetAttackDamage(tg);
                 int Proj       = IsAwakenedVersion ? Terraria.ModLoader.ModContent.ProjectileType <Projectiles.CrimsonFlameProjectile>() : Terraria.ModLoader.ModContent.ProjectileType <Projectiles.HellFlame>();
                 int resultproj = Projectile.NewProjectile(ProjectileSpawnPosition, ShotDirection,
                                                           Proj,
                                                           Damage, 6, (tg.OwnerPos > -1 ? tg.OwnerPos : Main.myPlayer));
                 tg.SetProjectileOwnership(resultproj);
                 Main.projectile[resultproj].scale = tg.Scale;
             }
         }
     }
     if (data.Time >= 6)
     {
         if (data.Step >= 4)
         {
             data.EndUse();
             return;
         }
         data.ChangeStep(TimeToDiscount: 6);
     }
 }
Esempio n. 12
0
        public override void Update(TerraGuardian tg, GuardianSpecialAttackData data)
        {
            if (data.FirstFrame)
            {
                Vector2 ProjectilePosition = Vector2.Zero;
                Vector2 AimPosition        = tg.AimDirection - tg.CenterPosition;
                float   Angle = Math.Abs(MathHelper.WrapAngle((float)Math.Atan2(AimPosition.Y, AimPosition.X)));
                if (AimPosition.X < 0)
                {
                    Angle = (float)Math.PI - Angle;
                }
                int LeftArmFrame = 57;
                if (Angle < 30 * 0.017453f) //Middle
                {
                    if (tg.Velocity.Y != 0)
                    {
                        LeftArmFrame = 61;
                    }
                }
                else if (AimPosition.Y > 0) //Down
                {
                    if (tg.Velocity.Y != 0)
                    {
                        LeftArmFrame = 60;
                    }
                    else
                    {
                        LeftArmFrame = 58;
                    }
                }
                else //Up
                {
                    if (tg.Velocity.Y != 0)
                    {
                        LeftArmFrame = 62;
                    }
                    else
                    {
                        LeftArmFrame = 59;
                    }
                }
                switch (LeftArmFrame)
                {
                case 57:
                    ProjectilePosition = new Vector2(46, 43);
                    break;

                case 58:
                    ProjectilePosition = new Vector2(46, 47);
                    break;

                case 59:
                    ProjectilePosition = new Vector2(48, 34);
                    break;

                case 60:
                    ProjectilePosition = new Vector2(42, 43);
                    break;

                case 61:
                    ProjectilePosition = new Vector2(46, 37);
                    break;

                case 62:
                    ProjectilePosition = new Vector2(45, 30);
                    break;
                }
                ProjectilePosition  *= 2;
                ProjectilePosition.X = ProjectilePosition.X - tg.Base.SpriteWidth * 0.5f;
                if (tg.LookingLeft)
                {
                    ProjectilePosition.X *= -1;
                }
                ProjectilePosition.Y = -tg.Base.SpriteHeight + ProjectilePosition.Y;
                ProjectilePosition   = tg.PositionWithOffset + ProjectilePosition * tg.Scale;
                AimPosition.Normalize();
                for (int i = 0; i < 4; i++)
                {
                    Dust.NewDust(ProjectilePosition, 2, 2, 132, AimPosition.X, AimPosition.Y);
                }
                int Damage = GetDamage(tg);
                int ID     = Projectile.NewProjectile(ProjectilePosition, AimPosition * 14f, Terraria.ModLoader.ModContent.ProjectileType <Projectiles.CannonBlast>(),
                                                      Damage, 0.06f, tg.GetSomeoneToSpawnProjectileFor);
                //Main.PlaySound(Terraria.ModLoader.SoundLoader.customSoundType, tg.CenterPosition, Terraria.ModLoader.SoundLoader.GetSoundSlot(Terraria.ModLoader.SoundType.Custom, "Creatures/CaptainStench/Sounds/BlasterSound"));
                Main.PlaySound(2, tg.CenterPosition, 20);
                Main.projectile[ID].scale     = tg.Scale;
                Main.projectile[ID].netUpdate = true;
                tg.SetProjectileOwnership(ID);
            }
            if (data.Time >= 8)
            {
                data.EndUse();
            }
        }
Esempio n. 13
0
 public override void Update(TerraGuardian tg, GuardianSpecialAttackData data)
 {
     tg.Velocity = Vector2.Zero;
     if (data.Step >= 4)
     {
         tg.TrailDelay    = 2;
         tg.TrailLength   = 10;
         tg.ImmuneTime    = 30;
         tg.ImmuneNoBlink = true;
         Vector2 Velocity = Collision.TileCollision(tg.TopLeftPosition, new Vector2(tg.Direction * 20, 0), tg.CollisionWidth, tg.CollisionHeight);
         tg.Position += Velocity;
         tg.Velocity  = Vector2.Zero;
         if (Collision.SolidCollision(tg.TopLeftPosition, tg.CollisionWidth, tg.CollisionHeight))
         {
             if (tg.LookingLeft)
             {
                 tg.Position.X = (int)(tg.Position.X * 0.0625f) * 16 + 16 + tg.CollisionWidth * 0.5f;
             }
             else
             {
                 tg.Position.X = (int)(tg.Position.X * 0.0625f) * 16 + tg.CollisionWidth - tg.CollisionWidth * 0.5f;
             }
         }
         Rectangle rect         = tg.HitBox;
         int       Damage       = data.Damage;
         float     Knockback    = 1.5f;
         int       CriticalRate = 65 + tg.MeleeCriticalRate;
         int       SwordID      = (tg.Data as CaptainStenchBase.CaptainStenchData).SwordID;
         for (int n = 0; n < 200; n++)
         {
             if (Main.npc[n].active && !Main.npc[n].friendly && !tg.NpcHasBeenHit(n) && Main.npc[n].getRect().Intersects(rect))
             {
                 if (!Main.npc[n].dontTakeDamage)
                 {
                     int HitDirection = tg.Direction;
                     if ((HitDirection == -1 && tg.Position.X < Main.npc[n].Center.X) ||
                         (HitDirection == 1 && tg.Position.X > Main.npc[n].Center.X))
                     {
                         HitDirection *= -1;
                     }
                     bool Critical  = (Main.rand.Next(100) < CriticalRate);
                     int  NewDamage = Damage;
                     if (tg.OwnerPos > -1 && !MainMod.DisableDamageReductionByNumberOfCompanions)
                     {
                         float DamageMult = Main.player[tg.OwnerPos].GetModPlayer <PlayerMod>().DamageMod;
                         NewDamage = (int)(NewDamage * DamageMult);
                     }
                     double result = Main.npc[n].StrikeNPC(NewDamage, Knockback, HitDirection, Critical);
                     if (result > 0)
                     {
                         if (SwordID == CaptainStenchBase.AmethystFalchion)
                         {
                             if (Main.rand.NextDouble() < 0.4)
                             {
                                 Main.npc[n].AddBuff(Terraria.ID.BuffID.ShadowFlame, 10 * 60);
                             }
                         }
                         else if (SwordID == CaptainStenchBase.RubyFalchion)
                         {
                             int HealthRecover = (int)(Math.Max(1, result * 0.05f));
                             tg.RestoreHP(HealthRecover);
                         }
                         else if (SwordID == CaptainStenchBase.DiamondFalchion)
                         {
                             Main.npc[n].AddBuff(Terraria.ID.BuffID.Confused, 3 * 60);
                         }
                     }
                     Main.PlaySound(Main.npc[n].HitSound, Main.npc[n].Center);
                     tg.AddNpcHit(n);
                     tg.IncreaseDamageStacker((int)result, Main.npc[n].lifeMax);
                     if (result > 0)
                     {
                         if (tg.HasFlag(GuardianFlags.BeetleOffenseEffect))
                         {
                             tg.IncreaseCooldownValue(GuardianCooldownManager.CooldownType.BeetleCounter, (int)result);
                         }
                         tg.OnHitSomething(Main.npc[n]);
                         tg.AddSkillProgress((float)result, GuardianSkills.SkillTypes.Strength); //(float)result
                         if (SwordID == CaptainStenchBase.AmethystFalchion)
                         {
                             tg.AddSkillProgress((float)result * 0.15f, GuardianSkills.SkillTypes.Mysticism);
                         }
                         if (Critical)
                         {
                             tg.AddSkillProgress((float)result, GuardianSkills.SkillTypes.Luck); //(float)result
                         }
                     }
                 }
             }
         }
     }
     if (data.Time >= 3)
     {
         if (data.Step < 10)
         {
             data.ChangeStep();
         }
         else
         {
             data.EndUse();
         }
     }
 }
Esempio n. 14
0
 public override void OnEndUse(TerraGuardian tg, GuardianSpecialAttackData data)
 {
     tg.UpdateStatus = true;
 }