Adds Assurance effect
This commit is contained in:
parent
a31698cac0
commit
e85460fd22
|
@ -406,7 +406,10 @@
|
||||||
"priority": 0,
|
"priority": 0,
|
||||||
"target": "Any",
|
"target": "Any",
|
||||||
"category": "physical",
|
"category": "physical",
|
||||||
"flags": ["contact", "protect", "mirror"]
|
"flags": ["contact", "protect", "mirror"],
|
||||||
|
"effect": {
|
||||||
|
"name": "Assurance"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "astonish",
|
"name": "astonish",
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
type AttackUseHistory {
|
||||||
|
const HistoryElement@ Previous { get const; };
|
||||||
|
HistoryElementKind Kind { get const; };
|
||||||
|
uint TurnNumber { get const; };
|
||||||
|
const HistoryElement@ opImplCast() const;
|
||||||
|
const ExecutingMove@ Move { get const; };
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ type Battle {
|
||||||
ChoiceQueue@ TurnQueue { get const; };
|
ChoiceQueue@ TurnQueue { get const; };
|
||||||
narray<BattleSide>@ Sides { get const; };
|
narray<BattleSide>@ Sides { get const; };
|
||||||
narray<BattleParty>@ Parties { get const; };
|
narray<BattleParty>@ Parties { get const; };
|
||||||
|
BattleHistory@ History { get const; };
|
||||||
bool CanUse(BaseTurnChoice@ choice);
|
bool CanUse(BaseTurnChoice@ choice);
|
||||||
ref@ AddVolatile(const constString &in name);
|
ref@ AddVolatile(const constString &in name);
|
||||||
void RemoveVolatile(const constString &in name) const;
|
void RemoveVolatile(const constString &in name) const;
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
type BattleHistory {
|
||||||
|
const HistoryElement@ TopElement { get const; };
|
||||||
|
const AttackUseHistory@ GetLastUsedAttack() const;
|
||||||
|
const DamageHistory@ GetLastDamageOnTarget(Pokemon@ target) const;
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
type DamageHistory {
|
||||||
|
const HistoryElement@ Previous { get const; };
|
||||||
|
HistoryElementKind Kind { get const; };
|
||||||
|
uint TurnNumber { get const; };
|
||||||
|
const HistoryElement@ opImplCast() const;
|
||||||
|
Pokemon@ Target { get const; };
|
||||||
|
uint Amount { get const; };
|
||||||
|
DamageSource Source { get const; };
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
type HistoryElement {
|
||||||
|
const DamageHistory@ opCast() const;
|
||||||
|
const AttackUseHistory@ opCast() const;
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
enum HistoryElementKind {
|
||||||
|
AttackUse = 0,
|
||||||
|
Damage = 1,
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
namespace Gen7{
|
||||||
|
[Move effect=Assurance]
|
||||||
|
class Assurance : PkmnScript {
|
||||||
|
void OverrideDamage(ExecutingMove@ attack, Pokemon@ target, uint8 hit, uint &inout damage) override {
|
||||||
|
auto damageEvent = target.Battle.History.GetLastDamageOnTarget(target);
|
||||||
|
if (damageEvent is null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (damageEvent.TurnNumber == target.Battle.CurrentTurn){
|
||||||
|
damage *= 2;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if TESTS
|
||||||
|
[Test name="Assurance: damage without damage on the same turn"]
|
||||||
|
void Assurance_DamageWithoutEvent(){
|
||||||
|
auto battle = CreateSimpleBattle(684, "charizard", "venusaur", 100);
|
||||||
|
auto mon1 = battle.GetBattleSide(0).GetPokemon(0);
|
||||||
|
auto mon2 = battle.GetBattleSide(1).GetPokemon(0);
|
||||||
|
|
||||||
|
auto script = cast<Gen7::Assurance>(CreateMoveScript("Assurance"));
|
||||||
|
Require(script !is null);
|
||||||
|
uint damage = 100;
|
||||||
|
auto executingMove = CreateExecutingMove("Assurance", mon1, mon2);
|
||||||
|
script.OverrideDamage(executingMove, mon2, 0x0, damage);
|
||||||
|
RequireEquals(100, damage);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test name="Assurance: damage with damage on the same turn"]
|
||||||
|
void Assurance_DamageWithEvent(){
|
||||||
|
auto battle = CreateSimpleBattle(684, "charizard", "venusaur", 100);
|
||||||
|
auto mon1 = battle.GetBattleSide(0).GetPokemon(0);
|
||||||
|
auto mon2 = battle.GetBattleSide(1).GetPokemon(0);
|
||||||
|
|
||||||
|
mon2.Damage(10, DamageSource::AttackDamage);
|
||||||
|
|
||||||
|
auto script = cast<Gen7::Assurance>(CreateMoveScript("Assurance"));
|
||||||
|
Require(script !is null);
|
||||||
|
uint damage = 100;
|
||||||
|
auto executingMove = CreateExecutingMove("Assurance", mon1, mon2);
|
||||||
|
script.OverrideDamage(executingMove, mon2, 0x0, damage);
|
||||||
|
RequireEquals(200, damage);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue