public override UsageResults CalculateStatChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            usageResults = base.CalculateStatChanges(usageResults, user, target, battleData);

            Stats <sbyte> userSMs       = user.battleProperties.statModifiers;
            sbyte         userEvasionM  = user.battleProperties.evasionModifier;
            sbyte         userAccuracyM = user.battleProperties.accuracyModifier;

            Stats <sbyte> targetSMs       = target.battleProperties.statModifiers;
            sbyte         targetEvasionM  = target.battleProperties.evasionModifier;
            sbyte         targetAccuracyM = target.battleProperties.accuracyModifier;

            usageResults.userStatChanges = new Stats <sbyte>()
            {
                attack         = (sbyte)(targetSMs.attack - userSMs.attack),
                defense        = (sbyte)(targetSMs.defense - userSMs.defense),
                specialAttack  = (sbyte)(targetSMs.specialAttack - userSMs.specialAttack),
                specialDefense = (sbyte)(targetSMs.specialDefense - userSMs.specialDefense),
                speed          = (sbyte)(targetSMs.speed - userSMs.speed),
                health         = (sbyte)(targetSMs.health - userSMs.health)
            };

            usageResults.userEvasionChange  = (sbyte)(targetEvasionModifier - userEvasionM);
            usageResults.userAccuracyChange = (sbyte)(targetAccuracyM - userAccuracyM);

            return(usageResults);
        }
        public override void DoDefenseCurlUpdate(ref UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            base.DoDefenseCurlUpdate(ref usageResults, user, target, battleData);

            if (usageResults.Succeeded)
            {
                usageResults.setDefenseCurl = true;
            }
        }
Example #3
0
        public override void DoThrashingUpdate(ref UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            base.DoThrashingUpdate(ref usageResults, user, target, battleData);

            //Only set thrashing if not already thrashing
            if (user.battleProperties.volatileBattleStatus.thrashTurns <= 0)
            {
                usageResults.thrashingTurns = PokemonInstance.BattleProperties.VolatileBattleStatus.GetRandomThrashingDuration(battleData);
            }
        }
Example #4
0
        public override UsageResults CalculateEffect(PokemonInstance user, PokemonInstance target, BattleData battleData, bool allowMissing = true)
        {
            UsageResults usageResults = base.CalculateEffect(user, target, battleData, allowMissing);

            if (usageResults.Succeeded)
            {
                usageResults.increaseTargetStageSpikes = true;
            }

            return(usageResults);
        }
Example #5
0
        public override UsageResults CalculateEffect(PokemonInstance user, PokemonInstance target, BattleData battleData, bool allowMissing = true)
        {
            UsageResults usageResults = base.CalculateEffect(user, target, battleData, allowMissing);

            if (target.nonVolatileStatusCondition == PokemonInstance.NonVolatileStatusCondition.Paralysed)
            {
                usageResults.clearTargetNonVolatileStatusCondition = true;
            }

            return(usageResults);
        }
Example #6
0
 public override UsageResults CalculateStatChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
 {
     if (user.HasType(Type.Ghost))
     {
         return(usageResults); // No stat changes if user a ghost type
     }
     else
     {
         return(base.CalculateStatChanges(usageResults, user, target, battleData)); // Use default stat changes if user not a ghost tye
     }
 }
Example #7
0
 public override void DoAquaRingUpdate(ref UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
 {
     base.DoAquaRingUpdate(ref usageResults, user, target, battleData);
     if (user.battleProperties.volatileBattleStatus.aquaRing)
     {
         usageResults.failed = true;
     }
     else
     {
         usageResults.setAquaRing = true;
     }
 }
Example #8
0
        public override UsageResults CalculateStatChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            sbyte stageRaiseCount = battleData.currentWeatherId == 1 ? (sbyte)2 : (sbyte)1;

            usageResults.userStatChanges = new Stats <sbyte>()
            {
                attack        = stageRaiseCount,
                specialAttack = stageRaiseCount
            };

            return(usageResults);
        }
Example #9
0
        public override UsageResults CalculateEffect(PokemonInstance user, PokemonInstance target, BattleData battleData, bool allowMissing = true)
        {
            UsageResults usageResults = base.CalculateEffect(user, target, battleData, allowMissing);

            if (usageResults.Succeeded)
            {
                usageResults.clearUserStageSpikes        = true;
                usageResults.clearUserStageToxicSpikes   = true;
                usageResults.clearUserStagePointedStones = true;
            }

            return(usageResults);
        }
 public override UsageResults CalculateLeechSeedChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
 {
     if (target.battleProperties.volatileStatusConditions.leechSeed || target.HasType(Type.Grass))
     {
         usageResults.failed = true;
         return(usageResults);
     }
     else
     {
         usageResults.inflictLeechSeed = true;
         return(usageResults);
     }
 }
