diff --git a/Data/Actors.rxdata b/Data/Actors.rxdata index 7967a5432..41edc8e26 100644 Binary files a/Data/Actors.rxdata and b/Data/Actors.rxdata differ diff --git a/Data/Animations.rxdata b/Data/Animations.rxdata index 8e67182ba..826e1e8a6 100644 Binary files a/Data/Animations.rxdata and b/Data/Animations.rxdata differ diff --git a/Data/Armors.rxdata b/Data/Armors.rxdata index 2249bec14..901f2bb2b 100644 Binary files a/Data/Armors.rxdata and b/Data/Armors.rxdata differ diff --git a/Data/CommonEvents.rxdata b/Data/CommonEvents.rxdata index b48f96eaf..907609ba6 100644 Binary files a/Data/CommonEvents.rxdata and b/Data/CommonEvents.rxdata differ diff --git a/Data/Enemies.rxdata b/Data/Enemies.rxdata index 004ee903d..be622f513 100644 Binary files a/Data/Enemies.rxdata and b/Data/Enemies.rxdata differ diff --git a/Data/Items.rxdata b/Data/Items.rxdata index 3e62ba6d2..fe767fa0b 100644 Binary files a/Data/Items.rxdata and b/Data/Items.rxdata differ diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index 7fe1dc91c..119d9912c 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/Scripts/011_Battle/001_Battler/001_PokeBattle_Battler.rb b/Data/Scripts/011_Battle/001_Battler/001_PokeBattle_Battler.rb index c0267d2ca..076c1a91a 100644 --- a/Data/Scripts/011_Battle/001_Battler/001_PokeBattle_Battler.rb +++ b/Data/Scripts/011_Battle/001_Battler/001_PokeBattle_Battler.rb @@ -318,6 +318,10 @@ class PokeBattle_Battler return @pokemon.isFusionOf(check_species) end + def isFusion?() + return @pokemon.isFusion?() + end + # Returns the active types of this Pokémon. The array should not include the # same type more than once, and should not include any invalid type numbers # (e.g. -1). diff --git a/Data/Scripts/011_Battle/005_Battle scene/007_Scene_Initialize.rb b/Data/Scripts/011_Battle/005_Battle scene/007_Scene_Initialize.rb index 6570dc6b7..55e7d588d 100644 --- a/Data/Scripts/011_Battle/005_Battle scene/007_Scene_Initialize.rb +++ b/Data/Scripts/011_Battle/005_Battle scene/007_Scene_Initialize.rb @@ -61,8 +61,10 @@ class PokeBattle_Scene # Ability splash bars if PokeBattle_SceneConstants::USE_ABILITY_SPLASH @sprites["abilityBar_#{side}"] = AbilitySplashBar.new(side,@viewport) - @sprites["ability2Bar_#{side}"] = AbilitySplashBar.new(side,@viewport,true) if $game_switches[SWITCH_DOUBLE_ABILITIES] - @sprites["ability2Bar_#{side}"].y = @sprites["ability2Bar_#{side}"].y+30 + if $game_switches[SWITCH_DOUBLE_ABILITIES] + @sprites["ability2Bar_#{side}"] = AbilitySplashBar.new(side,@viewport,true) + @sprites["ability2Bar_#{side}"].y = @sprites["ability2Bar_#{side}"].y+30 + end end end # Player's and partner trainer's back sprite diff --git a/Data/Scripts/050_AddOns/DoubleAbilitiesHandlersOverrides.rb b/Data/Scripts/050_AddOns/DoubleAbilitiesHandlersOverrides.rb new file mode 100644 index 000000000..92113cb4f --- /dev/null +++ b/Data/Scripts/050_AddOns/DoubleAbilitiesHandlersOverrides.rb @@ -0,0 +1,118 @@ + +module BattleHandlers + # + # Speed calculation + # + + def self.triggerSpeedCalcAbility(ability, battler, mult) + ability1 = ability + ability2 = battler.ability2 + calculateAbilitySpeedMultiplier(ability1, battler, mult) + if $game_switches[SWITCH_DOUBLE_ABILITIES] + calculateAbilitySpeedMultiplier(ability2, battler, mult) + end + return mult + end + + def self.calculateAbilitySpeedMultiplier(ability, battler, mult) + ret = SpeedCalcAbility.trigger(ability, battler, mult) + return (ret != nil) ? ret : mult + end + + # + # Weight calculation + # + def self.triggerWeightCalcAbility(ability, battler, w) + ability1 = ability + ability2 = battler.ability2 + + calculateWeightAbilityMultiplier(ability1, battler, mult) + if $game_switches[SWITCH_DOUBLE_ABILITIES] + calculateWeightAbilityMultiplier(ability2, battler, mult) + end + return mult + + end + + def self.calculateWeightAbilityMultiplier(ability, battler, w) + ret = WeightCalcAbility.trigger(ability, battler, w) + return (ret != nil) ? ret : w + end + + + def self.triggerEOREffectAbility(ability,battler,battle) + ability1 = ability + ability2 = battler.ability2 + + EOREffectAbility.trigger(ability1,battler,battle) + EOREffectAbility.trigger(ability2,battler,battle) + end + + def self.triggerEORGainItemAbility(ability,battler,battle) + ability1 = ability + ability2 = battler.ability2 + + EORGainItemAbility.trigger(ability1,battler,battle) + EORGainItemAbility.trigger(ability2,battler,battle) + end + + def self.triggerCertainSwitchingUserAbility(ability,switcher,battle) + ability1 = ability + ability2 = battler.ability2 + + ret = CertainSwitchingUserAbility.trigger(ability1,switcher,battle) || CertainSwitchingUserAbility.trigger(ability2,switcher,battle) + return (ret!=nil) ? ret : false + end + + def self.triggerCertainSwitchingUserAbility(ability,switcher,battle) + ability1 = ability + ability2 = battler.ability2 + + ret = CertainSwitchingUserAbility.trigger(ability1,switcher,battle) || CertainSwitchingUserAbility.trigger(ability2,switcher,battle) + return (ret!=nil) ? ret : false + end + + def self.triggerTrappingTargetAbility(ability,switcher,bearer,battle) + ability1 = ability + ability2 = battler.ability2 + ret = TrappingTargetAbility.trigger(ability1,switcher,bearer,battle) || TrappingTargetAbility.trigger(ability2,switcher,bearer,battle) + return (ret!=nil) ? ret : false + end + + def self.triggerAbilityOnSwitchIn(ability,battler,battle) + ability1 = ability + ability2 = battler.ability2 + AbilityOnSwitchIn.trigger(ability1,battler,battle) + AbilityOnSwitchIn.trigger(ability2,battler,battle) + end + + def self.triggerAbilityOnSwitchOut(ability,battler,endOfBattle) + ability1 = ability + ability2 = battler.ability2 + AbilityOnSwitchOut.trigger(ability1,battler,endOfBattle) + AbilityOnSwitchOut.trigger(ability2,battler,endOfBattle) + end + + def self.triggerAbilityChangeOnBattlerFainting(ability,battler,fainted,battle) + ability1 = ability + ability2 = battler.ability2 + AbilityChangeOnBattlerFainting.trigger(ability1,battler,fainted,battle) + AbilityChangeOnBattlerFainting.trigger(ability2,battler,fainted,battle) + + end + + def self.triggerAbilityOnBattlerFainting(ability,battler,fainted,battle) + ability1 = ability + ability2 = battler.ability2 + AbilityOnBattlerFainting.trigger(ability1,battler,fainted,battle) + AbilityOnBattlerFainting.trigger(ability2,battler,fainted,battle) + end + + + def self.triggerRunFromBattleAbility(ability,battler) + ability1 = ability + ability2 = battler.ability2 + ret = RunFromBattleAbility.trigger(ability1,battler) || RunFromBattleAbility.trigger(ability2,battler) + return (ret!=nil) ? ret : false + end +end \ No newline at end of file diff --git a/Data/Scripts/050_AddOns/ExperimentalOptions.rb b/Data/Scripts/050_AddOns/ExperimentalOptions.rb index a3f74f6c6..87880e3d3 100644 --- a/Data/Scripts/050_AddOns/ExperimentalOptions.rb +++ b/Data/Scripts/050_AddOns/ExperimentalOptions.rb @@ -36,7 +36,16 @@ class ExperimentalOptionsScene < PokemonOption_Scene proc { |value| $game_switches[SWITCH_NO_LEVELS_MODE] = value == 0 }, "All Pokémon use their base stats, regardless of levels." - ) + ), + EnumOption.new(_INTL("Double abilities"), [_INTL("On"), _INTL("Off")], + proc { + $game_switches[SWITCH_DOUBLE_ABILITIES] ? 0 : 1 + }, + proc { |value| + $game_switches[SWITCH_DOUBLE_ABILITIES] = value == 0 + }, "Fused Pokémon have two abilities at the same time" + ) + ] return options end diff --git a/Data/Skills.rxdata b/Data/Skills.rxdata index 61cba7ea2..a45219f5e 100644 Binary files a/Data/Skills.rxdata and b/Data/Skills.rxdata differ diff --git a/Data/States.rxdata b/Data/States.rxdata index 0f9b4ae5d..868d49e59 100644 Binary files a/Data/States.rxdata and b/Data/States.rxdata differ diff --git a/Data/System.rxdata b/Data/System.rxdata index 6a615e3b2..efa83d99e 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ diff --git a/Data/Tilesets.rxdata b/Data/Tilesets.rxdata index 0ce401add..b5372acec 100644 Binary files a/Data/Tilesets.rxdata and b/Data/Tilesets.rxdata differ diff --git a/Data/Weapons.rxdata b/Data/Weapons.rxdata index d9bd35260..c7ea19a7a 100644 Binary files a/Data/Weapons.rxdata and b/Data/Weapons.rxdata differ