Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
Our weekly protagonist poll is now up! Vote for your favorite Conquest protagonist in the poll by clicking here.
Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.
I was looking to maybe get some help with an ability that mimics the effects of torment. it would need to work like damp tho with a global check so that it's always active when there is an active pokemon with this ability. it would affect allies, foes, and self. I'm calling it Full Stop. I'm mostly having trouble figuring out what section of the script to put it. any help would be appreciated
I was looking to maybe get some help with an ability that mimics the effects of torment. it would need to work like damp tho with a global check so that it's always active when there is an active pokemon with this ability. it would affect allies, foes, and self. I'm calling it Full Stop. I'm mostly having trouble figuring out what section of the script to put it. any help would be appreciated
Doesn't sound too tricky. I was able to get this working in a couple minutes. Try this:
In PokeBattle_Battle, find the line if thispkmn.effects[PBEffects::Torment] and paste this above it
Code:
if pbCheckGlobalAbility(:FULLSTOP)
for i in 0...4
if !@battlers[i].fainted?
user=@battlers[i] if @battlers[i].hasWorkingAbility(:FULLSTOP)
abilname=PBAbilities.getName(user.ability)
if thismove.id==@battlers[i].lastMoveUsed
if showMessages
pbDisplayPaused(_INTL("{1}'s {2} prevents the use of the same move twice in a row!",user.pbThis,abilname))
end
return false
end
end
end
end
This does exactly as you described, and mimics the torment effect on all battlers as long as there's a Pokemon on the field with Full Stop. I would also probably add an entry message for this ability (like Mold Breaker has) so that the player is aware that the effect is being put into play as soon as a Pokemon with this ability is sent out.
Doesn't sound too tricky. I was able to get this working in a couple minutes. Try this:
In PokeBattle_Battle, find the line if thispkmn.effects[PBEffects::Torment] and paste this above it
Code:
if pbCheckGlobalAbility(:FULLSTOP)
for i in 0...4
if !@battlers[i].fainted?
user=@battlers[i] if @battlers[i].hasWorkingAbility(:FULLSTOP)
abilname=PBAbilities.getName(user.ability)
if thismove.id==@battlers[i].lastMoveUsed
if showMessages
pbDisplayPaused(_INTL("{1}'s {2} prevents the use of the same move twice in a row!",user.pbThis,abilname))
end
return false
end
end
end
end
This does exactly as you described, and mimics the torment effect on all battlers as long as there's a Pokemon on the field with Full Stop. I would also probably add an entry message for this ability (like Mold Breaker has) so that the player is aware that the effect is being put into play as soon as a Pokemon with this ability is sent out.
I really appreciate it! I'm still learning to script and honestly idk what that "i in 0...4" stuff means... 😅 The rest of it makes sense to me and is along the same lines as what I figured I needed and what I even started to script but I wouldn't have known where to put it or to use the i in 0...4. I'll have to figure out what that actually does lol
I really appreciate it! I'm still learning to script and honestly idk what that "i in 0...4" stuff means... 😅 The rest of it makes sense to me and is along the same lines as what I figured I needed and what I even started to script but I wouldn't have known where to put it or to use the i in 0...4. I'll have to figure out what that actually does lol
It took me a bit to figure out too. I have no training in any of this either, i literally know what i know just from pulling things apart and trial and error.
What the "for i in x" line does, as i understand it, is that its essentially a loop that searches through a range of numbers (in this case 0 through 4), and then performs the code on each of them.
So in this case "for i in 0...4" its basically saying "for each number between 0 and four, do this code". In this case, 0 through 4 is referencing all of the potential Pokemon that may be on the field (which is 4 at once, because of double battles).
So then the code below this line runs for EACH of the potential battlers on the field. So it checks if the Pokemon is not fainted, and if it isn't, it checks if the Pokemon's currently chosen move is the same as the last move it used, and if it is, it returns the ability message and prevents that move from being selected....and then it repeats this process four times, which correlates to each Pokemon on the field.
This is more or less the gist of how this works as far as i know.
Ability: Armor Piercer
Effect: The user's contact moves bypass the target's attempt to negate damage.
Notes: This negates the damage negation of Protect, Detect, Wide Guard, Quick Guard, Mat Block, King's Shield, and Spiky Shield. Crafty Shied is the lone exception since it only blocks status moves and this ability only applies this effect to contact moves. This is a potentially overpowered ability, so it's best to give it to Pokemon who are otherwise underwhelming.
if target.pbOwnSide.effects[PBEffects::QuickGuard] && thismove.canProtectAgainst? &&
p>0 && !target.effects[PBEffects::ProtectNegation]
@battle.pbDisplay(_INTL("{1} was protected by Quick Guard!",target.pbThis))
PBDebug.log("[Move failed] The opposing side's Quick Guard stopped the attack")
return false
end
if target.pbOwnSide.effects[PBEffects::WideGuard] &&
PBTargets.hasMultipleTargets?(thismove) && !thismove.pbIsStatus? &&
!target.effects[PBEffects::ProtectNegation]
@battle.pbDisplay(_INTL("{1} was protected by Wide Guard!",target.pbThis))
PBDebug.log("[Move failed] The opposing side's Wide Guard stopped the attack")
return false
end
if target.pbOwnSide.effects[PBEffects::CraftyShield] && thismove.pbIsStatus? &&
thismove.function!=0xE5 # Perish Song
@battle.pbDisplay(_INTL("Crafty Shield protected {1}!",target.pbThis(true)))
PBDebug.log("[Move failed] The opposing side's Crafty Shield stopped the attack")
return false
end
if target.pbOwnSide.effects[PBEffects::MatBlock] && !thismove.pbIsStatus? &&
thismove.canProtectAgainst? && !target.effects[PBEffects::ProtectNegation]
@battle.pbDisplay(_INTL("{1} was blocked by the kicked-up mat!",thismove.name))
PBDebug.log("[Move failed] The opposing side's Mat Block stopped the attack")
return false
end
# TODO: Mind Reader/Lock-On
# --Sketch/FutureSight/PsychUp work even on Fly/Bounce/Dive/Dig
if thismove.pbMoveFailed(user,target) # TODO: Applies to Snore/Fake Out
@battle.pbDisplay(_INTL("But it failed!"))
PBDebug.log(sprintf("[Move failed] Failed pbMoveFailed (function code %02X)",thismove.function))
return false
end
# King's Shield (purposely after pbMoveFailed)
if target.effects[PBEffects::KingsShield] && !thismove.pbIsStatus? &&
thismove.canProtectAgainst? && !target.effects[PBEffects::ProtectNegation]
@battle.pbDisplay(_INTL("{1} protected itself!",target.pbThis))
@battle.successStates[user.index].protected=true
PBDebug.log("[Move failed] #{target.pbThis}'s King's Shield stopped the attack")
if thismove.isContactMove?
user.pbReduceStat(PBStats::ATTACK,2,nil,false)
end
return false
end
# Spiky Shield
if target.effects[PBEffects::SpikyShield] && thismove.canProtectAgainst? &&
!target.effects[PBEffects::ProtectNegation]
@battle.pbDisplay(_INTL("{1} protected itself!",target.pbThis))
@battle.successStates[user.index].protected=true
PBDebug.log("[Move failed] #{user.pbThis}'s Spiky Shield stopped the attack")
if thismove.isContactMove?
amt=user.pbReduceHP((user.totalhp/8).floor) if !user.isFainted?
@battle.pbDisplay(_INTL("{1} was hurt!",user.pbThis)) if amt>0
end
return false
end
4) And replace it with all of this:
Code:
if target.pbOwnSide.effects[PBEffects::QuickGuard] && thismove.canProtectAgainst? &&
p>0 && !target.effects[PBEffects::ProtectNegation]
#====================================================================
# Custom Ability - Armor Piercer (Quick Guard)
#====================================================================
if user.hasWorkingAbility(:ARMORPIERCER) && thismove.isContactMove?
PBDebug.log("[Ability triggered] #{user.pbThis}'s Armor Piercer")
target.effects[PBEffects::ProtectNegation]=true
@battle.pbDisplay(_INTL("{1}'s {2} breaks {3}'s guard!",user.pbThis,
PBAbilities.getName(user.ability),target.pbThis))
return true
else
#=====================================================================
@battle.pbDisplay(_INTL("{1} was protected by Quick Guard!",target.pbThis))
PBDebug.log("[Move failed] The opposing side's Quick Guard stopped the attack")
return false
end#
end
if target.pbOwnSide.effects[PBEffects::WideGuard] &&
PBTargets.hasMultipleTargets?(thismove) && !thismove.pbIsStatus? &&
!target.effects[PBEffects::ProtectNegation]
#====================================================================
# Custom Ability - Armor Piercer (Wide Guard)
#====================================================================
if user.hasWorkingAbility(:ARMORPIERCER) && thismove.isContactMove?
PBDebug.log("[Ability triggered] #{user.pbThis}'s Armor Piercer")
target.effects[PBEffects::ProtectNegation]=true
@battle.pbDisplay(_INTL("{1}'s {2} breaks {3}'s guard!",user.pbThis,
PBAbilities.getName(user.ability),target.pbThis))
return true
else
#=====================================================================
@battle.pbDisplay(_INTL("{1} was protected by Wide Guard!",target.pbThis))
PBDebug.log("[Move failed] The opposing side's Wide Guard stopped the attack")
return false
end#
end
if target.pbOwnSide.effects[PBEffects::CraftyShield] && thismove.pbIsStatus? &&
thismove.function!=0xE5 # Perish Song
@battle.pbDisplay(_INTL("Crafty Shield protected {1}!",target.pbThis(true)))
PBDebug.log("[Move failed] The opposing side's Crafty Shield stopped the attack")
return false
end
if target.pbOwnSide.effects[PBEffects::MatBlock] && !thismove.pbIsStatus? &&
thismove.canProtectAgainst? && !target.effects[PBEffects::ProtectNegation]
#====================================================================
# Custom Ability - Armor Piercer (Mat Block)
#====================================================================
if user.hasWorkingAbility(:ARMORPIERCER) && thismove.isContactMove?
PBDebug.log("[Ability triggered] #{user.pbThis}'s Armor Piercer")
target.effects[PBEffects::ProtectNegation]=true
@battle.pbDisplay(_INTL("{1}'s {2} breaks {3}'s guard!",user.pbThis,
PBAbilities.getName(user.ability),target.pbThis))
return true
else
#=====================================================================
@battle.pbDisplay(_INTL("{1} was blocked by the kicked-up mat!",thismove.name))
PBDebug.log("[Move failed] The opposing side's Mat Block stopped the attack")
return false
end#
end
# TODO: Mind Reader/Lock-On
# --Sketch/FutureSight/PsychUp work even on Fly/Bounce/Dive/Dig
if thismove.pbMoveFailed(user,target) # TODO: Applies to Snore/Fake Out
@battle.pbDisplay(_INTL("But it failed!"))
PBDebug.log(sprintf("[Move failed] Failed pbMoveFailed (function code %02X)",thismove.function))
return false
end
# King's Shield (purposely after pbMoveFailed)
if target.effects[PBEffects::KingsShield] && !thismove.pbIsStatus? &&
thismove.canProtectAgainst? && !target.effects[PBEffects::ProtectNegation]
#====================================================================
# Custom Ability - Armor Piercer (King's Shield)
#====================================================================
if user.hasWorkingAbility(:ARMORPIERCER) && thismove.isContactMove?
PBDebug.log("[Ability triggered] #{user.pbThis}'s Armor Piercer")
target.effects[PBEffects::ProtectNegation]=true
@battle.pbDisplay(_INTL("{1}'s {2} breaks {3}'s guard!",user.pbThis,
PBAbilities.getName(user.ability),target.pbThis))
return true
else
#=====================================================================
@battle.pbDisplay(_INTL("{1} protected itself!",target.pbThis))
@battle.successStates[user.index].protected=true
PBDebug.log("[Move failed] #{target.pbThis}'s King's Shield stopped the attack")
if thismove.isContactMove?
user.pbReduceStat(PBStats::ATTACK,2,nil,false)
end
return false
end#
end
# Spiky Shield
if target.effects[PBEffects::SpikyShield] && thismove.canProtectAgainst? &&
!target.effects[PBEffects::ProtectNegation]
#====================================================================
# Custom Ability - Armor Piercer (Spiky Shield)
#====================================================================
if user.hasWorkingAbility(:ARMORPIERCER) && thismove.isContactMove?
PBDebug.log("[Ability triggered] #{user.pbThis}'s Armor Piercer")
target.effects[PBEffects::ProtectNegation]=true
@battle.pbDisplay(_INTL("{1}'s {2} breaks {3}'s guard!",user.pbThis,
PBAbilities.getName(user.ability),target.pbThis))
return true
else
#=====================================================================
@battle.pbDisplay(_INTL("{1} protected itself!",target.pbThis))
@battle.successStates[user.index].protected=true
PBDebug.log("[Move failed] #{user.pbThis}'s Spiky Shield stopped the attack")
if thismove.isContactMove?
amt=user.pbReduceHP((user.totalhp/8).floor) if !user.isFainted?
@battle.pbDisplay(_INTL("{1} was hurt!",user.pbThis)) if amt>0
end
return false
end#
end
I was coming up with some more custom Abilities for some fakemon ideas I had, and I figured I'd share some of them. I've included some custom moves as well, because the full potential of these Abilities are only apparent when combined with these custom move effects.
Here's a new ability and a move that are meant to play off each other. The theme is based around a Fire/Fairy fakemon I made up a while back that draws inspiration from satyrs. Here's a pic of the designs to give you an idea of what this is intended to look like.
Spoiler:
Ability: Dancing Panic
Effect: Effects of opponent's dance moves are reversed.
Details: This ability is designed for a crafty satyr-like Pokemon, or a Pokemon designed around dancing.
These are all the dance moves with their effects inverted by this ability:
Swords Dance: Lowers the user's Attack by 2 stages.
Dragon Dance: Lowers the user's Attack and Speed by 1 stage each.
Quiver Dance: Lowers the user's Sp. Atk, Sp. Def, and Speed by 1 stage each.
Feather Dance: Increases the target's Attack stat by 2 stages.
Fiery Dance: May lower the user's Sp. Atk stat by 1 stage.
Teeter Dance: Snaps all Pokemon besides the user out of confusion.
Petal Dance: The user is not locked into repeating this move. This move does not cause confusion.
Lunar Dance: The user is fully restored, and isn't switched out.
2) In PokeBattle_Battler, find the line "# Pressure message", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Dancing Panic (Message)
#===========================================================================
if self.hasWorkingAbility(:DANCINGPANIC) && onactive
@battle.pbDisplay(_INTL("{1} reverses the effects of its opponent's dance moves!",pbThis))
end
#===========================================================================
3) In PokeBattle_Battler, paste this somewhere underneath the def for "hasMoldbreaker":
Code:
#=============================================================================
# Custom Ability - Dancing Panic (Ability Check)
#=============================================================================
def reverseDanceMoves
return true if pbOpposing1.hasWorkingAbility(:DANCINGPANIC)
return true if pbOpposing2.hasWorkingAbility(:DANCINGPANIC)
return false
end
#=============================================================================
4) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_013", and replace it with this:
Code:
################################################################################
# Confuses the target.
################################################################################
class PokeBattle_Move_013 < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
# Custom Ability - Dancing Panic (Reverse Teeter Dance)
if isDanceMove? && attacker.reverseDanceMoves
if opponent.effects[PBEffects::Confusion]>0
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbCureConfusion(true)
return 0
else
@battle.pbDisplay(_INTL("{1} is already free from confusion!",opponent.pbThis))
return -1
end
else
if opponent.pbCanConfuse?(attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbConfuse
@battle.pbDisplay(_INTL("{1} became confused!",opponent.pbThis))
return 0
end
return -1
end
end
def pbAdditionalEffect(attacker,opponent)
return if opponent.damagestate.substitute
# Custom Ability - Dancing Panic (Reverse Teeter Dance)
if isDanceMove? && attacker.reverseDanceMoves
if opponent.effects[PBEffects::Confusion]>0
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbCureConfusion(true)
else
@battle.pbDisplay(_INTL("{1} is already free from confusion!",opponent.pbThis))
end
else
if opponent.pbCanConfuse?(attacker,false,self)
opponent.pbConfuse
@battle.pbDisplay(_INTL("{1} became confused!",opponent.pbThis))
end
end
end
end
5) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_020", and replace it with this:
Code:
################################################################################
# Increases the user's Special Attack by 1 stage.
################################################################################
class PokeBattle_Move_020 < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Fiery Dance)
if isDanceMove? && attacker.reverseDanceMoves
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbReduceStat(PBStats::SPATK,1,attacker,false,self)
return ret ? 0 : -1
else
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbIncreaseStat(PBStats::SPATK,1,attacker,false,self)
return ret ? 0 : -1
end
end
def pbAdditionalEffect(attacker,opponent)
# Custom Ability - Dancing Panic (Reverse Fiery Dance)
if isDanceMove? && attacker.reverseDanceMoves
if attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbReduceStat(PBStats::SPATK,1,attacker,false,self)
end
else
if attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPATK,1,attacker,false,self)
end
end
end
end
6) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_026", and replace it with this:
Code:
################################################################################
# Increases the user's Attack and Speed by 1 stage each. (Dragon Dance)
################################################################################
class PokeBattle_Move_026 < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Dragon Dance)
if isDanceMove? && attacker.reverseDanceMoves
if !attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self) &&
!attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any lower!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbReduceStat(PBStats::ATTACK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbReduceStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
else
if !attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self) &&
!attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any higher!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::ATTACK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
end
return 0
end
end
7) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_02B", and replace it with this:
Code:
################################################################################
# Increases the user's Sp. Attack, Sp. Defense and Speed by 1 stage each. (Quiver Dance)
################################################################################
class PokeBattle_Move_02B < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Quiver Dance)
if isDanceMove? && attacker.reverseDanceMoves
if !attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,false,self) &&
!attacker.pbCanReduceStatStage?(PBStats::SPDEF,attacker,false,self) &&
!attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any higher!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbReduceStat(PBStats::SPATK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanReduceStatStage?(PBStats::SPDEF,attacker,false,self)
attacker.pbReduceStat(PBStats::SPDEF,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbReduceStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
else
if !attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,false,self) &&
!attacker.pbCanIncreaseStatStage?(PBStats::SPDEF,attacker,false,self) &&
!attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any higher!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPATK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanIncreaseStatStage?(PBStats::SPDEF,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPDEF,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
end
return 0
end
end
8) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_02E", and replace it with this:
Code:
################################################################################
# Increases the user's Attack by 2 stages.
################################################################################
class PokeBattle_Move_02E < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
# Custom Ability - Dancing Panic (Reverse Swords Dance)
if isDanceMove? && attacker.reverseDanceMoves
return -1 if !attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
else
return -1 if !attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
end
end
def pbAdditionalEffect(attacker,opponent)
# Custom Ability - Dancing Panic (Reverse Swords Dance)
if isDanceMove? && attacker.reverseDanceMoves
if attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
end
else
if attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
end
end
end
end
9) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_04B", and replace it with this:
Code:
################################################################################
# Decreases the target's Attack by 2 stages.
################################################################################
class PokeBattle_Move_04B < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Featherdance)
if isDanceMove? && attacker.reverseDanceMoves
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !opponent.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=opponent.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
else
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !opponent.pbCanReduceStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=opponent.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
end
end
def pbAdditionalEffect(attacker,opponent)
return if opponent.damagestate.substitute
# Custom Ability - Dancing Panic (Reverse Featherdance)
if isDanceMove? && attacker.reverseDanceMoves
if opponent.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self)
opponent.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
end
else
if opponent.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self)
opponent.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
end
end
end
end
10) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_0D2", and add this right below the line that starts with "ret=super":
Code:
# Custom Ability - Dancing Panic (Reverse Petal Dance)
return ret if isDanceMove? && attacker.reverseDanceMoves
11) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_0E4", and replace it with this:
Code:
################################################################################
# User faints. The Pokémon that replaces the user is fully healed (HP, PP and
# status). Fails if user won't be replaced. (Lunar Dance)
################################################################################
class PokeBattle_Move_0E4 < PokeBattle_Move
def isHealingMove?
return true
end
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
if [email protected]?(attacker.index)
@battle.pbDisplay(_INTL("But it failed!"))
return -1
end
pbShowAnimation(@id,attacker,nil,hitnum,alltargets,showanimation)
# Custom Ability - Dancing Panic (Reverse Lunar Dance)
if isDanceMove? && attacker.reverseDanceMoves
@battle.pbDisplay(_INTL("{1} became cloaked in mystical moonlight!",attacker.pbThis))
attacker.pbRecoverHP(attacker.totalhp)
attacker.pbCureStatus(false)
for i in 0...4
attacker.moves[i].pp=attacker.moves[i].totalpp
end
attacker.effects[PBEffects::LunarDance]=false
else
attacker.pbReduceHP(attacker.hp)
attacker.effects[PBEffects::LunarDance]=true
end
return 0
end
end
12) Add this to your Abilities PBS file. Renumber the X's as necessary:
Code:
XXX,DANCINGPANIC,Dancing Panic,"Effects of opponent's dance moves are reversed."
Move: Magical Horn
Type: Fairy
Category: Status, Sound-Based
Statistics: --BP/--ACC/10 PP
Affected By: Protect, Magic Coat, Snatch, Mirror Move
Effect: The user plays a melody using its horn flute that gives the Dancer ability to all Pokémon.
Details: This move requires the Dancer ability to be installed. This move is meant to be used in conjunction with the Dancing Panic ability. The concept here is that you use this move to give all Pokemon on the field Dancer. Then all Pokemon will copy the user's dance moves whenever it uses one. However, if the user has the Dancing Panic ability, the effects of the opponent's forced dance moves will be reversed. This means you could use a move like Swords Dance to boost your own attack, and the opponents will helplessly imitate your Pokemon - except their Swords Dance will reduce their Attack by 2 stages, since Dancing Panic reverses its effects. There's a ton of combo potential that could be utilized with these effects.
Gives all Pokemon besides the user the Dancer ability.
Fails against targets that already have Dancer, are immune to Sound-based moves, or have an un-losable ability (Multitype, Stance Change, etc).
Suggested Users: ???
Installation:
Spoiler:
1) In PokeBattle_MoveEffects, paste this at the bottom. Remember to renumber the Move ID if necessary:
Code:
################################################################################
# Gives the Dancer ability to the target. (Magical Horn)
################################################################################
class PokeBattle_Move_15A < PokeBattle_Move # Renumber Move ID if necessary
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
blacklist = [:MULTITYPE,:ZENMODE,:STANCECHANGE,:SCHOOLING,:COMATOSE,
:SHIELDSDOWN,:DISGUISE,:RKSSYSTEM,:BATTLEBOND,:POWERCONSTRUCT,
:ICEFACE,:GULPMISSILE]
for i in blacklist
abilname=PBAbilities.getName(opponent.ability)
if isConst?(opponent.ability,PBAbilities,i)
@battle.pbDisplay(_INTL("It doesn't affect {1}...",opponent.pbThis(true)))
return -1
elsif isConst?(opponent.ability,PBAbilities,:DANCER)
@battle.pbDisplay(_INTL("{1} already has the {2} ability!",opponent.pbThis,abilname))
return -1
else
opponent.ability=getConst(PBAbilities,:DANCER)
abilname=PBAbilities.getName(opponent.ability)
@battle.pbDisplay(_INTL("{1} gained the {2} ability!",opponent.pbThis,abilname))
return 0
end
end
end
end
2) Add this to your Moves PBS file. Renumber the X's as necessary:
Code:
XXX,MAGICALHORN,Magical Horn,15A,0,FAIRY,Status,0,10,0,08,0,bcdek,"The user plays a melody using its horn flute that gives the Dancer ability to all Pokémon."
These moves and abilities are designed around bear Pokemon. Grizzly Guard is more or less an independent ability, but the rest are all built around a single theme involving the item Honey.
Spoiler:
Ability: Grizzly Guard
Effect: Guards its partner from harm & raises Attack.
Details: This ability is designed for a protective mother bear Pokemon that defends her cubs (and allies) in battle.
When the user is sent out in a double battle, this ability triggers, alerting you that the user will protect its ally with this ability.
Whenever the user's partner is targeted by an opponent's direct attack (single-target, non-status move), that attack will be redirected to the user instead. This will even override the effects of Follow Me. This ability will not trigger if:
The opponent uses a spread move.
The opponent uses a status move.
The opponent has the Mold Breaker or Stalwart abilities.
The user or its partner are out of range (Fly, Dig, Dive, etc).
The user or its partner used Protect, or any Protect-like move (King's Shield, Wide Guard, Mat Block, etc).
The user or its partner are behind a Substitute.
The user has less than 25% of its total HP remaining.
The user's level is 10 or more levels lower than its partner's.
If the user successfully defends its partner by redirecting an attack to itself with this ability, the user's Attack will increase by 1 stage after being hit. The user must receive damage from the redirected attack for this Attack boost to trigger. If the user redirects a multi-hit move to itself, it will receive an Attack boost for each hit.
1) In PokeBattle_Battler, look for "# Pressure message", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Grizzly Guard (Message)
#===========================================================================
if self.hasWorkingAbility(:GRIZZLYGUARD) && pbPartner && !pbPartner.fainted? && onactive
@battle.pbDisplay(_INTL("{1} protects its allies with {2}!",pbThis,PBAbilities.getName(self.ability)))
end
#===========================================================================
2) In the same section, find the line starting with "if target.hasWorkingAbility(:CURSEDBODY,true)", and paste this above it:
Code:
#=======================================================================
# Custom Ability - Grizzly Guard (Attack Boost)
#=======================================================================
if target.hasWorkingAbility(:GRIZZLYGUARD) && target!=user.pbPartner &&
!move.pbIsStatus? && PBTargets.targetsOneOpponent?(move) &&
!user.hasMoldBreaker &&
!user.hasWorkingAbility(:STALWART) &&
!target.effects[PBEffects::Protect] &&
!target.effects[PBEffects::KingsShield] &&
!target.effects[PBEffects::SpikyShield] &&
!target.pbOwnSide.effects[PBEffects::MatBlock] &&
!target.pbOwnSide.effects[PBEffects::WideGuard] &&
!target.pbOwnSide.effects[PBEffects::QuickGuard] &&
target.status!=PBStatuses::SLEEP &&
target.status!=PBStatuses::FROZEN &&
target.effects[PBEffects::Substitute]<=0 &&
target.hp>target.totalhp/4.floor &&
target.level>target.pbPartner.level-10
blacklist=[
0xC9, # Fly
0xCA, # Dig
0xCB, # Dive
0xCC, # Bounce
0xCD, # Shadow Force
0xCE, # Sky Drop
0x14D # Phantom Force
]
if target.pbPartner && !target.pbPartner.fainted?
if !(@battle.switching ||
target.pbPartner.effects[PBEffects::Substitute]>0 ||
target.pbPartner.effects[PBEffects::Protect] ||
target.pbPartner.effects[PBEffects::KingsShield] ||
target.pbPartner.effects[PBEffects::SpikyShield] ||
blacklist.include?(PBMoveData.new(target.effects[PBEffects::TwoTurnAttack]).function) ||
blacklist.include?(PBMoveData.new(target.pbPartner.effects[PBEffects::TwoTurnAttack]).function))
if target.pbIncreaseStat(PBStats::ATTACK,1,nil,false)
PBDebug.log("[Ability triggered] #{target.pbThis}'s Grizzly Guard (raise Attack)")
end
end
end
end
3) In the same section, find the line "if changeeffect==1", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Grizzly Guard (Targeting)
#===========================================================================
if target.pbPartner.hasWorkingAbility(:GRIZZLYGUARD) && target!=user.pbPartner &&
!thismove.pbIsStatus? && PBTargets.targetsOneOpponent?(thismove) &&
!user.hasMoldBreaker &&
!user.hasWorkingAbility(:STALWART) &&
!target.effects[PBEffects::Protect] &&
!target.effects[PBEffects::KingsShield] &&
!target.effects[PBEffects::SpikyShield] &&
!target.pbOwnSide.effects[PBEffects::MatBlock] &&
!target.pbOwnSide.effects[PBEffects::WideGuard] &&
!target.pbOwnSide.effects[PBEffects::QuickGuard] &&
target.effects[PBEffects::Substitute]<=0
blacklist=[
0xC9, # Fly
0xCA, # Dig
0xCB, # Dive
0xCC, # Bounce
0xCD, # Shadow Force
0xCE, # Sky Drop
0x14D # Phantom Force
]
newtarget=target.pbPartner
if newtarget && !newtarget.fainted? &&
newtarget.level>target.level-10 &&
newtarget.hp>newtarget.totalhp/4.floor
if !(@battle.switching ||
newtarget.status==PBStatuses::SLEEP ||
newtarget.status==PBStatuses::FROZEN ||
newtarget.effects[PBEffects::Substitute]>0 ||
newtarget.effects[PBEffects::Protect] ||
newtarget.effects[PBEffects::KingsShield] ||
newtarget.effects[PBEffects::SpikyShield] ||
blacklist.include?(PBMoveData.new(target.effects[PBEffects::TwoTurnAttack]).function) ||
blacklist.include?(PBMoveData.new(newtarget.effects[PBEffects::TwoTurnAttack]).function))
target=newtarget
changeeffect=0
if !blacklist.include?(PBMoveData.new(user.effects[PBEffects::TwoTurnAttack]).function)
PBDebug.log("[Ability triggered] #{newtarget.pbThis}'s Grizzly Guard (change target)")
@battle.pbDisplay(_INTL("{1} took the attack for its partner with {2}!",
newtarget.pbThis,PBAbilities.getName(newtarget.ability)))
end
end
end
end
4) Add this to your Abilities PBS file. Renumber the X's as necessary:
Code:
XXX,GRIZZLYGUARD,Grizzly Guard,"Guards its partner from harm & raises Attack."
Ability: Honey Frenzy
Effect: 2x damage on foes holding Honey, or heals if its held.
Details: This Ability is designed for a honey-obsessed Pokemon, and has multiple effects.
Upon being sent out when another Pokemon on the field is holding the item "Honey", the user's ability will trigger, alerting you of the presence of Honey on that Pokemon. If multiple Pokemon on the field are holding Honey, it will alert you of each one. This message won't trigger if the user itself is holding Honey.
If a Pokemon other than the user is holding Honey, it becomes enraged and all damage the user deals to that target is doubled. However, the user becomes unruly and is unable to target other Pokemon besides the Pokemon holding Honey while this effect is in play. All of the user's direct attacks (single-target, non-status moves) will be redirected to the Honey holder. This includes the user's partner. This will even override the effects of Follow Me. If multiple Pokemon on the field are holding Honey, the user's attacks will be redirected to Honey holders based on their speed priority. If the Honey item held is transferred from one Pokemon to another before the user attacks this round, the user will redirect its attacks to the new Honey holder. If the Honey holder is out of range this turn due to the effects of a move (Fly, Dig, Bounce, etc), the user will not be forced to redirect its attacks to that target until they return the following turn.
If the user is holding Honey, the above effects are ignored. Instead, the user becomes docile while it enjoys its Honey, healing 1/8th its max HP at the end of each turn. It's Speed is also halved while its holding Honey.
1) In PokeBattle_Battler, find the line "if isConst?(self.item,PBItems,:IRONBALL)", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Speed reduction)
#===========================================================================
if self.hasWorkingAbility(:HONEYFRENZY) && isConst?(self.item,PBItems,:HONEY)
speedmult=(speedmult/2).round
end
#===========================================================================
2) In the same section, find the line "# Pressure message", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Message)
#===========================================================================
if self.hasWorkingAbility(:HONEYFRENZY) && !self.hasWorkingItem(:HONEY) && onactive
honey=[]
honey.push(pbOpposing1) if pbOpposing1.hasWorkingItem(:HONEY) && !pbOpposing1.fainted?
honey.push(pbOpposing2) if pbOpposing2.hasWorkingItem(:HONEY) && !pbOpposing2.fainted?
honey.push(pbPartner) if pbPartner.hasWorkingItem(:HONEY) && !pbPartner.fainted?
for i in honey
itemname=PBItems.getName(getConst(PBItems,:HONEY))
@battle.pbDisplay(_INTL("{1} detects the presence of {2} on {3}!",pbThis,itemname,i.pbThis(true)))
end
end
#===========================================================================
3) In the same section, find the line starting with "if hpcure && self.hasWorkingItem(:LEFTOVERS)", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Healing)
#===========================================================================
if self.hasWorkingAbility(:HONEYFRENZY)
if hpcure && self.hasWorkingItem(:HONEY) && self.hp!=self.totalhp &&
@effects[PBEffects::HealBlock]==0
PBDebug.log("[Ability triggered] #{pbThis}'s Honey Frenzy")
pbRecoverHP((self.totalhp/8).floor,true)
@battle.pbDisplay(_INTL("{1}'s {2} restored some HP with its held {3}!",pbThis,PBAbilities.getName(self.ability),itemname))
end
end
#===========================================================================
4) In the same section, find the line "if changeeffect==1", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Targeting)
#===========================================================================
if user.hasWorkingAbility(:HONEYFRENZY) && !user.hasWorkingItem(:HONEY) &&
!thismove.pbIsStatus? && PBTargets.targetsOneOpponent?(thismove)
newtarget=nil
blacklist=[
0xC9, # Fly
0xCA, # Dig
0xCB, # Dive
0xCC, # Bounce
0xCD, # Shadow Force
0xCE, # Sky Drop
0x14D # Phantom Force
]
for i in priority
if i.hasWorkingItem(:HONEY) && !i.fainted? && [email protected] &&
!blacklist.include?(PBMoveData.new(i.effects[PBEffects::TwoTurnAttack]).function)
newtarget=i
changeeffect=0
end
end
if newtarget && target!=newtarget &&
!blacklist.include?(PBMoveData.new(user.effects[PBEffects::TwoTurnAttack]).function)
PBDebug.log("[Ability triggered] #{newtarget.pbThis}'s Honey Frenzy (change target)")
@battle.pbDisplay(_INTL("{1} targeted {2} instead because of its held {3}!",
user.pbThis,newtarget.pbThis(true),PBItems.getName(newtarget.item)))
end
target=newtarget if newtarget
end
#===========================================================================
5) Finally, in PokeBattle_Move, find the line "if attacker.hasWorkingAbility(:RIVALRY)", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Damage)
#===========================================================================
if attacker.hasWorkingAbility(:HONEYFRENZY)
if !attacker.hasWorkingItem(:HONEY) && opponent.hasWorkingItem(:HONEY)
damagemult=(damagemult*2).round
end
end
#===========================================================================
6) Add this to your Abilities PBS file. Renumber the X's as necessary:
Code:
XXX,HONEYFRENZY,Honey Frenzy,"2x damage on foes holding Honey, or heals if its held."
Move: Honey Claw
Type: Normal
Category: Physical, Contact
Statistics: 95BP/100ACC/15 PP
Affected By: Protect, Mirror Move, King's Rock
Effect: The user swipes with honey-soaked paws. May replace the foe's item with the user's held Honey.
Details: This move is meant to work in conjunction with the Honey Frenzy ability. The concept here is that you enter the battle with the user holding Honey, which heals it each turn due to the Honey Frenzy ability, but halves its Speed. This is the more defensive, Trick Room-oriented mode of this Ability
However, when its time to go on the offensive, you use Honey Claw to transfer the user's Honey to the target. Now that a Pokemon on the field other than the user is holding Honey, the second effect of the user's Honey Frenzy ability kicks in, doubling damage dealt to the foe holding Honey. And since the user with Honey Frenzy is no longer holding Honey, its Speed is no longer halved. So in effect, using this move not only damages the foe and removes its initial item, but inadvertently makes your Pokemon both stronger and faster. With this move, you can switch between the defensive and offensive functions of the Honey Frenzy ability, allowing the user to be very flexible in battle.
When the user is holding Honey and strikes an opponent with this move, they become drenched in the user's honey. This knocks off their current item (if any), and instead gives them the user's Honey.
This effect fails if the target is already holding Honey, is behind a substitute, is holding an item that cannot be removed, or if the target has the Sticky Hold ability (and the user does not have Mold Breaker).
If the user has the Unburden ability, its effects will trigger in response to giving your held Honey to the opponent.
If a Pokemon on the field has the Honey Frenzy ability, that ability will automatically trigger when the presence of Honey is detected on the target.
If the target is a wild Pokemon, Honey that is given to that target by this move's effect is permanently lost, and will not be returned to the user after battle (unless it's retrieved again through something like Trick). However, if this move is used by a wild Pokemon against you, your Pokemon will not retain the Honey after battle, and their original item (if any) will be restored.
If the user is not holding any Honey when using this move, this move functions as a normal attack without any additional effects.
Suggested Users: Teddiursa, Ursaring
Installation:
Spoiler:
1) In PokeBattle_MoveEffects, paste this at the bottom. Remember to renumber the Move ID if necessary:
Code:
################################################################################
# Gives the target the user's Honey, replacing their held item. (Honey Claw)
################################################################################
class PokeBattle_Move_15B < PokeBattle_Move # Renumber Move ID if necessary
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
ret=super(attacker,opponent,hitnum,alltargets,showanimation)
if isConst?(attacker.item,PBItems,:HONEY) && opponent.damagestate.calcdamage>0 && !opponent.fainted?
if !(opponent.effects[PBEffects::Substitute]>0 && !ignoresSubstitute?(attacker))
useritem=PBItems.getName(attacker.item)
itemname=PBItems.getName(opponent.item)
@battle.pbDisplay(_INTL("{1} was drenched with {2}'s {3}!",opponent.pbThis,attacker.pbThis(true),useritem))
if isConst?(opponent.item,PBItems,:HONEY)
@battle.pbDisplay(_INTL("But {1} is already carrying {2}!",opponent.pbThis(true),itemname))
elsif @battle.pbIsUnlosableItem(opponent,opponent.item)
@battle.pbDisplay(_INTL("But {1} managed to hold on to its item!",opponent.pbThis(true)))
elsif opponent.item>0 && opponent.hasWorkingAbility(:STICKYHOLD) && !attacker.hasMoldBreaker
abilname=PBAbilities.getName(opponent.ability)
@battle.pbDisplay(_INTL("{1} held on to its item due to {2}!",opponent.pbThis,abilname))
else
if opponent.item>0
@battle.pbDisplay(_INTL("{1} lost its {2} and was given {3}'s {4}!",
opponent.pbThis,itemname,attacker.pbThis(true),useritem))
else
@battle.pbDisplay(_INTL("{1} was given {2}'s {3}!",
opponent.pbThis,attacker.pbThis(true),useritem))
end
opponent.item=attacker.item
attacker.item=0
opponent.effects[PBEffects::ChoiceBand]=-1
attacker.effects[PBEffects::Unburden]=true
if [email protected] && # In a wild battle
attacker.pokemon.itemInitial==opponent.item
attacker.pokemon.itemInitial=0
end
battlers = []
battlers.push(attacker) if attacker && !attacker.fainted?
battlers.push(attacker.pbPartner) if attacker.pbPartner && !attacker.pbPartner.fainted?
battlers.push(opponent.pbPartner) if opponent.pbPartner && !opponent.pbPartner.fainted?
for i in battlers
if i.hasWorkingAbility(:HONEYFRENZY)
i.pbAbilitiesOnSwitchIn(true)
end
end
end
end
end
return ret
end
end
2) Add this to your Moves PBS file. Renumber the X's as necessary:
Code:
XXX,HONEYCLAW,Honey Claw,15B,95,NORMAL,Physical,100,15,0,00,0,abef,"The user swipes with honey-soaked paws. May replace the foe's item with the user's held Honey."
Move: Honey Snack
Type: Normal
Category: Status, Healing Move
Statistics: --BP/--ACC/10 PP
Affected By: Snatch
Effect: Restores the user's HP. If Honey is held, consumes it to heal more HP and raise Attack.
Details: Restores 50% of the user's max HP. If the user is holding Honey, the item is consumed and this move will instead heal 75% of the user's max HP, as well as raising the user's Attack stat by 1 stage. If the user is already at full HP, Honey will still be consumed to raise Attack (even if Attack cannot be raised further). This move fails if the user is at full HP and not holding Honey.
This move is meant to work in conjunction with the Honey Frenzy ability. This is a more defensive method of utilizing the user's Honey in situations where you might not want to use Honey Claw. By consuming the held Honey, you boost the user's Attack while also increasing its Speed (since it is no longer halved by Honey Frenzy), in addition to healing HP.
1) In PokeBattle_MoveEffects, paste this at the bottom. Remember to renumber the Move ID if necessary:
Code:
################################################################################
# Heals the user. Consumes Honey for extra healing & Attack boost. (Honey Snack)
################################################################################
class PokeBattle_Move_15C < PokeBattle_Move # Renumber Move ID if necessary
def isHealingMove?
return true
end
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
olditem = attacker.item
itemname = PBItems.getName(olditem)
if attacker.hp==attacker.totalhp
if isConst?(attacker.item,PBItems,:HONEY)
attacker.pbConsumeItem
@battle.pbDisplay(_INTL("{1} consumed its {2}!",attacker.pbThis,itemname))
return -1 if !attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbIncreaseStat(PBStats::ATTACK,1,attacker,false,self)
if attacker.hasWorkingAbility(:HONEYFRENZY)
attacker.pbAbilitiesOnSwitchIn(true)
end
return ret ? 0 : -1
else
@battle.pbDisplay(_INTL("{1}'s HP is full!",attacker.pbThis))
return -1
end
elsif isConst?(attacker.item,PBItems,:HONEY)
attacker.pbConsumeItem
pbShowAnimation(@id,attacker,nil,hitnum,alltargets,showanimation)
attacker.pbRecoverHP(((attacker.totalhp+1)/1.5).floor,true)
@battle.pbDisplay(_INTL("{1} consumed its {2} and restored HP!",attacker.pbThis,itemname))
if attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
attacker.pbIncreaseStat(PBStats::ATTACK,1,attacker,false,self)
end
if attacker.hasWorkingAbility(:HONEYFRENZY)
attacker.pbAbilitiesOnSwitchIn(true)
end
return 0
else
attacker.pbRecoverHP(((attacker.totalhp+1)/2).floor,true)
@battle.pbDisplay(_INTL("{1}'s HP was restored.",attacker.pbThis))
return 0
end
end
end
2) Add this to your Moves PBS file. Renumber the X's as necessary:
Code:
XXX,HONEYSNACK,Honey Snack,15C,0,NORMAL,Status,0,10,0,10,0,d,"Restores the user's HP. If Honey is held, consumes it to heal more HP and raise Attack."
I was coming up with some more custom Abilities for some fakemon ideas I had, and I figured I'd share some of them. I've included some custom moves as well, because the full potential of these Abilities are only apparent when combined with these custom move effects.
Here's a new ability and a move that are meant to play off each other. The theme is based around a Fire/Fairy fakemon I made up a while back that draws inspiration from satyrs. Here's a pic of the designs to give you an idea of what this is intended to look like.
Spoiler:
Ability: Dancing Panic
Effect: Effects of opponent's dance moves are reversed.
Details: This ability is designed for a crafty satyr-like Pokemon, or a Pokemon designed around dancing.
These are all the dance moves with their effects inverted by this ability:
Swords Dance: Lowers the user's Attack by 2 stages.
Dragon Dance: Lowers the user's Attack and Speed by 1 stage each.
Quiver Dance: Lowers the user's Sp. Atk, Sp. Def, and Speed by 1 stage each.
Feather Dance: Increases the target's Attack stat by 2 stages.
Fiery Dance: May lower the user's Sp. Atk stat by 1 stage.
Teeter Dance: Snaps all Pokemon besides the user out of confusion.
Petal Dance: The user is not locked into repeating this move. This move does not cause confusion.
Lunar Dance: The user is fully restored, and isn't switched out.
2) In PokeBattle_Battler, find the line "# Pressure message", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Dancing Panic (Message)
#===========================================================================
if self.hasWorkingAbility(:DANCINGPANIC) && onactive
@battle.pbDisplay(_INTL("{1} reverses the effects of its opponent's dance moves!",pbThis))
end
#===========================================================================
3) In PokeBattle_Battler, paste this somewhere underneath the def for "hasMoldbreaker":
Code:
#=============================================================================
# Custom Ability - Dancing Panic (Ability Check)
#=============================================================================
def reverseDanceMoves
return true if pbOpposing1.hasWorkingAbility(:DANCINGPANIC)
return true if pbOpposing2.hasWorkingAbility(:DANCINGPANIC)
return false
end
#=============================================================================
4) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_013", and replace it with this:
Code:
################################################################################
# Confuses the target.
################################################################################
class PokeBattle_Move_013 < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
# Custom Ability - Dancing Panic (Reverse Teeter Dance)
if isDanceMove? && attacker.reverseDanceMoves
if opponent.effects[PBEffects::Confusion]>0
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbCureConfusion(true)
return 0
else
@battle.pbDisplay(_INTL("{1} is already free from confusion!",opponent.pbThis))
return -1
end
else
if opponent.pbCanConfuse?(attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbConfuse
@battle.pbDisplay(_INTL("{1} became confused!",opponent.pbThis))
return 0
end
return -1
end
end
def pbAdditionalEffect(attacker,opponent)
return if opponent.damagestate.substitute
# Custom Ability - Dancing Panic (Reverse Teeter Dance)
if isDanceMove? && attacker.reverseDanceMoves
if opponent.effects[PBEffects::Confusion]>0
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
opponent.pbCureConfusion(true)
else
@battle.pbDisplay(_INTL("{1} is already free from confusion!",opponent.pbThis))
end
else
if opponent.pbCanConfuse?(attacker,false,self)
opponent.pbConfuse
@battle.pbDisplay(_INTL("{1} became confused!",opponent.pbThis))
end
end
end
end
5) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_020", and replace it with this:
Code:
################################################################################
# Increases the user's Special Attack by 1 stage.
################################################################################
class PokeBattle_Move_020 < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Fiery Dance)
if isDanceMove? && attacker.reverseDanceMoves
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbReduceStat(PBStats::SPATK,1,attacker,false,self)
return ret ? 0 : -1
else
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbIncreaseStat(PBStats::SPATK,1,attacker,false,self)
return ret ? 0 : -1
end
end
def pbAdditionalEffect(attacker,opponent)
# Custom Ability - Dancing Panic (Reverse Fiery Dance)
if isDanceMove? && attacker.reverseDanceMoves
if attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbReduceStat(PBStats::SPATK,1,attacker,false,self)
end
else
if attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPATK,1,attacker,false,self)
end
end
end
end
6) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_026", and replace it with this:
Code:
################################################################################
# Increases the user's Attack and Speed by 1 stage each. (Dragon Dance)
################################################################################
class PokeBattle_Move_026 < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Dragon Dance)
if isDanceMove? && attacker.reverseDanceMoves
if !attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self) &&
!attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any lower!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbReduceStat(PBStats::ATTACK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbReduceStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
else
if !attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self) &&
!attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any higher!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::ATTACK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
end
return 0
end
end
7) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_02B", and replace it with this:
Code:
################################################################################
# Increases the user's Sp. Attack, Sp. Defense and Speed by 1 stage each. (Quiver Dance)
################################################################################
class PokeBattle_Move_02B < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Quiver Dance)
if isDanceMove? && attacker.reverseDanceMoves
if !attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,false,self) &&
!attacker.pbCanReduceStatStage?(PBStats::SPDEF,attacker,false,self) &&
!attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any higher!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanReduceStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbReduceStat(PBStats::SPATK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanReduceStatStage?(PBStats::SPDEF,attacker,false,self)
attacker.pbReduceStat(PBStats::SPDEF,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanReduceStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbReduceStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
else
if !attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,false,self) &&
!attacker.pbCanIncreaseStatStage?(PBStats::SPDEF,attacker,false,self) &&
!attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
@battle.pbDisplay(_INTL("{1}'s stats won't go any higher!",attacker.pbThis))
return -1
end
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
showanim=true
if attacker.pbCanIncreaseStatStage?(PBStats::SPATK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPATK,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanIncreaseStatStage?(PBStats::SPDEF,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPDEF,1,attacker,false,self,showanim)
showanim=false
end
if attacker.pbCanIncreaseStatStage?(PBStats::SPEED,attacker,false,self)
attacker.pbIncreaseStat(PBStats::SPEED,1,attacker,false,self,showanim)
showanim=false
end
end
return 0
end
end
8) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_02E", and replace it with this:
Code:
################################################################################
# Increases the user's Attack by 2 stages.
################################################################################
class PokeBattle_Move_02E < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
# Custom Ability - Dancing Panic (Reverse Swords Dance)
if isDanceMove? && attacker.reverseDanceMoves
return -1 if !attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
else
return -1 if !attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
end
end
def pbAdditionalEffect(attacker,opponent)
# Custom Ability - Dancing Panic (Reverse Swords Dance)
if isDanceMove? && attacker.reverseDanceMoves
if attacker.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
end
else
if attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self)
attacker.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
end
end
end
end
9) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_04B", and replace it with this:
Code:
################################################################################
# Decreases the target's Attack by 2 stages.
################################################################################
class PokeBattle_Move_04B < PokeBattle_Move
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
# Custom Ability - Dancing Panic (Reverse Featherdance)
if isDanceMove? && attacker.reverseDanceMoves
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !opponent.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=opponent.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
else
return super(attacker,opponent,hitnum,alltargets,showanimation) if pbIsDamaging?
return -1 if !opponent.pbCanReduceStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=opponent.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
return ret ? 0 : -1
end
end
def pbAdditionalEffect(attacker,opponent)
return if opponent.damagestate.substitute
# Custom Ability - Dancing Panic (Reverse Featherdance)
if isDanceMove? && attacker.reverseDanceMoves
if opponent.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,false,self)
opponent.pbIncreaseStat(PBStats::ATTACK,2,attacker,false,self)
end
else
if opponent.pbCanReduceStatStage?(PBStats::ATTACK,attacker,false,self)
opponent.pbReduceStat(PBStats::ATTACK,2,attacker,false,self)
end
end
end
end
10) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_0D2", and add this right below the line that starts with "ret=super":
Code:
# Custom Ability - Dancing Panic (Reverse Petal Dance)
return ret if isDanceMove? && attacker.reverseDanceMoves
11) In PokeBattle_MoveEffects, find the code for "class PokeBattle_Move_0E4", and replace it with this:
Code:
################################################################################
# User faints. The Pokémon that replaces the user is fully healed (HP, PP and
# status). Fails if user won't be replaced. (Lunar Dance)
################################################################################
class PokeBattle_Move_0E4 < PokeBattle_Move
def isHealingMove?
return true
end
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
if [email protected]?(attacker.index)
@battle.pbDisplay(_INTL("But it failed!"))
return -1
end
pbShowAnimation(@id,attacker,nil,hitnum,alltargets,showanimation)
# Custom Ability - Dancing Panic (Reverse Lunar Dance)
if isDanceMove? && attacker.reverseDanceMoves
@battle.pbDisplay(_INTL("{1} became cloaked in mystical moonlight!",attacker.pbThis))
attacker.pbRecoverHP(attacker.totalhp)
attacker.pbCureStatus(false)
for i in 0...4
attacker.moves[i].pp=attacker.moves[i].totalpp
end
attacker.effects[PBEffects::LunarDance]=false
else
attacker.pbReduceHP(attacker.hp)
attacker.effects[PBEffects::LunarDance]=true
end
return 0
end
end
12) Add this to your Abilities PBS file. Renumber the X's as necessary:
Code:
XXX,DANCINGPANIC,Dancing Panic,"Effects of opponent's dance moves are reversed."
Move: Magical Horn
Type: Fairy
Category: Status, Sound-Based
Statistics: --BP/--ACC/10 PP
Affected By: Protect, Magic Coat, Snatch, Mirror Move
Effect: The user plays a melody using its horn flute that gives the Dancer ability to all Pokémon.
Details: This move requires the Dancer ability to be installed. This move is meant to be used in conjunction with the Dancing Panic ability. The concept here is that you use this move to give all Pokemon on the field Dancer. Then all Pokemon will copy the user's dance moves whenever it uses one. However, if the user has the Dancing Panic ability, the effects of the opponent's forced dance moves will be reversed. This means you could use a move like Swords Dance to boost your own attack, and the opponents will helplessly imitate your Pokemon - except their Swords Dance will reduce their Attack by 2 stages, since Dancing Panic reverses its effects. There's a ton of combo potential that could be utilized with these effects.
Gives all Pokemon besides the user the Dancer ability.
Fails against targets that already have Dancer, are immune to Sound-based moves, or have an un-losable ability (Multitype, Stance Change, etc).
Suggested Users: ???
Installation:
Spoiler:
1) In PokeBattle_MoveEffects, paste this at the bottom. Remember to renumber the Move ID if necessary:
Code:
################################################################################
# Gives the Dancer ability to the target. (Magical Horn)
################################################################################
class PokeBattle_Move_15A < PokeBattle_Move # Renumber Move ID if necessary
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
blacklist = [:MULTITYPE,:ZENMODE,:STANCECHANGE,:SCHOOLING,:COMATOSE,
:SHIELDSDOWN,:DISGUISE,:RKSSYSTEM,:BATTLEBOND,:POWERCONSTRUCT,
:ICEFACE,:GULPMISSILE]
for i in blacklist
abilname=PBAbilities.getName(opponent.ability)
if isConst?(opponent.ability,PBAbilities,i)
@battle.pbDisplay(_INTL("It doesn't affect {1}...",opponent.pbThis(true)))
return -1
elsif isConst?(opponent.ability,PBAbilities,:DANCER)
@battle.pbDisplay(_INTL("{1} already has the {2} ability!",opponent.pbThis,abilname))
return -1
else
opponent.ability=getConst(PBAbilities,:DANCER)
abilname=PBAbilities.getName(opponent.ability)
@battle.pbDisplay(_INTL("{1} gained the {2} ability!",opponent.pbThis,abilname))
return 0
end
end
end
end
2) Add this to your Moves PBS file. Renumber the X's as necessary:
Code:
XXX,MAGICALHORN,Magical Horn,15A,0,FAIRY,Status,0,10,0,08,0,bcdek,"The user plays a melody using its horn flute that gives the Dancer ability to all Pokémon."
These moves and abilities are designed around bear Pokemon. Grizzly Guard is more or less an independent ability, but the rest are all built around a single theme involving the item Honey.
Spoiler:
Ability: Grizzly Guard
Effect: Guards its partner from harm & raises Attack.
Details: This ability is designed for a protective mother bear Pokemon that defends her cubs (and allies) in battle.
When the user is sent out in a double battle, this ability triggers, alerting you that the user will protect its ally with this ability.
Whenever the user's partner is targeted by an opponent's direct attack (single-target, non-status move), that attack will be redirected to the user instead. This will even override the effects of Follow Me. This ability will not trigger if the attacking Pokemon has the Mold Breaker or Stalwart abilities, if the user is asleep or frozen, or if either the user or its partner are out of range due to the effects of a move (Fly, Dig, Bounce, etc). This ability also fails if either the user or its partner are under the effects of Protect that turn.
If the user successfully defends its partner by redirecting an attack to itself with this ability, the user's Attack will increase by 1 stage after being hit. The user must receive damage from the redirected attack for this Attack boost to trigger. If the user redirects a multi-hit move to itself, it will receive an Attack boost for each hit.
1) In PokeBattle_Battler, look for "# Pressure message", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Grizzly Guard (Message)
#===========================================================================
if self.hasWorkingAbility(:GRIZZLYGUARD) && pbPartner && !pbPartner.fainted? && onactive
@battle.pbDisplay(_INTL("{1} protects its allies with {2}!",pbThis,PBAbilities.getName(self.ability)))
end
#===========================================================================
2) In the same section, find the line starting with "if target.hasWorkingAbility(:CURSEDBODY,true)", and paste this above it:
Code:
#=======================================================================
# Custom Ability - Grizzly Guard (Attack Boost)
#=======================================================================
if target.hasWorkingAbility(:GRIZZLYGUARD) && target!=user &&
target.pbPartner && !target.pbPartner.fainted? &&
!move.pbIsStatus? && PBTargets.targetsOneOpponent?(move)
blacklist=[
0xC9, # Fly
0xCA, # Dig
0xCB, # Dive
0xCC, # Bounce
0xCD, # Shadow Force
0xCE, # Sky Drop
0x14D # Phantom Force
]
if !(@battle.switching ||
user.hasMoldBreaker ||
user.hasWorkingAbility(:STALWART) ||
target.effects[PBEffects::Protect] ||
target.pbPartner.effects[PBEffects::Protect] ||
target.status==PBStatuses::FROZEN ||
target.status==PBStatuses::SLEEP ||
blacklist.include?(PBMoveData.new(target.effects[PBEffects::TwoTurnAttack]).function) ||
blacklist.include?(PBMoveData.new(target.pbPartner.effects[PBEffects::TwoTurnAttack]).function))
if target.pbIncreaseStat(PBStats::ATTACK,1,nil,false)
PBDebug.log("[Ability triggered] #{target.pbThis}'s Grizzly Guard (raise Attack)")
end
end
end
#=======================================================================
3) In the same section, find the line "if changeeffect==1", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Grizzly Guard (Targeting)
#===========================================================================
if target.pbPartner.hasWorkingAbility(:GRIZZLYGUARD) && !thismove.pbIsStatus? &&
!target.effects[PBEffects::Protect] && PBTargets.targetsOneOpponent?(thismove) &&
target!=user
newtarget=target.pbPartner
blacklist=[
0xC9, # Fly
0xCA, # Dig
0xCB, # Dive
0xCC, # Bounce
0xCD, # Shadow Force
0xCE, # Sky Drop
0x14D # Phantom Force
]
if newtarget && !newtarget.fainted?
if !(@battle.switching ||
user.hasMoldBreaker ||
user.hasWorkingAbility(:STALWART) ||
newtarget.effects[PBEffects::Protect] ||
newtarget.status==PBStatuses::FROZEN ||
newtarget.status==PBStatuses::SLEEP ||
blacklist.include?(PBMoveData.new(target.effects[PBEffects::TwoTurnAttack]).function) ||
blacklist.include?(PBMoveData.new(newtarget.effects[PBEffects::TwoTurnAttack]).function))
target=newtarget
changeeffect=0
if !blacklist.include?(PBMoveData.new(user.effects[PBEffects::TwoTurnAttack]).function)
PBDebug.log("[Ability triggered] #{newtarget.pbThis}'s Grizzly Guard (change target)")
@battle.pbDisplay(_INTL("{1} took the attack for its partner with {2}!",
newtarget.pbThis,PBAbilities.getName(newtarget.ability)))
end
end
end
end
#===========================================================================
4) Add this to your Abilities PBS file. Renumber the X's as necessary:
Code:
XXX,GRIZZLYGUARD,Grizzly Guard,"Guards its partner from harm & raises Attack."
Ability: Honey Frenzy
Effect: 2x damage on foes holding Honey, or heals if its held.
Details: This Ability is designed for a honey-obsessed Pokemon, and has multiple effects.
Upon being sent out when another Pokemon on the field is holding the item "Honey", the user's ability will trigger, alerting you of the presence of Honey on that Pokemon. If multiple Pokemon on the field are holding Honey, it will alert you of each one. This message won't trigger if the user itself is holding Honey.
If a Pokemon other than the user is holding Honey, it becomes enraged and all damage the user deals to that target is doubled. However, the user becomes unruly and is unable to target other Pokemon besides the Pokemon holding Honey while this effect is in play. All of the user's direct attacks (single-target, non-status moves) will be redirected to the Honey holder. This includes the user's partner. This will even override the effects of Follow Me. If multiple Pokemon on the field are holding Honey, the user's attacks will be redirected to Honey holders based on their speed priority. If the Honey item held is transferred from one Pokemon to another before the user attacks this round, the user will redirect its attacks to the new Honey holder. If the Honey holder is out of range this turn due to the effects of a move (Fly, Dig, Bounce, etc), the user will not be forced to redirect its attacks to that target until they return the following turn.
If the user is holding Honey, the above effects are ignored. Instead, the user becomes docile while it enjoys its Honey, healing 1/8th its max HP at the end of each turn. It's Speed is also halved while its holding Honey.
1) In PokeBattle_Battler, find the line "if isConst?(self.item,PBItems,:IRONBALL)", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Speed reduction)
#===========================================================================
if self.hasWorkingAbility(:HONEYFRENZY) && isConst?(self.item,PBItems,:HONEY)
speedmult=(speedmult/2).round
end
#===========================================================================
2) In the same section, find the line "# Pressure message", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Message)
#===========================================================================
if self.hasWorkingAbility(:HONEYFRENZY) && !self.hasWorkingItem(:HONEY) && onactive
honey=[]
honey.push(pbOpposing1) if pbOpposing1.hasWorkingItem(:HONEY) && !pbOpposing1.fainted?
honey.push(pbOpposing2) if pbOpposing2.hasWorkingItem(:HONEY) && !pbOpposing2.fainted?
honey.push(pbPartner) if pbPartner.hasWorkingItem(:HONEY) && !pbPartner.fainted?
for i in honey
itemname=PBItems.getName(getConst(PBItems,:HONEY))
@battle.pbDisplay(_INTL("{1} detects the presence of {2} on {3}!",pbThis,itemname,i.pbThis(true)))
end
end
#===========================================================================
3) In the same section, find the line starting with "if hpcure && self.hasWorkingItem(:LEFTOVERS)", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Healing)
#===========================================================================
if self.hasWorkingAbility(:HONEYFRENZY)
if hpcure && self.hasWorkingItem(:HONEY) && self.hp!=self.totalhp &&
@effects[PBEffects::HealBlock]==0
PBDebug.log("[Ability triggered] #{pbThis}'s Honey Frenzy")
pbRecoverHP((self.totalhp/8).floor,true)
@battle.pbDisplay(_INTL("{1}'s {2} restored some HP with its held {3}!",pbThis,PBAbilities.getName(self.ability),itemname))
end
end
#===========================================================================
4) In the same section, find the line "if changeeffect==1", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Targeting)
#===========================================================================
if user.hasWorkingAbility(:HONEYFRENZY) && !user.hasWorkingItem(:HONEY) &&
!thismove.pbIsStatus? && PBTargets.targetsOneOpponent?(thismove)
newtarget=nil
blacklist=[
0xC9, # Fly
0xCA, # Dig
0xCB, # Dive
0xCC, # Bounce
0xCD, # Shadow Force
0xCE, # Sky Drop
0x14D # Phantom Force
]
for i in priority
if i.hasWorkingItem(:HONEY) && !i.fainted? && [email protected] &&
!blacklist.include?(PBMoveData.new(i.effects[PBEffects::TwoTurnAttack]).function)
newtarget=i
changeeffect=0
end
end
if newtarget && target!=newtarget &&
!blacklist.include?(PBMoveData.new(user.effects[PBEffects::TwoTurnAttack]).function)
PBDebug.log("[Ability triggered] #{newtarget.pbThis}'s Honey Frenzy (change target)")
@battle.pbDisplay(_INTL("{1} targeted {2} instead because of its held {3}!",
user.pbThis,newtarget.pbThis(true),PBItems.getName(newtarget.item)))
end
target=newtarget if newtarget
end
#===========================================================================
5) Finally, in PokeBattle_Move, find the line "if attacker.hasWorkingAbility(:RIVALRY)", and paste this above it:
Code:
#===========================================================================
# Custom Ability - Honey Frenzy (Damage)
#===========================================================================
if attacker.hasWorkingAbility(:HONEYFRENZY)
if !attacker.hasWorkingItem(:HONEY) && opponent.hasWorkingItem(:HONEY)
damagemult=(damagemult*2).round
end
end
#===========================================================================
6) Add this to your Abilities PBS file. Renumber the X's as necessary:
Code:
XXX,HONEYFRENZY,Honey Frenzy,"2x damage on foes holding Honey, or heals if its held."
Move: Honey Claw
Type: Normal
Category: Physical, Contact
Statistics: 95BP/100ACC/15 PP
Affected By: Protect, Mirror Move, King's Rock
Effect: The user swipes with honey-soaked paws. May replace the foe's item with the user's held Honey.
Details: This move is meant to work in conjunction with the Honey Frenzy ability. The concept here is that you enter the battle with the user holding Honey, which heals it each turn due to the Honey Frenzy ability, but halves its Speed. This is the more defensive, Trick Room-oriented mode of this Ability
However, when its time to go on the offensive, you use Honey Claw to transfer the user's Honey to the target. Now that a Pokemon on the field other than the user is holding Honey, the second effect of the user's Honey Frenzy ability kicks in, doubling damage dealt to the foe holding Honey. And since the user with Honey Frenzy is no longer holding Honey, its Speed is no longer halved. So in effect, using this move not only damages the foe and removes its initial item, but inadvertently makes your Pokemon both stronger and faster. With this move, you can switch between the defensive and offensive functions of the Honey Frenzy ability, allowing the user to be very flexible in battle.
When the user is holding Honey and strikes an opponent with this move, they become drenched in the user's honey. This knocks off their current item (if any), and instead gives them the user's Honey.
This effect fails if the target is already holding Honey, is behind a substitute, is holding an item that cannot be removed, or if the target has the Sticky Hold ability (and the user does not have Mold Breaker).
If the user has the Unburden ability, its effects will trigger in response to giving your held Honey to the opponent.
If a Pokemon on the field has the Honey Frenzy ability, that ability will automatically trigger when the presence of Honey is detected on the target.
If the target is a wild Pokemon, Honey that is given to that target by this move's effect is permanently lost, and will not be returned to the user after battle (unless it's retrieved again through something like Trick). However, if this move is used by a wild Pokemon against you, your Pokemon will not retain the Honey after battle, and their original item (if any) will be restored.
If the user is not holding any Honey when using this move, this move functions as a normal attack without any additional effects.
Suggested Users: Teddiursa, Ursaring
Installation:
Spoiler:
1) In PokeBattle_MoveEffects, paste this at the bottom. Remember to renumber the Move ID if necessary:
Code:
################################################################################
# Gives the target the user's Honey, replacing their held item. (Honey Claw)
################################################################################
class PokeBattle_Move_15B < PokeBattle_Move # Renumber Move ID if necessary
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
ret=super(attacker,opponent,hitnum,alltargets,showanimation)
if isConst?(attacker.item,PBItems,:HONEY) && opponent.damagestate.calcdamage>0 && !opponent.fainted?
if !(opponent.effects[PBEffects::Substitute]>0 && !ignoresSubstitute?(attacker))
useritem=PBItems.getName(attacker.item)
itemname=PBItems.getName(opponent.item)
@battle.pbDisplay(_INTL("{1} was drenched with {2}'s {3}!",opponent.pbThis,attacker.pbThis(true),useritem))
if isConst?(opponent.item,PBItems,:HONEY)
@battle.pbDisplay(_INTL("But {1} is already carrying {2}!",opponent.pbThis(true),itemname))
elsif @battle.pbIsUnlosableItem(opponent,opponent.item)
@battle.pbDisplay(_INTL("But {1} managed to hold on to its item!",opponent.pbThis(true)))
elsif opponent.item>0 && opponent.hasWorkingAbility(:STICKYHOLD) && !attacker.hasMoldBreaker
abilname=PBAbilities.getName(opponent.ability)
@battle.pbDisplay(_INTL("{1} held on to its item due to {2}!",opponent.pbThis,abilname))
else
if opponent.item>0
@battle.pbDisplay(_INTL("{1} lost its {2} and was given {3}'s {4}!",
opponent.pbThis,itemname,attacker.pbThis(true),useritem))
else
@battle.pbDisplay(_INTL("{1} was given {2}'s {3}!",
opponent.pbThis,attacker.pbThis(true),useritem))
end
opponent.item=attacker.item
attacker.item=0
opponent.effects[PBEffects::ChoiceBand]=-1
attacker.effects[PBEffects::Unburden]=true
if [email protected] && # In a wild battle
attacker.pokemon.itemInitial==opponent.item
attacker.pokemon.itemInitial=0
end
battlers = []
battlers.push(attacker) if attacker && !attacker.fainted?
battlers.push(attacker.pbPartner) if attacker.pbPartner && !attacker.pbPartner.fainted?
battlers.push(opponent.pbPartner) if opponent.pbPartner && !opponent.pbPartner.fainted?
for i in battlers
if i.hasWorkingAbility(:HONEYFRENZY)
i.pbAbilitiesOnSwitchIn(true)
end
end
end
end
end
return ret
end
end
2) Add this to your Moves PBS file. Renumber the X's as necessary:
Code:
XXX,HONEYCLAW,Honey Claw,15B,95,NORMAL,Physical,100,15,0,00,0,abef,"The user swipes with honey-soaked paws. May replace the foe's item with the user's held Honey."
Move: Honey Snack
Type: Normal
Category: Status, Healing Move
Statistics: --BP/--ACC/10 PP
Affected By: Snatch, Mirror Move
Effect: Restores the user's HP. If Honey is held, consumes it to heal more HP and raise Attack.
Details: Restores 50% of the user's max HP. If the user is holding Honey, the item is consumed and this move will instead heal 75% of the user's max HP, as well as raising the user's Attack stat by 1 stage. If the user is already at full HP, Honey will still be consumed to raise Attack (even if Attack cannot be raised further). This move fails if the user is at full HP and not holding Honey.
This move is meant to work in conjunction with the Honey Frenzy ability. This is a more defensive method of utilizing the user's Honey in situations where you might not want to use Honey Claw. By consuming the held Honey, you boost the user's Attack while also increasing its Speed (since it is no longer halved by Honey Frenzy), in addition to healing HP.
1) In PokeBattle_MoveEffects, paste this at the bottom. Remember to renumber the Move ID if necessary:
Code:
################################################################################
# Heals the user. Consumes Honey for extra healing & Attack boost. (Honey Snack)
################################################################################
class PokeBattle_Move_15C < PokeBattle_Move # Renumber Move ID if necessary
def isHealingMove?
return true
end
def pbEffect(attacker,opponent,hitnum=0,alltargets=nil,showanimation=true)
olditem = attacker.item
itemname = PBItems.getName(olditem)
if attacker.hp==attacker.totalhp
if isConst?(attacker.item,PBItems,:HONEY)
attacker.pbConsumeItem
@battle.pbDisplay(_INTL("{1} consumed its {2}!",attacker.pbThis,itemname))
return -1 if !attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
pbShowAnimation(@id,attacker,opponent,hitnum,alltargets,showanimation)
ret=attacker.pbIncreaseStat(PBStats::ATTACK,1,attacker,false,self)
if attacker.hasWorkingAbility(:HONEYFRENZY)
attacker.pbAbilitiesOnSwitchIn(true)
end
return ret ? 0 : -1
else
@battle.pbDisplay(_INTL("{1}'s HP is full!",attacker.pbThis))
return -1
end
elsif isConst?(attacker.item,PBItems,:HONEY)
attacker.pbConsumeItem
pbShowAnimation(@id,attacker,nil,hitnum,alltargets,showanimation)
attacker.pbRecoverHP(((attacker.totalhp+1)/1.5).floor,true)
@battle.pbDisplay(_INTL("{1} consumed its {2} and restored HP!",attacker.pbThis,itemname))
if attacker.pbCanIncreaseStatStage?(PBStats::ATTACK,attacker,true,self)
attacker.pbIncreaseStat(PBStats::ATTACK,1,attacker,false,self)
end
if attacker.hasWorkingAbility(:HONEYFRENZY)
attacker.pbAbilitiesOnSwitchIn(true)
end
return 0
else
attacker.pbRecoverHP(((attacker.totalhp+1)/2).floor,true)
@battle.pbDisplay(_INTL("{1}'s HP was restored.",attacker.pbThis))
return 0
end
end
end
2) Add this to your Moves PBS file. Renumber the X's as necessary:
Code:
XXX,HONEYSNACK,Honey Snack,15C,0,NORMAL,Status,0,10,0,10,0,de,"Restores the user's HP. If Honey is held, consumes it to heal more HP and raise Attack."
These are some cool moves/abilities! I especially like the dancer ones. One small suggestion I have for Revelation Dance so that its effect is changed like all the other moves would be to make it instead based on the user's secondary type (if applicable).
On a different note, doesn't Grizzly Guard seem really powerful (maybe a little too much)? Follow Me is already a very powerful move in doubles, and to be able to have that effect without using a turn is quite a bit more powerful. Assuming this ability is available for the player in your game and you allow healing items in battle, you could just keep healing the Pokemon with Grizzly Guard and have the other Pokemon set up as much as it wants and then sweep. It also doesn't help that all of these Pokemon have other ways to stall out the opponent (keep in mind that ALL of these Pokemon have access to Protect, Substitute, Endure, & Rest). Also, Bewear gets healing moves like Drain Punch and Pain Split, and using Wide Guard on it (along with Protect) would allow for so many free turns. Maybe you should make it so the ability only activates when the Pokemon with the ability uses a damaging move? Or maybe make it so it only redirects attacks away from Pokemon that share a type with it? Even with either of these restrictions individually, I think it would still be a VERY powerful ability in doubles, but maybe it would be a bit more balanced if both of these conditions must be met?
These are some cool moves/abilities! I especially like the dancer ones. One small suggestion I have for Revelation Dance so that its effect is changed like all the other moves would be to make it instead based on the user's secondary type (if applicable).
On a different note, doesn't Grizzly Guard seem really powerful (maybe a little too much)? Follow Me is already a very powerful move in doubles, and to be able to have that effect without using a turn is quite a bit more powerful. Assuming this ability is available for the player in your game and you allow healing items in battle, you could just keep healing the Pokemon with Grizzly Guard and have the other Pokemon set up as much as it wants and then sweep. It also doesn't help that all of these Pokemon have other ways to stall out the opponent (keep in mind that ALL of these Pokemon have access to Protect, Substitute, Endure, & Rest). Also, Bewear gets healing moves like Drain Punch and Pain Split, and using Wide Guard on it (along with Protect) would allow for so many free turns. Maybe you should make it so the ability only activates when the Pokemon with the ability uses a damaging move? Or maybe make it so it only redirects attacks away from Pokemon that share a type with it? Even with either of these restrictions individually, I think it would still be a VERY powerful ability in doubles, but maybe it would be a bit more balanced if both of these conditions must be met?
You bring up a lot of good points that I've put some thought into.
My idea for Revelation Dance was to make it so that it is always treated as a Normal-type move, rather than changing types like it normally would. I decided not to include it mostly because of the fact that Revelation Dance isn't included in Essentials by default, so then I'd have to first give instructions on how to add Revelation Dance before I could explain what changes you'd need to make so that it works with Dancing Panic. That's too many steps to add to the instructions for a single move that only a single Pokemon can use, for an effect that isn't even that drastic. Feel free to implement it on your own though.
Grizzly Guard is a powerful ability indeed, which is why its meant to have a very limited distribution. It does have its limitations though, which I outlined in my post. It ONLY activates on the opponent's single-target non-status moves, and ONLY activates when the user's partner is the targeted Pokemon. So Grizzly Guard doesn't have all the advantages of Follow Me. For example, in the main series, a move like Beat Up used on your partner (to activate something like Justified) would be redirected with Follow Me, locking down the strategy. Grizzly Guard will not redirect this move, because the target wasn't the user's partner. Also you have moves like Thunder Wave, Spore, etc. that are status moves which would be redirected by Follow Me, but aren't redirected by Grizzly Guard. In addition, Grizzly Guard won't activate if the user OR its partner are under the effects of Protect that turn, which prevents a lot of situations where you could cheese this ability. This ability is also ignored by Pokemon with Mold Breaker, which is a weakness that Follow Me doesn't have (along with all its normal weaknesses, like Stalwart/Sleep/etc). It's still definitely a good ability with some major combo potential, but I don't think its outright broken if its distributed conservatively.
Also something to consider is that the best users of Follow Me tend to be support-oriented Pokemon that have the means to set up its partner. The suggested Pokemon I listed aren't really known for their supportive roles, and tbh they probably want to utilize the Attack boost portion of the ability much more so than the redirection part. Then you also have to consider that Beartic and Pangoro are super weak to Rock Slide and Dazzling Gleam, respectively (two very common spread moves which would ignore this ability), and Bewear would need to give up its Fluffy ability to utilize this (significantly weakening its bulk), and Ursaring just sucks in general, so...
Yeah. Not saying this ability can't be too good. It definitely has potential to require some nerfs. It's just hard to judge in a bubble. The only things you brought up where I think I might make some changes are in regards to Substitute and Wide Guard. I think Substitute could definitely be abused for some degenerate play here, and it actually doesn't make much sense for the ability anyway. I mean, how can you be bodyguarding your partner if you yourself are hiding behind something else? And why would your partner NEED protecting if they're already being shielded by the Substitute? So yeah, in the case of Substitute, I think the ability shouldn't trigger if either the user or partner have a Sub up (the same way the ability won't trigger if either the user or partner used Protect). I think this same logic applies to Wide Guard as well. So those are the two points you brought up that I think are worth addressing.
As for things like Endure, I think those are fine. Endure immediately dies to sand or literally any form of passive damage. So it's sort of a one-trick pony that only really does something cool for one turn and you have to give up a whole moveslot for. Rest isn't a big deal either since the ability doesn't trigger if the user is asleep. Again, you could do some Chesto shenanigans or something to get extra mileage out of this, but if you gotta waste a held item slot just for that one tactic, I don't see that as a huge deal. I think the BIGGER threat is actually the partner being able to use Heal Pulse on the user each turn, making them into a regenerating meat shield for themselves. But then you're basically just stuck with just 1 attack each turn vs. your opponent's 2 (since the partner basically has to click Heal Pulse every turn). So I still actually don't see this as too broken.
As for abusing the tactic to heal with items during in-game battles - sure, I guess. There's a million ways to abuse items in-game, so I'm not super concerned with that. Especially since this is a doubles-only tactic, which tends to be a much rarer format for in-game play.
I updated the Grizzly Guard ability after going over what you said. I made it so that it no longer activates when:
The opponent uses a spread move.
The opponent uses a status move.
The opponent has Mold Breaker.
The opponent has Stalwart.
The user or its partner are out of range (Fly, Dig, Dive, etc).
The user or its partner used Protect. [*]The user or its partner used a Protect variant (Spiky Shield, King's Shield).
[*]The user's side of the field is under the effects of Wide Guard, Quick Guard, or Mat Block.
[*]The user or its partner are behind a Substitute.
[*]The user has less than 25% of its total HP remaining.
[*]The user's level is 10 or more levels lower than its partner's.
The bolded items are the new additions I implemented. Spiky/King's Shield should have already been there to begin with, I simply forgot about them. I decided to just add every Protect-like move to the list of exceptions for the sake of consistency. The only one I omitted was Crafty Shield, since that only blocks status moves, which this ability already fails against anyway. And Substitute I added for the reasons I stated in my previous post.
I also made it so that this ability now fails if the user's HP is below 25%. This solves both Endure and Focus Sash from being abused by this ability, as well as making it a little less easy to abuse in-game, since the user's HP needs to be maintained and essentially has a timer before it will begin to fail.
The last bullet is mostly just for balancing the ability's use in-game. Now you cant, for instance, just throw out a Level 20 Ursaring with this ability to eat up a hit for your Level 100 Mewtwo while you heal up. The user will need to be within a reasonable level range of its partner to protect them. This also just makes sense thematically, since it doesn't make much sense that a weakling Pokemon would be bodyguarding something way stronger than itself.
In addition to all this, I also fixed a bug while going back to make these adjustments. Before, this ability would activate even if the user targeted its own partner. Meaning that the user's own attacks would be redirected to itself (lol) if the user targeted its partner with an attack. I fixed this, so now this will no longer occur.
Looks like this is the place where people posts their custom abilities. Here one mine I like to share.
Ability: Adaptation
Effect: Changes the Pokémon's type to the foe's move before getting attack.
Notes: It's the opposite of Protean. I copied that code and swap it around. What this ability does is when your opponent is about to attack, your Pokémon will change it's type according to that attack move. So if a Normal-type Pokémon is about to get hit by a Fighting-type move, it will change its type into Fighting-type. But be careful, if your opponent use a Ghost or Dragon-type moves, it'll change into that and it'll be super-effective. I pair this ability with Revelation Dance (or something similar).
in PokeBattle_Battler look for this:
Spoiler:
Code:
when 0x14D # Phantom Force
miss=true
end
if target.effects[PBEffects::SkyDrop]
miss=true unless thismove.function==0x08 || # Thunder
thismove.function==0x15 || # Hurricane
thismove.function==0x77 || # Gust
thismove.function==0x78 || # Twister
thismove.function==0xCE || # Sky Drop
thismove.function==0x11B || # Sky Uppercut
thismove.function==0x11C # Smack Down
end
miss=false if user.hasWorkingAbility(:NOGUARD) ||
target.hasWorkingAbility(:NOGUARD) ||
@battle.futuresight
override=true if USENEWBATTLEMECHANICS && thismove.function==0x06 && # Toxic
thismove.basedamage==0 && user.pbHasType?(:POISON)
override=true if !miss && turneffects[PBEffects::SkipAccuracyCheck] # Called by another move
if !override && (miss || !thismove.pbAccuracyCheck(user,target)) # Includes Counter/Mirror Coat
PBDebug.log(sprintf("[Move failed] Failed pbAccuracyCheck (function code %02X) or target is semi-invulnerable",thismove.function))
if thismove.target==PBTargets::AllOpposing &&
(!user.pbOpposing1.fainted? ? 1 : 0) + (!user.pbOpposing2.fainted? ? 1 : 0) > 1
@battle.pbDisplay(_INTL("{1} avoided the attack!",target.pbThis))
elsif thismove.target==PBTargets::AllNonUsers &&
(!user.pbOpposing1.fainted? ? 1 : 0) + (!user.pbOpposing2.fainted? ? 1 : 0) + (!user.pbPartner.fainted? ? 1 : 0) > 1
@battle.pbDisplay(_INTL("{1} avoided the attack!",target.pbThis))
elsif target.effects[PBEffects::TwoTurnAttack]>0
@battle.pbDisplay(_INTL("{1} avoided the attack!",target.pbThis))
elsif thismove.function==0xDC # Leech Seed
@battle.pbDisplay(_INTL("{1} evaded the attack!",target.pbThis))
else
@battle.pbDisplay(_INTL("{1}'s attack missed!",user.pbThis))
end
return false
end
And below all of that Paste this:
Spoiler:
Code:
# Adaptation
movetype=thismove.pbType(thismove.type,target,nil)
if target.hasWorkingAbility(:ADAPTATION) &&
thismove.function!=0xAE && # Mirror Move
thismove.function!=0xAF && # Copycat
thismove.function!=0xB0 && # Me First
thismove.function!=0xB3 && # Nature Power
thismove.function!=0xB4 && # Sleep Talk
thismove.function!=0xB5 && # Assist
thismove.function!=0xB6 # Metronome
if !target.pbHasType?(movetype)
typename=PBTypes.getName(movetype)
PBDebug.log("[Ability triggered] #{pbThis}'s Adaptation made it #{typename}-type")
target.type1=movetype
target.type2=movetype
target.effects[PBEffects::Type3]=-1
@battle.pbDisplay(_INTL("{1} transformed into the {2} type!",target.pbThis,typename))
end
end
Question, does this look right? I used the Auto Reflect code from earlier as a base.
Spoiler:
Code:
if self.hasWorkingAbility(:ROOTED) && onactive
if self.effects[PBEffects::Ingrain]=false
PBDebug.log("[Ability triggered] #{pbThis}'s Rooted")
@battle.pbDisplay(_INTL("{1} planted its roots!",pbThis))
self.effects[PBEffects::Ingrain]=true
end
end
Question, does this look right? I used the Auto Reflect code from earlier as a base.
Spoiler:
Code:
if self.hasWorkingAbility(:ROOTED) && onactive
if self.effects[PBEffects::Ingrain]=false
PBDebug.log("[Ability triggered] #{pbThis}'s Rooted")
@battle.pbDisplay(_INTL("{1} planted its roots!",pbThis))
self.effects[PBEffects::Ingrain]=true
end
end
Well, my game starts up, and if it was a bad code, it likely wouldn't like with the previous one I tried, which was burn/paralysis variations of Poison Touch. I think I managed to do something on my own for once (well, somewhat at least).
I also re-implemented birthsigns into my project (had to start from scratch), and nothing's gone wrong this time. If anything, my previous knowledge makes me able to execute it somewhat better
I plan on updating every ability ive posted in this thread with v18 equivalents at some point. But its not a high priority for me, as I still have to update both Birthsigns and Dynamax before I even get to that, which are huge projects that I havent even started yet.
Might be a bit of a mega post here but wanted to share some of my abilities (plus example pokemons) do note it is going off v16/17 (As i feel those will be compatible) but v18 apparently has different code so cant help there, also instead of calling actual lines i'll call "under intimidate..." etc. as my lines will be completely different. anyway here we go.
Night Gust-
Whips up a Tailwind for your Pokemon
Examples; Rayquaza, Cottonee, Whismicott, Hoppip, Skiploom, Jumpluff, Fearow.
Spoiler:
Rather simple one. just below copycat and above download have this;
Code:
# Night Gust
if self.hasWorkingAbility(:NIGHTGUST) && onactive && self.pbOwnSide.effects[PBEffects::Tailwind]<=0
self.pbOwnSide.effects[PBEffects::Tailwind]=5
if [email protected]?(self.index)
@battle.pbDisplay(_INTL("The tailwind blew from behind your team!"))
else
@battle.pbDisplay(_INTL("The tailwind blew from behind the opposing team!"))
end
end
Agile Target-
Speed is doubled for the first 5 turns.
Examples; Yanma, Yanmega, Ninjask, Flygon, Rowlet, Dartix, Decidueye.
Spoiler:
Basically works like slowstart but verse. so under slowstart;
Code:
if self.hasWorkingAbility(:AGILETARGET) && self.turncount<=5
speedmult=(speedmult*2).round
end
Ancient Shell/Firmly Rooted.
Cannot Switch out, but heals every turn.
Examples for Ancient Shell; Aron, Lairon, Aggron, Groudon, Druddigon, Copperajah.
Examples for Firmly Rooted; Tangela, Tangrowth, Zygarde, Oddish, Gloom, Vileplume.
Spoiler:
Like Night Gust, it just summons ingrain like effects. under ingrain in _battle;
Code:
if thispkmn.hasWorkingAbility(:ANCIENTSHELL)
pbDisplayPaused(_INTL("{1} can't be switched out!",thispkmn.pbThis)) if showMessages
return false
end
if thispkmn.hasWorkingAbility(:FIRMLYROOTED)
pbDisplayPaused(_INTL("{1} can't be switched out!",thispkmn.pbThis)) if showMessages
return false
end
and then below ingrain but above Leechseed lower down (when it mentions bigroot and the hp gain);
Code:
# Ancient Roots
for i in priority
next if i.isFainted?
if i.hasWorkingAbility(:ANCIENTSHELL)
PBDebug.log("[Lingering effect triggered] #{i.pbThis}'s Ancient Shell")
hpgain=(i.totalhp/8).floor
hpgain=(hpgain*1.3).floor if i.hasWorkingItem(:BIGROOT)
hpgain=i.pbRecoverHP(hpgain,true)
pbDisplay(_INTL("{1} absorbed nutrients with its thick shell!",i.pbThis)) if hpgain>0
end
end
# Firmly Rooted
for i in priority
next if i.isFainted?
if i.hasWorkingAbility(:FIRMLYROOTED)
PBDebug.log("[Lingering effect triggered] #{i.pbThis}'s Firmly Rooted")
hpgain=(i.totalhp/8).floor
hpgain=(hpgain*1.3).floor if i.hasWorkingItem(:BIGROOT)
hpgain=i.pbRecoverHP(hpgain,true)
pbDisplay(_INTL("{1} absorbed nutrients while rooted.",i.pbThis)) if hpgain>0
end
end
Riptide-
Gives priority to a physical move, does half damage to Flying and Normal types.
Examples: Carvanha, Sharpedo, Keldeo, Corphish, Crawdaunt
Spoiler:
Since its like prankster the half damage is to compensate the nerf to prankster against dark types. if you dont want that you dont need to include that part. Above gale wings in _battler (where it has p+=2) add;
Code:
if user.hasWorkingAbility(:RIPTIDE) && thismove.pbIsPhysical?(type)
p+=2
end
Now for the normal/flying damage nerf. above ironfist's code in _move and below technician add;
Code:
if attacker.hasWorkingAbility(:RIPTIDE) && pbIsPhysical?(type) && (isConst?(type,PBTypes,:FLYING) || isConst?(type,PBTypes,:NORMAL))
damagemult=(damagemult*0.5).round
end
Mutual-
Raises its defense if its partner is a flying type, and raises their attack.
Examples: Hippopotas, Hippowdon, Cufant, Copperajah, Tauros, Miltank, Bouffalant.
Spoiler:
To explain it more, in a double battle if a pokemon with mutual's partner is flying type, the mutual holding pokemons defense will rise and the partners attack will rise. right below download in _battler add;
Code:
if pbPartner.hasWorkingAbility(:MUTUAL) && pbHasType?(:FLYING) && onactive
if pbIncreaseStatWithCause(PBStats::ATTACK,2,self,PBAbilities.getName(pbPartner.ability))
PBDebug.log("[Ability triggered] #{pbThis}'s Mutual (raising Attack)")
end
end
if self.hasWorkingAbility(:MUTUAL) && pbPartner.pbHasType?(:FLYING) && onactive
if pbIncreaseStatWithCause(PBStats::DEFENSE,2,self,PBAbilities.getName(self.ability))
PBDebug.log("[Ability triggered] #{pbPartner}'s Mutual (raising Defense)")
end
end
I plan on updating every ability ive posted in this thread with v18 equivalents at some point. But its not a high priority for me, as I still have to update both Birthsigns and Dynamax before I even get to that, which are huge projects that I havent even started yet.
Wow, you are incredible and don't worry, give everything to achieve your priorities first, and in advance I thank you that you have a great knowledge in scripting skills, you are great :3😃😄