From 92edafc6fbdd08f52e02ca893fe5de4a3f692219 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 12 Feb 2022 17:47:59 +0100 Subject: [PATCH] Implements beastboost, berserk, big pecks, blaze, and bulletproof abilities --- Abilities.json | 25 +++++++++++++++++++------ Scripts/Abilities/BeastBoost.as | 1 + Scripts/Abilities/Berserk.as | 1 + Scripts/Abilities/Bulletproof.as | 10 ++++++++++ Scripts/Abilities/ChangeMoveType.as | 17 ++++++++--------- Scripts/Abilities/PowerUpType.as | 16 ++++++++++++++++ Scripts/Abilities/PreventDefLowering.as | 10 ++++++++++ Scripts/Interfaces/PkmnScript.as | 6 +++++- Scripts/Moves/ChangeAllTargetStats.as | 2 +- Scripts/Moves/ChangeTargetAtt.as | 2 +- Scripts/Moves/ChangeTargetDef.as | 2 +- Scripts/Moves/ChangeTargetSpDef.as | 2 +- Scripts/Moves/ChangeTargetSpeed.as | 2 +- Scripts/Moves/Drain.as | 2 +- Scripts/Moves/HealEachEndOfTurn.as | 2 +- 15 files changed, 77 insertions(+), 23 deletions(-) create mode 100644 Scripts/Abilities/Bulletproof.as create mode 100644 Scripts/Abilities/PowerUpType.as create mode 100644 Scripts/Abilities/PreventDefLowering.as diff --git a/Abilities.json b/Abilities.json index 80b9427..0a3504b 100644 --- a/Abilities.json +++ b/Abilities.json @@ -42,12 +42,25 @@ "battle_bond": { "effect": "BattleBond" }, - "beast_boost": {}, - "berserk": {}, - "big_pecks": {}, - "blaze": {}, - "bulletproof": {}, - "cheek_pouch": {}, + "beast_boost": { + "effect": "BeastBoost" + }, + "berserk": { + "effect": "Berserk" + }, + "big_pecks": { + "effect": "PreventDefLowering" + }, + "blaze": { + "effect": "PowerUpType", + "parameters": ["fire"] + }, + "bulletproof": { + "effect": "Bulletproof" + }, + "cheek_pouch": { + + }, "chlorophyll": {}, "clear_body": {}, "cloud_nine": {}, diff --git a/Scripts/Abilities/BeastBoost.as b/Scripts/Abilities/BeastBoost.as index fe07a60..e58b69b 100644 --- a/Scripts/Abilities/BeastBoost.as +++ b/Scripts/Abilities/BeastBoost.as @@ -1,4 +1,5 @@ namespace Gen7 { + [Ability effect=BeastBoost] class BeastBoost : PkmnScript { void OnFaintingOpponent(ExecutingMove@ move, Pokemon@, uint8) override { Statistic increaseStat = Statistic::HP; diff --git a/Scripts/Abilities/Berserk.as b/Scripts/Abilities/Berserk.as index d0435fe..973453f 100644 --- a/Scripts/Abilities/Berserk.as +++ b/Scripts/Abilities/Berserk.as @@ -1,4 +1,5 @@ namespace Gen7 { + [Ability effect=Berserk] class Berserk : PkmnScript { void OnDamage(Pokemon@ pokemon, DamageSource, uint old, uint new) override { if (float(old) / pokemon.MaxHealth >= 0.5f && float(new) / pokemon.MaxHealth < 0.5f) { diff --git a/Scripts/Abilities/Bulletproof.as b/Scripts/Abilities/Bulletproof.as new file mode 100644 index 0000000..fa02204 --- /dev/null +++ b/Scripts/Abilities/Bulletproof.as @@ -0,0 +1,10 @@ +namespace Gen7 { + [Ability effect=Bulletproof] + class Bulletproof : PkmnScript { + void IsInvulnerable(ExecutingMove@ move, Pokemon@, bool &inout isInvulnerable) { + if (move.UseMove.HasFlag("ballistics")){ + isInvulnerable = true; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Abilities/ChangeMoveType.as b/Scripts/Abilities/ChangeMoveType.as index 81bbd46..a790b7e 100644 --- a/Scripts/Abilities/ChangeMoveType.as +++ b/Scripts/Abilities/ChangeMoveType.as @@ -1,20 +1,19 @@ namespace Gen7 { [Ability effect=ChangeMoveType] class ChangeMoveType : PkmnScript { - string _fromType; - string _toType; + uint8 _fromType; + uint8 _toType; bool _changedLastAttack = false; - void OnInitialize(const narray@ parameters) override { - _fromType = parameters[0].AsString(); - _toType = parameters[1].AsString(); + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override { + auto lib = library.StaticLibrary.TypeLibrary; + _fromType = lib.GetTypeId(parameters[0].AsString()); + _toType = lib.GetTypeId(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); + if (_fromType == t){ + t = _toType; _changedLastAttack = true; } else{ diff --git a/Scripts/Abilities/PowerUpType.as b/Scripts/Abilities/PowerUpType.as new file mode 100644 index 0000000..7f9fd2f --- /dev/null +++ b/Scripts/Abilities/PowerUpType.as @@ -0,0 +1,16 @@ +namespace Gen7 { + [Ability effect=PowerUpType] + class PowerUpTypeAbility : PkmnScript { + uint8 _typeId; + + void OnInitialize(const BattleLibrary@ library, const narray@ parameters){ + _typeId = library.StaticLibrary.TypeLibrary.GetTypeId(parameters[0].AsString()); + } + + void ModifyOffensiveStatValue(ExecutingMove@ move, Pokemon@ target, uint8, float &inout value) override { + if (move.Move.MoveData.Type == _typeId){ + value *= 1.5f; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Abilities/PreventDefLowering.as b/Scripts/Abilities/PreventDefLowering.as new file mode 100644 index 0000000..f532b87 --- /dev/null +++ b/Scripts/Abilities/PreventDefLowering.as @@ -0,0 +1,10 @@ +namespace Gen7 { + [Ability effect=PreventDefLowering] + class PreventDefLowering : PkmnScript { + void PreventStatBoostChange(Pokemon@, Statistic stat, int8 amount, bool &inout prevent) override { + if (stat == Statistic::Defense && amount < 0) { + prevent = true; + } + } + } +} \ No newline at end of file diff --git a/Scripts/Interfaces/PkmnScript.as b/Scripts/Interfaces/PkmnScript.as index 5f0a4a9..666e380 100644 --- a/Scripts/Interfaces/PkmnScript.as +++ b/Scripts/Interfaces/PkmnScript.as @@ -2,7 +2,7 @@ shared abstract class PkmnScript { ref@ __owner; ref@& GetOwner(){ return __owner; }; - void OnInitialize(const narray@){}; + void OnInitialize(const BattleLibrary@, const narray@){}; void Stack(){}; void OnRemove(){}; void OnBeforeTurn(BaseTurnChoice@){}; @@ -20,6 +20,8 @@ shared abstract class PkmnScript { void BlockCritical(ExecutingMove@, Pokemon@, uint8, bool &inout){}; void OnIncomingHit(ExecutingMove@, Pokemon@, uint8){}; void OnFaintingOpponent(ExecutingMove@, Pokemon@, uint8){}; + void PreventStatBoostChange(Pokemon@, Statistic, int8, bool &inout){}; + void ModifyStatBoostChange(Pokemon@, Statistic, int8 &inout){}; void PreventSecondaryEffects(ExecutingMove@, Pokemon@, uint8, bool &inout){}; void OnSecondaryEffect(ExecutingMove@, Pokemon@, uint8){}; void OnAfterHits(ExecutingMove@, Pokemon@){}; @@ -51,4 +53,6 @@ shared abstract class PkmnScript { void DoesShareExperience(Pokemon@, Pokemon@, bool &inout){}; void BlockWeather(Battle@, bool &inout){}; void OnSwitchIn(Pokemon@){}; + void ModifyOffensiveStatValue(ExecutingMove@, Pokemon@, uint8, float &inout){}; + void ModifyDefensiveStatValue(ExecutingMove@, Pokemon@, uint8, float &inout){}; } diff --git a/Scripts/Moves/ChangeAllTargetStats.as b/Scripts/Moves/ChangeAllTargetStats.as index f71ca62..76d4c30 100644 --- a/Scripts/Moves/ChangeAllTargetStats.as +++ b/Scripts/Moves/ChangeAllTargetStats.as @@ -3,7 +3,7 @@ namespace Gen7 { class ChangeAllTargetStats : PkmnScript{ int8 _amount; - void OnInitialize(const narray@ parameters) override{ + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override{ _amount = int8(parameters[0].AsInt()); } diff --git a/Scripts/Moves/ChangeTargetAtt.as b/Scripts/Moves/ChangeTargetAtt.as index 0767cfd..fc2f810 100644 --- a/Scripts/Moves/ChangeTargetAtt.as +++ b/Scripts/Moves/ChangeTargetAtt.as @@ -3,7 +3,7 @@ namespace Gen7 { class ChangeTargetAttack : PkmnScript{ int8 _amount; - void OnInitialize(const narray@ parameters) override{ + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override{ _amount = int8(parameters[0].AsInt()); } diff --git a/Scripts/Moves/ChangeTargetDef.as b/Scripts/Moves/ChangeTargetDef.as index d57f0fe..37cb6ca 100644 --- a/Scripts/Moves/ChangeTargetDef.as +++ b/Scripts/Moves/ChangeTargetDef.as @@ -3,7 +3,7 @@ namespace Gen7 { shared class ChangeTargetDefense : PkmnScript{ int8 _amount; - void OnInitialize(const narray@ parameters) override{ + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override{ _amount = int8(parameters[0].AsInt()); } diff --git a/Scripts/Moves/ChangeTargetSpDef.as b/Scripts/Moves/ChangeTargetSpDef.as index 2d3e3f0..0de45bb 100644 --- a/Scripts/Moves/ChangeTargetSpDef.as +++ b/Scripts/Moves/ChangeTargetSpDef.as @@ -3,7 +3,7 @@ namespace Gen7 { shared class ChangeTargetSpecialDefense : PkmnScript{ int8 _amount; - void OnInitialize(const narray@ parameters) override{ + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override{ _amount = int8(parameters[0].AsInt()); } diff --git a/Scripts/Moves/ChangeTargetSpeed.as b/Scripts/Moves/ChangeTargetSpeed.as index 08e8d90..2c7de4f 100644 --- a/Scripts/Moves/ChangeTargetSpeed.as +++ b/Scripts/Moves/ChangeTargetSpeed.as @@ -3,7 +3,7 @@ namespace Gen7 { shared class ChangeTargetSpeed : PkmnScript{ int8 _amount; - void OnInitialize(const narray@ parameters) override{ + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override{ _amount = int8(parameters[0].AsInt()); } diff --git a/Scripts/Moves/Drain.as b/Scripts/Moves/Drain.as index ecd5edb..2cc641c 100644 --- a/Scripts/Moves/Drain.as +++ b/Scripts/Moves/Drain.as @@ -3,7 +3,7 @@ namespace Gen7 { shared class DrainMove : PkmnScript{ private float _healModifier = 0; - void OnInitialize(const narray@ parameters) override { + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override { _healModifier = parameters[0].AsFloat(); } diff --git a/Scripts/Moves/HealEachEndOfTurn.as b/Scripts/Moves/HealEachEndOfTurn.as index edfbd93..5175c65 100644 --- a/Scripts/Moves/HealEachEndOfTurn.as +++ b/Scripts/Moves/HealEachEndOfTurn.as @@ -3,7 +3,7 @@ namespace Gen7 { shared class HealEachEndOfTurn : PkmnScript { float _amount; - void OnInitialize(const narray@ parameters) override{ + void OnInitialize(const BattleLibrary@ library, const narray@ parameters) override{ _amount = float(parameters[0].AsFloat()) / 100; }