Adds a bunch of abilities
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
67762af0e7
commit
6302ca9809
|
@ -0,0 +1,247 @@
|
||||||
|
{
|
||||||
|
"adaptability": {
|
||||||
|
"effect": "IncreasedStab"
|
||||||
|
},
|
||||||
|
"aerilate": {
|
||||||
|
"effect": "ChangeMoveType",
|
||||||
|
"parameters": ["normal", "flying"]
|
||||||
|
},
|
||||||
|
"aftermath": {
|
||||||
|
"effect": "Aftermath"
|
||||||
|
},
|
||||||
|
"air_lock": {
|
||||||
|
"effect": "SuppressWeather"
|
||||||
|
},
|
||||||
|
"analytic": {
|
||||||
|
"effect": "Analytic"
|
||||||
|
},
|
||||||
|
"anger_point": {
|
||||||
|
"effect": "AngerPoint"
|
||||||
|
},
|
||||||
|
"anticipation": {},
|
||||||
|
"arena_trap": {},
|
||||||
|
"aroma_veil": {},
|
||||||
|
"aura_break": {},
|
||||||
|
"bad_dreams": {},
|
||||||
|
"battery": {},
|
||||||
|
"battle_armor": {},
|
||||||
|
"battle_bond": {},
|
||||||
|
"beast_boost": {},
|
||||||
|
"berserk": {},
|
||||||
|
"big_pecks": {},
|
||||||
|
"blaze": {},
|
||||||
|
"bulletproof": {},
|
||||||
|
"cheek_pouch": {},
|
||||||
|
"chlorophyll": {},
|
||||||
|
"clear_body": {},
|
||||||
|
"cloud_nine": {},
|
||||||
|
"color_change": {},
|
||||||
|
"comatose": {},
|
||||||
|
"competitive": {},
|
||||||
|
"compound_eyes": {},
|
||||||
|
"contrary": {},
|
||||||
|
"corrosion": {},
|
||||||
|
"cursed_body": {},
|
||||||
|
"cute_charm": {},
|
||||||
|
"damp": {},
|
||||||
|
"dancer": {},
|
||||||
|
"dark_aura": {},
|
||||||
|
"dazzling": {},
|
||||||
|
"defeatist": {},
|
||||||
|
"defiant": {},
|
||||||
|
"delta_stream": {},
|
||||||
|
"desolate_land": {},
|
||||||
|
"disguise": {},
|
||||||
|
"download": {},
|
||||||
|
"drizzle": {},
|
||||||
|
"drought": {},
|
||||||
|
"dry_skin": {},
|
||||||
|
"early_bird": {},
|
||||||
|
"effect_spore": {},
|
||||||
|
"electric_surge": {},
|
||||||
|
"emergency_exit": {},
|
||||||
|
"fairy_aura": {},
|
||||||
|
"filter": {},
|
||||||
|
"flame_body": {},
|
||||||
|
"flare_boost": {},
|
||||||
|
"flash_fire": {},
|
||||||
|
"flower_gift": {},
|
||||||
|
"flower_veil": {},
|
||||||
|
"fluffy": {},
|
||||||
|
"forecast": {},
|
||||||
|
"forewarn": {},
|
||||||
|
"friend_guard": {},
|
||||||
|
"frisk": {},
|
||||||
|
"full_metal_body": {},
|
||||||
|
"fur_coat": {},
|
||||||
|
"gale_wings": {},
|
||||||
|
"galvanize": {},
|
||||||
|
"gluttony": {},
|
||||||
|
"gooey": {},
|
||||||
|
"grass_pelt": {},
|
||||||
|
"grassy_surge": {},
|
||||||
|
"guts": {},
|
||||||
|
"harvest": {},
|
||||||
|
"healer": {},
|
||||||
|
"heatproof": {},
|
||||||
|
"heavy_metal": {},
|
||||||
|
"honey_gather": {},
|
||||||
|
"huge_power": {},
|
||||||
|
"hustle": {},
|
||||||
|
"hydration": {},
|
||||||
|
"hyper_cutter": {},
|
||||||
|
"ice_body": {},
|
||||||
|
"illuminate": {},
|
||||||
|
"illusion": {},
|
||||||
|
"immunity": {},
|
||||||
|
"imposter": {},
|
||||||
|
"infiltrator": {},
|
||||||
|
"innards_out": {},
|
||||||
|
"inner_focus": {},
|
||||||
|
"insomnia": {},
|
||||||
|
"intimidate": {},
|
||||||
|
"iron_barbs": {},
|
||||||
|
"iron_fist": {},
|
||||||
|
"justified": {},
|
||||||
|
"keen_eye": {},
|
||||||
|
"klutz": {},
|
||||||
|
"leaf_guard": {},
|
||||||
|
"levitate": {},
|
||||||
|
"light_metal": {},
|
||||||
|
"lightning_rod": {},
|
||||||
|
"limber": {},
|
||||||
|
"liquid_ooze": {},
|
||||||
|
"liquid_voice": {},
|
||||||
|
"long_reach": {},
|
||||||
|
"magic_bounce": {},
|
||||||
|
"magic_guard": {},
|
||||||
|
"magician": {},
|
||||||
|
"magma_armor": {},
|
||||||
|
"magnet_pull": {},
|
||||||
|
"marvel_scale": {},
|
||||||
|
"mega_launcher": {},
|
||||||
|
"merciless": {},
|
||||||
|
"minus": {},
|
||||||
|
"misty_surge": {},
|
||||||
|
"mold_breaker": {},
|
||||||
|
"moody": {},
|
||||||
|
"motor_drive": {},
|
||||||
|
"moxie": {},
|
||||||
|
"multiscale": {},
|
||||||
|
"multitype": {},
|
||||||
|
"mummy": {},
|
||||||
|
"natural_cure": {},
|
||||||
|
"no_guard": {},
|
||||||
|
"normalize": {},
|
||||||
|
"oblivious": {},
|
||||||
|
"overcoat": {},
|
||||||
|
"overgrow": {},
|
||||||
|
"own_tempo": {},
|
||||||
|
"parental_bond": {},
|
||||||
|
"pickpocket": {},
|
||||||
|
"pickup": {},
|
||||||
|
"pixilate": {},
|
||||||
|
"plus": {},
|
||||||
|
"poison_heal": {},
|
||||||
|
"poison_point": {},
|
||||||
|
"poison_touch": {},
|
||||||
|
"power_construct": {},
|
||||||
|
"power_of_alchemy": {},
|
||||||
|
"prankster": {},
|
||||||
|
"pressure": {},
|
||||||
|
"primordial_sea": {},
|
||||||
|
"prism_armor": {},
|
||||||
|
"protean": {},
|
||||||
|
"psychic_surge": {},
|
||||||
|
"pure_power": {},
|
||||||
|
"queenly_majesty": {},
|
||||||
|
"quick_feet": {},
|
||||||
|
"rain_dish": {},
|
||||||
|
"rattled": {},
|
||||||
|
"receiver": {},
|
||||||
|
"reckless": {},
|
||||||
|
"refrigerate": {},
|
||||||
|
"regenerator": {},
|
||||||
|
"rivalry": {},
|
||||||
|
"rks_system": {},
|
||||||
|
"rock_head": {},
|
||||||
|
"rough_skin": {},
|
||||||
|
"run_away": {},
|
||||||
|
"sand_force": {},
|
||||||
|
"sand_rush": {},
|
||||||
|
"sand_stream": {},
|
||||||
|
"sand_veil": {},
|
||||||
|
"sap_sipper": {},
|
||||||
|
"schooling": {},
|
||||||
|
"scrappy": {},
|
||||||
|
"serene_grace": {},
|
||||||
|
"shadow_shield": {},
|
||||||
|
"shadow_tag": {},
|
||||||
|
"shed_skin": {},
|
||||||
|
"sheer_force": {},
|
||||||
|
"shell_armor": {},
|
||||||
|
"shield_dust": {},
|
||||||
|
"shields_down": {},
|
||||||
|
"simple": {},
|
||||||
|
"skill_link": {},
|
||||||
|
"slow_start": {},
|
||||||
|
"slush_rush": {},
|
||||||
|
"sniper": {},
|
||||||
|
"snow_cloak": {},
|
||||||
|
"snow_warning": {},
|
||||||
|
"solar_power": {},
|
||||||
|
"solid_rock": {},
|
||||||
|
"soul_heart": {},
|
||||||
|
"soundproof": {},
|
||||||
|
"speed_boost": {},
|
||||||
|
"stakeout": {},
|
||||||
|
"stall": {},
|
||||||
|
"stamina": {},
|
||||||
|
"stance_change": {},
|
||||||
|
"static": {},
|
||||||
|
"steadfast": {},
|
||||||
|
"steelworker": {},
|
||||||
|
"stench": {},
|
||||||
|
"sticky_hold": {},
|
||||||
|
"storm_drain": {},
|
||||||
|
"strong_jaw": {},
|
||||||
|
"sturdy": {},
|
||||||
|
"suction_cups": {},
|
||||||
|
"super_luck": {},
|
||||||
|
"surge_surfer": {},
|
||||||
|
"swarm": {},
|
||||||
|
"sweet_veil": {},
|
||||||
|
"swift_swim": {},
|
||||||
|
"symbiosis": {},
|
||||||
|
"synchronize": {},
|
||||||
|
"tangled_feet": {},
|
||||||
|
"tangling_hair": {},
|
||||||
|
"technician": {},
|
||||||
|
"telepathy": {},
|
||||||
|
"teravolt": {},
|
||||||
|
"thick_fat": {},
|
||||||
|
"tinted_lens": {},
|
||||||
|
"torrent": {},
|
||||||
|
"tough_claws": {},
|
||||||
|
"toxic_boost": {},
|
||||||
|
"trace": {},
|
||||||
|
"triage": {},
|
||||||
|
"truant": {},
|
||||||
|
"turboblaze": {},
|
||||||
|
"unaware": {},
|
||||||
|
"unburden": {},
|
||||||
|
"unnerve": {},
|
||||||
|
"victory_star": {},
|
||||||
|
"vital_spirit": {},
|
||||||
|
"volt_absorb": {},
|
||||||
|
"water_absorb": {},
|
||||||
|
"water_bubble": {},
|
||||||
|
"water_compaction": {},
|
||||||
|
"water_veil": {},
|
||||||
|
"weak_armor": {},
|
||||||
|
"white_smoke": {},
|
||||||
|
"wimp_out": {},
|
||||||
|
"wonder_guard": {},
|
||||||
|
"wonder_skin": {},
|
||||||
|
"zen_mode": {}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
namespace Gen7 {
|
||||||
|
[Ability effect=Aftermath]
|
||||||
|
class Aftermath : PkmnScript {
|
||||||
|
void OnFaint(Pokemon@ mon, DamageSource source) override {
|
||||||
|
// If the mon fainted due to something that was not a move, ignore
|
||||||
|
if (source != DamageSource::AttackDamage){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Last used attack on the target should always be the move that caused the faint if the source is AttackDamage
|
||||||
|
auto lastMoveEvent = mon.Battle.History.GetLastUsedAttackOnTarget(mon, 1);
|
||||||
|
// Check if the move is a contact move
|
||||||
|
if (lastMoveEvent.Move.UseMove.HasFlag("contact")){
|
||||||
|
// Damage by 1/4th of the mon's max HP.
|
||||||
|
lastMoveEvent.Move.User.Damage(lastMoveEvent.Move.User.MaxHealth / 4, DamageSource::Misc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
namespace Gen7 {
|
||||||
|
[Ability effect=Analytic]
|
||||||
|
class Analytic : PkmnScript {
|
||||||
|
void OverrideBasePower(ExecutingMove@ move, Pokemon@, uint8, uint8 &inout damage) override {
|
||||||
|
// If the turnqueue of the battle is empty now, we don't have any choices to execute after this.
|
||||||
|
// This means this is the last move in the turn.
|
||||||
|
if (!move.User.Battle.TurnQueue.HasNext()){
|
||||||
|
float expectedDamage = damage;
|
||||||
|
expectedDamage *= 1.3f;
|
||||||
|
if (expectedDamage > 255) expectedDamage = 255;
|
||||||
|
damage = uint8(expectedDamage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Gen7 {
|
||||||
|
class AngerPoint : PkmnScript {
|
||||||
|
void OnIncomingHit(ExecutingMove@ move, Pokemon@ target, uint8 hit) override {
|
||||||
|
if (move.GetHitData(target, hit).IsCritical){
|
||||||
|
target.ChangeStatBoost(Statistic::Attack, 12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
namespace Gen7 {
|
||||||
|
[Ability effect=ChangeMoveType]
|
||||||
|
class ChangeMoveType : PkmnScript {
|
||||||
|
string _fromType;
|
||||||
|
string _toType;
|
||||||
|
bool _changedLastAttack = false;
|
||||||
|
|
||||||
|
void OnInitialize(const narray<EffectParameter@>@ parameters) override {
|
||||||
|
_fromType = parameters[0].AsString();
|
||||||
|
_toType = parameters[1].AsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChangeAttackType(ExecutingMove@ move, Pokemon@ target, uint8 hit, uint8 &inout t) override {
|
||||||
|
auto lib = move.User.Battle.Library.StaticLibrary.TypeLibrary;
|
||||||
|
auto fromTypeId = lib.GetTypeId(_fromType);
|
||||||
|
if (fromTypeId == t){
|
||||||
|
t = lib.GetTypeId(_toType);
|
||||||
|
_changedLastAttack = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
_changedLastAttack = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModifyDamageModifier(ExecutingMove@, Pokemon@, uint8, float &inout damageMod) override {
|
||||||
|
if (_changedLastAttack){
|
||||||
|
damageMod *= 1.2f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace Gen7 {
|
||||||
|
[Ability effect=IncreasedStab]
|
||||||
|
class IncreasedStab : PkmnScript {
|
||||||
|
void OverrideSTABModifier(ExecutingMove@ move, Pokemon@ target, uint8 hit, float &inout stabMod) override {
|
||||||
|
if (move.User.HasType(move.GetHit(target, hit).Type)){
|
||||||
|
stabMod = 2;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
namespace Gen7 {
|
||||||
|
class SuppressWeatherAbility : PkmnScript {
|
||||||
|
void OnSwitchIn(Pokemon@ pokemon) override {
|
||||||
|
pokemon.Battle.SuppressWeather();
|
||||||
|
pokemon.Battle.AddVolatile("SuppressWeather");
|
||||||
|
};
|
||||||
|
|
||||||
|
void OnRemove() override {
|
||||||
|
auto battle = cast<Pokemon@>(GetOwner()).Battle;
|
||||||
|
battle.UnsuppressWeather();
|
||||||
|
auto script = cast<SuppressWeather>(battle.GetVolatile("SuppressWeather"));
|
||||||
|
script.Unstack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
namespace Gen7 {
|
||||||
|
[Battle effect=SuppressWeather]
|
||||||
|
class SuppressWeather : PkmnScript {
|
||||||
|
int num = 1;
|
||||||
|
|
||||||
|
void Stack() override {
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Unstack() {
|
||||||
|
num--;
|
||||||
|
if (num == 0){
|
||||||
|
cast<Battle@>(GetOwner()).RemoveVolatile("SuppressWeather");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BlockWeather(Battle@, bool &inout block){
|
||||||
|
block = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,9 +12,11 @@ type Battle {
|
||||||
ref@ AddVolatile(const constString &in name);
|
ref@ AddVolatile(const constString &in name);
|
||||||
ref@ GetVolatile(const constString &in name);
|
ref@ GetVolatile(const constString &in name);
|
||||||
void RemoveVolatile(const constString &in name) const;
|
void RemoveVolatile(const constString &in name) const;
|
||||||
void SetWeather(const constString &in name) const;
|
bool SetWeather(const constString &in name) const;
|
||||||
void ClearWeather(const constString &in name) const;
|
void ClearWeather(const constString &in name) const;
|
||||||
const constString& GetWeatherName() const;
|
const constString& GetWeatherName() const;
|
||||||
|
void SuppressWeather() const;
|
||||||
|
void UnsuppressWeather() const;
|
||||||
BattleSide@ GetBattleSide(uint8 index);
|
BattleSide@ GetBattleSide(uint8 index);
|
||||||
BattleParty@ GetParty(uint8 index);
|
BattleParty@ GetParty(uint8 index);
|
||||||
BattleParty@ FindPartyForPokemon(Pokemon@ pokemon);
|
BattleParty@ FindPartyForPokemon(Pokemon@ pokemon);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
type BattleHistory {
|
type BattleHistory {
|
||||||
const HistoryElement@ TopElement { get const; };
|
const HistoryElement@ TopElement { get const; };
|
||||||
const AttackUseHistory@ GetLastUsedAttack(uint maxTurns = 0) const;
|
const AttackUseHistory@ GetLastUsedAttack(uint maxTurns = 0) const;
|
||||||
|
const AttackUseHistory@ GetLastUsedAttackOnTarget(Pokemon@ target, uint maxTurns = 0) const;
|
||||||
const DamageHistory@ GetLastDamageOnTarget(Pokemon@ target, uint maxTurns = 0) const;
|
const DamageHistory@ GetLastDamageOnTarget(Pokemon@ target, uint maxTurns = 0) const;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
type ChoiceQueue {
|
type ChoiceQueue {
|
||||||
bool MovePokemonChoiceNext(Pokemon@ target);
|
bool MovePokemonChoiceNext(Pokemon@ target);
|
||||||
const BaseTurnChoice@ Peek() const;
|
const BaseTurnChoice@ Peek() const;
|
||||||
|
bool HasNext() const;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
enum DamageSource {
|
enum DamageSource {
|
||||||
AttackDamage = 0,
|
AttackDamage = 0,
|
||||||
Struggle = 1,
|
Misc = 1,
|
||||||
|
Struggle = 2,
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ shared abstract class PkmnScript {
|
||||||
void OnAttackMiss(ExecutingMove@, Pokemon@){};
|
void OnAttackMiss(ExecutingMove@, Pokemon@){};
|
||||||
void ChangeAttackType(ExecutingMove@, Pokemon@, uint8, uint8 &inout){};
|
void ChangeAttackType(ExecutingMove@, Pokemon@, uint8, uint8 &inout){};
|
||||||
void ChangeEffectiveness(ExecutingMove@, Pokemon@, uint8, float &inout){};
|
void ChangeEffectiveness(ExecutingMove@, Pokemon@, uint8, float &inout){};
|
||||||
|
void OnIncomingHit(ExecutingMove@, Pokemon@, uint8){};
|
||||||
void PreventSecondaryEffects(ExecutingMove@, Pokemon@, uint8, bool &inout){};
|
void PreventSecondaryEffects(ExecutingMove@, Pokemon@, uint8, bool &inout){};
|
||||||
void OnSecondaryEffect(ExecutingMove@, Pokemon@, uint8){};
|
void OnSecondaryEffect(ExecutingMove@, Pokemon@, uint8){};
|
||||||
void OnAfterHits(ExecutingMove@, Pokemon@){};
|
void OnAfterHits(ExecutingMove@, Pokemon@){};
|
||||||
|
@ -38,9 +39,12 @@ shared abstract class PkmnScript {
|
||||||
void PreventOpponentRunAway(FleeTurnChoice@, bool &inout){};
|
void PreventOpponentRunAway(FleeTurnChoice@, bool &inout){};
|
||||||
void PreventOpponentSwitch(SwitchTurnChoice@, bool &inout){};
|
void PreventOpponentSwitch(SwitchTurnChoice@, bool &inout){};
|
||||||
void OnEndTurn(){};
|
void OnEndTurn(){};
|
||||||
|
void OnFaint(Pokemon@, DamageSource){};
|
||||||
void ModifyCriticalStage(ExecutingMove@, Pokemon@, uint8, uint8 &inout){};
|
void ModifyCriticalStage(ExecutingMove@, Pokemon@, uint8, uint8 &inout){};
|
||||||
void OverrideCriticalModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
|
void OverrideCriticalModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
|
||||||
void OverrideSTABModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
|
void OverrideSTABModifier(ExecutingMove@, Pokemon@, uint8, float &inout){};
|
||||||
void ModifyExperienceGain(Pokemon@, Pokemon@, uint &inout){};
|
void ModifyExperienceGain(Pokemon@, Pokemon@, uint &inout){};
|
||||||
void DoesShareExperience(Pokemon@, Pokemon@, bool &inout){};
|
void DoesShareExperience(Pokemon@, Pokemon@, bool &inout){};
|
||||||
|
void BlockWeather(Battle@, bool &inout){};
|
||||||
|
void OnSwitchIn(Pokemon@){};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ type Pokemon {
|
||||||
bool Shiny { get const; };
|
bool Shiny { get const; };
|
||||||
const Item@ HeldItem { get const; };
|
const Item@ HeldItem { get const; };
|
||||||
uint CurrentHealth { get const; };
|
uint CurrentHealth { get const; };
|
||||||
const constString& ActiveAbility { get const; };
|
|
||||||
bool IsFainted { get const; };
|
bool IsFainted { get const; };
|
||||||
uint MaxHealth { get const; };
|
uint MaxHealth { get const; };
|
||||||
const Species@ DisplaySpecies { get const; };
|
const Species@ DisplaySpecies { get const; };
|
||||||
|
@ -19,6 +18,7 @@ type Pokemon {
|
||||||
const narray<LearnedMove@>@ Moves { get const; };
|
const narray<LearnedMove@>@ Moves { get const; };
|
||||||
float Weight { get const; set; };
|
float Weight { get const; set; };
|
||||||
float Height { get const; set; };
|
float Height { get const; set; };
|
||||||
|
const constString& ActiveAbility { get const; };
|
||||||
bool HasHeldItem(const constString &in name) const;
|
bool HasHeldItem(const constString &in name) const;
|
||||||
void SetHeldItem(const constString &in name);
|
void SetHeldItem(const constString &in name);
|
||||||
void SetHeldItem(const Item@ item);
|
void SetHeldItem(const Item@ item);
|
||||||
|
|
Loading…
Reference in New Issue