This commit is contained in:
79
Scripts/Moves/AuroraVeil.as
Normal file
79
Scripts/Moves/AuroraVeil.as
Normal file
@@ -0,0 +1,79 @@
|
||||
namespace Gen7 {
|
||||
[Move effect=AuroraVeil]
|
||||
class AuroraVeil : PkmnScript {
|
||||
void OnSecondaryEffect(ExecutingMove@ move, Pokemon@ target, uint8 hit) override {
|
||||
if (target.Battle.GetWeatherName() != "hail"){
|
||||
move.GetHitData(target, hit).Fail();
|
||||
return;
|
||||
}
|
||||
|
||||
auto effect = cast<AuroraVeilEffect>(target.BattleSide.AddVolatile("AuroraVeil"));
|
||||
if (move.User.HasHeldItem("light_clay")){
|
||||
effect.SetTurns(8);
|
||||
}
|
||||
else{
|
||||
effect.SetTurns(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if TESTS
|
||||
|
||||
[Test name="AuroraVeil: Fails without hail"]
|
||||
void AuroraVeil_FailsWithoutHail(){
|
||||
auto battle = CreateSimpleBattle(0, "charizard", "venusaur", 100);
|
||||
auto mon1 = battle.GetBattleSide(0).GetPokemon(0);
|
||||
|
||||
auto script = cast<Gen7::AuroraVeil>(CreateMoveScript("AuroraVeil"));
|
||||
auto executingMove = CreateExecutingMove("aurora_veil", mon1, mon1);
|
||||
script.OnSecondaryEffect(executingMove, mon1, 0x0);
|
||||
Require(executingMove.GetHitData(mon1, 0x0).HasFailed);
|
||||
}
|
||||
|
||||
[Test name="AuroraVeil: Works with hail"]
|
||||
void AuroraVeil_WorksWithHail(){
|
||||
auto battle = CreateSimpleBattle(0, "charizard", "venusaur", 100);
|
||||
battle.SetWeather("hail");
|
||||
auto mon1 = battle.GetBattleSide(0).GetPokemon(0);
|
||||
|
||||
auto script = cast<Gen7::AuroraVeil>(CreateMoveScript("AuroraVeil"));
|
||||
auto executingMove = CreateExecutingMove("aurora_veil", mon1, mon1);
|
||||
script.OnSecondaryEffect(executingMove, mon1, 0x0);
|
||||
Require(!executingMove.GetHitData(mon1, 0x0).HasFailed);
|
||||
Require(battle.GetBattleSide(0).HasVolatile("AuroraVeil"));
|
||||
}
|
||||
|
||||
[Test name="AuroraVeil: Sets to 5 turns by default"]
|
||||
void AuroraVeil_FiveTurnsByDefault(){
|
||||
auto battle = CreateSimpleBattle(0, "charizard", "venusaur", 100);
|
||||
battle.SetWeather("hail");
|
||||
auto mon1 = battle.GetBattleSide(0).GetPokemon(0);
|
||||
|
||||
auto script = cast<Gen7::AuroraVeil>(CreateMoveScript("AuroraVeil"));
|
||||
auto executingMove = CreateExecutingMove("aurora_veil", mon1, mon1);
|
||||
script.OnSecondaryEffect(executingMove, mon1, 0x0);
|
||||
Require(!executingMove.GetHitData(mon1, 0x0).HasFailed);
|
||||
Require(battle.GetBattleSide(0).HasVolatile("AuroraVeil"));
|
||||
auto effect = cast<Gen7::AuroraVeilEffect>(battle.GetBattleSide(0).GetVolatile("AuroraVeil"));
|
||||
RequireEquals(5, effect._turnsRemaining);
|
||||
}
|
||||
|
||||
[Test name="AuroraVeil: Sets to 8 turns with light clay"]
|
||||
void AuroraVeil_EightTurnsWithLightClay(){
|
||||
auto battle = CreateSimpleBattle(0, "charizard", "venusaur", 100);
|
||||
battle.SetWeather("hail");
|
||||
auto mon1 = battle.GetBattleSide(0).GetPokemon(0);
|
||||
mon1.SetHeldItem("light_clay");
|
||||
|
||||
auto script = cast<Gen7::AuroraVeil>(CreateMoveScript("AuroraVeil"));
|
||||
auto executingMove = CreateExecutingMove("aurora_veil", mon1, mon1);
|
||||
script.OnSecondaryEffect(executingMove, mon1, 0x0);
|
||||
Require(!executingMove.GetHitData(mon1, 0x0).HasFailed);
|
||||
Require(battle.GetBattleSide(0).HasVolatile("AuroraVeil"));
|
||||
auto effect = cast<Gen7::AuroraVeilEffect>(battle.GetBattleSide(0).GetVolatile("AuroraVeil"));
|
||||
RequireEquals(8, effect._turnsRemaining);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
16
Scripts/Moves/Automize.as
Normal file
16
Scripts/Moves/Automize.as
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace Gen7 {
|
||||
class Automize : PkmnScript {
|
||||
void OnSecondaryEffect(ExecutingMove@ move, Pokemon@ target, uint8 hit) override {
|
||||
auto originalSpeed = move.User.GetBoostedStat(Statistic::Speed);
|
||||
auto originalWeight = move.User.Weight;
|
||||
move.User.ChangeStatBoost(Statistic::Speed, 2);
|
||||
if (move.User.GetBoostedStat(Statistic::Speed) != originalSpeed){
|
||||
// This setter function protects against going below 0.1
|
||||
move.User.Weight -= 100;
|
||||
if (move.User.Weight != originalWeight){
|
||||
// {Pokemon} became nimble text
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
22
Scripts/Moves/ModifyDamageIfHitByTarget.as
Normal file
22
Scripts/Moves/ModifyDamageIfHitByTarget.as
Normal file
@@ -0,0 +1,22 @@
|
||||
namespace Gen7 {
|
||||
// For moves such as Avalanche
|
||||
[Move effect=ModifyDamageIfHitByTarget]
|
||||
class ModifyDamageIfHitByTarget : PkmnScript {
|
||||
void OverrideDamage(ExecutingMove@ move, Pokemon@ target, uint8 hit, uint &inout damage) override {
|
||||
auto historyElement = move.User.Battle.History.TopElement;
|
||||
auto turn = move.User.Battle.CurrentTurn;
|
||||
while (historyElement !is null){
|
||||
if (historyElement.TurnNumber < turn){
|
||||
break;
|
||||
}
|
||||
if (historyElement.Kind == HistoryElementKind::AttackUse){
|
||||
auto attackEvent = cast<const AttackUseHistory@>(historyElement);
|
||||
if (attackEvent.Move.User is target && attackEvent.Move.IsPokemonTarget(move.User)){
|
||||
damage *= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user