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; } }
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); } }
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); }
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); }
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 } }
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; } }
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); }
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); } }
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); }
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); }
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); }
public override void DoBracingUpdate(ref UsageResults usageResults, PokemonInstance user, PokemonInstance target, BattleData battleData) { base.DoBracingUpdate(ref usageResults, user, target, battleData); usageResults.setBracing = true; }