Example #11
0
        public override UsageResults CalculateNonVolatileStatusConditionChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            if (user.nonVolatileStatusCondition == PokemonInstance.NonVolatileStatusCondition.None)
            {
                usageResults.failed = true;
                return(usageResults);
            }
            else
            {
                usageResults.clearUserNonVolatileStatusCondition = true;
                usageResults.targetNonVolatileStatusCondition    = user.nonVolatileStatusCondition;

                return(usageResults);
            }
        }
        public override UsageResults CalculateStatChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            usageResults = base.CalculateStatChanges(usageResults, user, target, battleData);

            usageResults.userStatChanges = new Stats <sbyte>()
            {
                // This move sets the user's attack stat to the maximum value (6)
                attack = (sbyte)(PokemonInstance.BattleProperties.maximumStatModifier - user.battleProperties.statModifiers.attack),

                defense        = usageResults.userStatChanges.defense,
                specialAttack  = usageResults.userStatChanges.specialAttack,
                specialDefense = usageResults.userStatChanges.specialDefense,
                speed          = usageResults.userStatChanges.speed,
                health         = usageResults.userStatChanges.health
            };

            return(usageResults);
        }
Example #13
0
        public override UsageResults CalculateEffect(PokemonInstance user, PokemonInstance target, BattleData battleData, bool allowMissing = true)
        {
            UsageResults usageResults = base.CalculateEffect(user, target, battleData, allowMissing);

            if (usageResults.Succeeded)
            {
                if (battleData.stageModifiers.trickRoomRemainingTurns <= 0)
                {
                    usageResults.setTrickRoomDuration = BattleData.StageModifiers.GetRandomTrickRoomDuration(battleData);
                }
                else
                {
                    usageResults.failed = true; //If trick room already active, fail
                }
            }

            return(usageResults);
        }
        public override UsageResults CalculateStatChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            Stats <sbyte> userChanges = new Stats <sbyte>()
            {
                attack        = Convert.ToSByte(target.battleProperties.statModifiers.attack - user.battleProperties.statModifiers.attack),
                specialAttack = Convert.ToSByte(target.battleProperties.statModifiers.specialAttack - user.battleProperties.statModifiers.specialAttack),
            };

            Stats <sbyte> targetChanges = new Stats <sbyte>()
            {
                attack        = Convert.ToSByte(-userChanges.attack),
                specialAttack = Convert.ToSByte(-userChanges.specialAttack),
            };

            usageResults.userStatChanges   = userChanges;
            usageResults.targetStatChanges = targetChanges;

            return(usageResults);
        }
        public override UsageResults CalculateStatChanges(UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
        {
            Stats <sbyte> userChanges = new Stats <sbyte>()
            {
                attack         = Convert.ToSByte(target.battleProperties.statModifiers.attack - user.battleProperties.statModifiers.attack),
                defense        = Convert.ToSByte(target.battleProperties.statModifiers.defense - user.battleProperties.statModifiers.defense),
                specialAttack  = Convert.ToSByte(target.battleProperties.statModifiers.specialAttack - user.battleProperties.statModifiers.specialAttack),
                specialDefense = Convert.ToSByte(target.battleProperties.statModifiers.specialDefense - user.battleProperties.statModifiers.specialDefense),
                speed          = Convert.ToSByte(target.battleProperties.statModifiers.speed - user.battleProperties.statModifiers.speed),
            };

            sbyte userEvasionChange  = Convert.ToSByte(target.battleProperties.evasionModifier - user.battleProperties.evasionModifier);
            sbyte userAccuracyChange = Convert.ToSByte(target.battleProperties.accuracyModifier - user.battleProperties.accuracyModifier);

            Stats <sbyte> targetChanges = new Stats <sbyte>()
            {
                attack         = Convert.ToSByte(-userChanges.attack),
                defense        = Convert.ToSByte(-userChanges.defense),
                specialAttack  = Convert.ToSByte(-userChanges.specialAttack),
                specialDefense = Convert.ToSByte(-userChanges.specialDefense),
                speed          = Convert.ToSByte(-userChanges.speed),
            };

            sbyte targetEvasionChange  = Convert.ToSByte(-userEvasionChange);
            sbyte targetAccuracyChange = Convert.ToSByte(-userAccuracyChange);

            usageResults.userStatChanges    = userChanges;
            usageResults.userEvasionChange  = userEvasionChange;
            usageResults.userAccuracyChange = userAccuracyChange;

            usageResults.targetStatChanges    = targetChanges;
            usageResults.targetEvasionChange  = targetEvasionChange;
            usageResults.targetAccuracyChange = targetAccuracyChange;

            return(usageResults);
        }
Example #16
0
 public override void DoThrashingUpdate(ref UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
 {
     base.DoThrashingUpdate(ref usageResults, user, target, battleData);
     usageResults.thrashingTurns = PokemonInstance.BattleProperties.VolatileBattleStatus.GetRandomThrashingDuration(battleData);
 }
Example #17
0
 public override void DoBracingUpdate(ref UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData)
 {
     base.DoBracingUpdate(ref usageResults, user, target, battleData);
     usageResults.setBracing = true;
 }