• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • 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.

All gen 7 abilities

Code:
      p+=3 if user.hasWorkingAbility(:TRIAGE) && thismove.isHealingMove? &&
              !isConst?(thismove.id,PBMoves,:AQUARING) &&
              !isConst?(thismove.id,PBMoves,:GRASSYTERRAIN) &&
              !isConst?(thismove.id,PBMoves,:INGRAIN) &&
              !isConst?(thismove.id,PBMoves,:LEECHSEED) &&
              !isConst?(thismove.id,PBMoves,:PAINSPLIT) &&
              !isConst?(thismove.id,PBMoves,:PRESENT) &&
              !isConst?(thismove.id,PBMoves,:POLLENPUFF)

Can you post your TRIAGE script?
 
Sure. In PokeBattle_Battler, where is prankster:
Code:
if USENEWBATTLEMECHANICS
      p+=1 if user.hasWorkingAbility(:PRANKSTER) && thismove.pbIsStatus?
      p+=1 if user.hasWorkingAbility(:GALEWINGS) && isConst?(thismove.type,PBTypes,:FLYING)
      [COLOR="Red"]p+=3 if user.hasWorkingAbility(:TRIAGE) && thismove.isHealingMove? &&
              !isConst?(thismove.id,PBMoves,:AQUARING) &&
              !isConst?(thismove.id,PBMoves,:GRASSYTERRAIN) &&
              !isConst?(thismove.id,PBMoves,:INGRAIN) &&
              !isConst?(thismove.id,PBMoves,:LEECHSEED) &&
              !isConst?(thismove.id,PBMoves,:PAINSPLIT) &&
              !isConst?(thismove.id,PBMoves,:PRESENT) &&
              !isConst?(thismove.id,PBMoves,:POLLENPUFF)[/COLOR]
              
    end
In PokeBattle_Battle, where is prankster:
Code:
pri=@choices[i][2].priority
        pri+=1 if @battlers[i].hasWorkingAbility(:PRANKSTER) &&
                  @choices[i][2].pbIsStatus?
        pri+=1 if @battlers[i].hasWorkingAbility(:GALEWINGS) &&
                  isConst?(@choices[i][2].type,PBTypes,:FLYING)
        [COLOR="red"]pri+=3 if @battlers[i].hasWorkingAbility(:TRIAGE) && 
              @choices[i][2].isHealingMove? &&
              !isConst?(@choices[i][2].id,PBMoves,:AQUARING) &&
              !isConst?(@choices[i][2].id,PBMoves,:GRASSYTERRAIN) &&
              !isConst?(@choices[i][2].id,PBMoves,:INGRAIN) &&
              !isConst?(@choices[i][2].id,PBMoves,:LEECHSEED) &&
              !isConst?(@choices[i][2].id,PBMoves,:PAINSPLIT) &&
              !isConst?(@choices[i][2].id,PBMoves,:PRESENT) &&
              !isConst?(@choices[i][2].id,PBMoves,:POLLENPUFF)[/COLOR]
That's pretty much all about this ability.
 
Ah, I saw now what those items are. Probably tomorrow, you'll have all these abilities.

Edit: so here you have them. Rather than figure out what are my additions, I'll put all that is related to terrains (excepting Z-Moves). So, add only what you don't have from this enormous resource.

All Surges plus seeds, extender, moves and more:
In PBEffects, make sure you have all four effects for the respective terrains:
Spoiler:
Also, in PokeBattle_ActiveSideField:
Spoiler:
In PokeBattle_Battler:
Spoiler:

In PokeBattle_BattlerEffects:
Spoiler:

In PokeBattle_Move:
Spoiler:
In PokeBattle_MoveEffects:
Spoiler:

In PokeBattle_Battle
Spoiler:

Alright so I inserted all the scripts correctly, but after a seed is used in any terrain this error pops up.
Any idea how I can deal with this?


[PokeCommunity.com] All gen 7 abilities
 
Alright so I inserted all the scripts correctly, but after a seed is used in any terrain this error pops up.
Any idea how I can deal with this?


[PokeCommunity.com] All gen 7 abilities

Replace what I´ve mistakenly wrote in the last spoiler of the last spoiler with this:
Code:
# Electric Terrain
    if @field.effects[PBEffects::ElectricTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:ELECTRICSEED)
           user.pbIncreaseStatWithCause(PBStats::DEFENSE,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::ElectricTerrain]-=1
      if @field.effects[PBEffects::ElectricTerrain]==0
        pbDisplay(_INTL("The electric current disappeared from the battlefield."))
        PBDebug.log("[End of effect] Electric Terrain ended")
      end
    end
    # Grassy Terrain
    if @field.effects[PBEffects::GrassyTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:GRASSYSEED)
           user.pbIncreaseStatWithCause(PBStats::DEFENSE,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::GrassyTerrain]-=1
      if @field.effects[PBEffects::GrassyTerrain]==0
        pbDisplay(_INTL("The grass disappeared from the battlefield."))
        PBDebug.log("[End of effect] Grassy Terrain ended")
      end
    end
    # Misty Terrain
    if @field.effects[PBEffects::MistyTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:MISTYSEED)
           user.pbIncreaseStatWithCause(PBStats::SPDEF,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Special Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::MistyTerrain]-=1
      if @field.effects[PBEffects::MistyTerrain]==0
        pbDisplay(_INTL("The mist disappeared from the battlefield."))
        PBDebug.log("[End of effect] Misty Terrain ended")
      end
    end
    # Psychic Terrain
    if @field.effects[PBEffects::PsychicTerrain]>0
      for i in 0...4
         user=user=@battlers[i]
         if user.hasWorkingItem(:PSYCHICSEED)
           user.pbIncreaseStatWithCause(PBStats::SPDEF,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Special Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::PsychicTerrain]-=1
      if @field.effects[PBEffects::PsychicTerrain]==0
        pbDisplay(_INTL("The battlefield returned to its normal state."))
        PBDebug.log("[End of effect] Misty Terrain ended")
      end
    end
 
Replace what I´ve mistakenly wrote in the last spoiler of the last spoiler with this:
Code:
# Electric Terrain
    if @field.effects[PBEffects::ElectricTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:ELECTRICSEED)
           user.pbIncreaseStatWithCause(PBStats::DEFENSE,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::ElectricTerrain]-=1
      if @field.effects[PBEffects::ElectricTerrain]==0
        pbDisplay(_INTL("The electric current disappeared from the battlefield."))
        PBDebug.log("[End of effect] Electric Terrain ended")
      end
    end
    # Grassy Terrain
    if @field.effects[PBEffects::GrassyTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:GRASSYSEED)
           user.pbIncreaseStatWithCause(PBStats::DEFENSE,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::GrassyTerrain]-=1
      if @field.effects[PBEffects::GrassyTerrain]==0
        pbDisplay(_INTL("The grass disappeared from the battlefield."))
        PBDebug.log("[End of effect] Grassy Terrain ended")
      end
    end
    # Misty Terrain
    if @field.effects[PBEffects::MistyTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:MISTYSEED)
           user.pbIncreaseStatWithCause(PBStats::SPDEF,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Special Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::MistyTerrain]-=1
      if @field.effects[PBEffects::MistyTerrain]==0
        pbDisplay(_INTL("The mist disappeared from the battlefield."))
        PBDebug.log("[End of effect] Misty Terrain ended")
      end
    end
    # Psychic Terrain
    if @field.effects[PBEffects::PsychicTerrain]>0
      for i in 0...4
         user=user=@battlers[i]
         if user.hasWorkingItem(:PSYCHICSEED)
           user.pbIncreaseStatWithCause(PBStats::SPDEF,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Special Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
         end
      end
      @field.effects[PBEffects::PsychicTerrain]-=1
      if @field.effects[PBEffects::PsychicTerrain]==0
        pbDisplay(_INTL("The battlefield returned to its normal state."))
        PBDebug.log("[End of effect] Misty Terrain ended")
      end
    end

Awesome! This fixed the error! Thanks for the help.

Also the seeds are supposed to be one time use, but don't get used after giving a boost. So the seeds end up staying throughout the whole battle. Any fix for this?

I even have them set as disappearing after being use in the Items.txt PBS file.
 
Last edited:
Awesome! This fixed the error! Thanks for the help.

Also the seeds are supposed to be one time use, but don't get used after giving a boost. So the seeds end up staying throughout the whole battle. Any fix for this?

I even have them set as disappearing after being use in the Items.txt PBS file.

Ah, overlooked that. Replace, again the same code with this:
Code:
# Electric Terrain
    if @field.effects[PBEffects::ElectricTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:ELECTRICSEED)
           user.pbIncreaseStatWithCause(PBStats::DEFENSE,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
           user.pbConsumeItem
         end
      end
      @field.effects[PBEffects::ElectricTerrain]-=1
      if @field.effects[PBEffects::ElectricTerrain]==0
        pbDisplay(_INTL("The electric current disappeared from the battlefield."))
        PBDebug.log("[End of effect] Electric Terrain ended")
      end
    end
    # Grassy Terrain
    if @field.effects[PBEffects::GrassyTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:GRASSYSEED)
           user.pbIncreaseStatWithCause(PBStats::DEFENSE,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
           user.pbConsumeItem
         end
      end
      @field.effects[PBEffects::GrassyTerrain]-=1
      if @field.effects[PBEffects::GrassyTerrain]==0
        pbDisplay(_INTL("The grass disappeared from the battlefield."))
        PBDebug.log("[End of effect] Grassy Terrain ended")
      end
    end
    # Misty Terrain
    if @field.effects[PBEffects::MistyTerrain]>0
      for i in 0...4
         user=@battlers[i]
         if user.hasWorkingItem(:MISTYSEED)
           user.pbIncreaseStatWithCause(PBStats::SPDEF,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Special Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
           user.pbConsumeItem
         end
      end
      @field.effects[PBEffects::MistyTerrain]-=1
      if @field.effects[PBEffects::MistyTerrain]==0
        pbDisplay(_INTL("The mist disappeared from the battlefield."))
        PBDebug.log("[End of effect] Misty Terrain ended")
      end
    end
    # Psychic Terrain
    if @field.effects[PBEffects::PsychicTerrain]>0
      for i in 0...4
         user=user=@battlers[i]
         if user.hasWorkingItem(:PSYCHICSEED)
           user.pbIncreaseStatWithCause(PBStats::SPDEF,1,user,
           PBItems.getName(user.item))
           pbDisplay(_INTL("{1}'s {2} boosted its Special Defense.",
                                   user.pbThis,PBItems.getName(user.item)))
           user.pbConsumeItem
         end
      end
      @field.effects[PBEffects::PsychicTerrain]-=1
      if @field.effects[PBEffects::PsychicTerrain]==0
        pbDisplay(_INTL("The battlefield returned to its normal state."))
        PBDebug.log("[End of effect] Misty Terrain ended")
      end
    end
 
Can you post: Soul-heart and grass pelt abilities?

That Soul Heart doenst works?
https://www.pokecommunity.com/showpost.php?p=9934995&postcount=89

Also, to Grass Pelt, just check like Marvel Scale works and edit to Grassy Terrain:
in 'PokeBattle_Move', search and add the red lines:
Code:
    if !attacker.hasMoldBreaker
      if opponent.hasWorkingAbility(:MARVELSCALE) &&
         opponent.status>0 && pbIsPhysical?(type)
        defmult=(defmult*1.5).round
      end
[COLOR="Red"]      if opponent.hasWorkingAbility(:GRASSPELT) && 
       @battle.field.effects[PBEffects::GrassyTerrain]>0 && 
       pbIsPhysical?(type) 
        defmult=(defmult*1.5).round
      end[/COLOR]
      if (@battle.pbWeather==PBWeather::SUNNYDAY ||
         @battle.pbWeather==PBWeather::HARSHSUN) && pbIsSpecial?(type)
        if opponent.hasWorkingAbility(:FLOWERGIFT) ||
           opponent.pbPartner.hasWorkingAbility(:FLOWERGIFT)
          defmult=(defmult*1.5).round
        end
      end
    end
 
Last edited:
No, that Soul Heart don't activate when, per example, a pokemon faints due to hail. This is the way I have it:

In PokeBattle_Battler, where is def pbFaint:
Code:
def pbFaint(showMessage=true)
    unless fainted?
      PBDebug.log("!!!***Can't faint with HP greater than 0")
      return true
    end
    if @fainted
#      PBDebug.log("!!!***Can't faint if already fainted")
      return true
    end
    @battle.scene.pbFainted(self)
    pbInitEffects(false)
    # Reset status
    self.status=0
    self.statusCount=0
    if @pokemon && @battle.internalbattle
      @pokemon.changeHappiness("faint")
    end
    @pokemon.makeUnmega if self.isMega?
    @pokemon.makeUnprimal if self.isPrimal?
    @pokemon.makeUnultra if self.isUltra?
    @pokemon.revertOtherForms
    @fainted=true
    # reset choice
    @battle.choices[@index]=[0,0,nil,-1]
    pbOwnSide.effects[PBEffects::LastRoundFainted][email protected]
    @battle.pbDisplayPaused(_INTL("{1} fainted!",pbThis)) if showMessage
    PBDebug.log("[Pokémon fainted] #{pbThis}")
    [COLOR="Red"]# Soul Heart
    for i in 0...4
      [email protected][i]
      if user && user.hasWorkingAbility(:SOULHEART) && !user.fainted?
        if user.pbIncreaseStatWithCause(PBStats::SPATK,1,user,PBAbilities.getName(user.ability))
          PBDebug.log("[Ability triggered] #{user.pbThis}'s Soul Heart")
        end
      end
    end[/COLOR]
    return true
  end

And, with this, my request list is finished. We can conclude that all pokemon abilities are scripted in Essentials. If someone finds an error to these ones, or if you notice that some ability wasn't correctly treated, don't hesitate to report it here.
 
Last edited:
No, that Soul Heart don't activate when, per example, a pokemon faints due to hail. This is the way I have it:

In PokeBattle_Battler, where is def pbFaint:
Code:
def pbFaint(showMessage=true)
    unless fainted?
      PBDebug.log("!!!***Can't faint with HP greater than 0")
      return true
    end
    if @fainted
#      PBDebug.log("!!!***Can't faint if already fainted")
      return true
    end
    @battle.scene.pbFainted(self)
    pbInitEffects(false)
    # Reset status
    self.status=0
    self.statusCount=0
    if @pokemon && @battle.internalbattle
      @pokemon.changeHappiness("faint")
    end
    @pokemon.makeUnmega if self.isMega?
    @pokemon.makeUnprimal if self.isPrimal?
    @pokemon.makeUnultra if self.isUltra?
    @pokemon.revertOtherForms
    @fainted=true
    # reset choice
    @battle.choices[@index]=[0,0,nil,-1]
    pbOwnSide.effects[PBEffects::LastRoundFainted][email protected]
    @battle.pbDisplayPaused(_INTL("{1} fainted!",pbThis)) if showMessage
    PBDebug.log("[Pokémon fainted] #{pbThis}")
    [COLOR="Red"]# Soul Heart
    for i in 0...4
      [email protected][i]
      if user && user.hasWorkingAbility(:SOULHEART) && !user.fainted?
        if user.pbIncreaseStatWithCause(PBStats::SPATK,1,user,PBAbilities.getName(user.ability))
          PBDebug.log("[Ability triggered] #{user.pbThis}'s Soul Heart")
        end
      end
    end[/COLOR]
    return true
  end

And, with this, my request list is finished. We can conclude that all pokemon abilities are scripted in Essentials. If someone finds an error to these ones, or if you notice that some ability wasn't correctly treated, don't hesitate to report it here.

Hmmmm. Can you post your Beast Boost too? Cuz its works when opponent faints too and my script arent in 'pbFaint' like your script to Soul Heart.

PS: When i kill last pokemon (against a trainer), Magearna still get buffs. Can we put your script in a better place? Or make a 'if poketrainer.battler==0 dont buff'?
 
Last edited:
My script for Beast Boost is that of this thread. Soul Heart and Beast Boost are very distinct abilities; I don´t imagine putting them together.

Idk how to verify if a pokemon of an opponent is the last in battle. For a given condition, say isLastPok?(pok) (probably in Battle class), you could put if [email protected]?(self) then `Soul Heart code`.
 
My script for Beast Boost is that of this thread. Soul Heart and Beast Boost are very distinct abilities; I don´t imagine putting them together.

Idk how to verify if a pokemon of an opponent is the last in battle. For a given condition, say isLastPok?(pok) (probably in Battle class), you could put if [email protected]?(self) then `Soul Heart code`.

Do you have the Dancer ability as well? The one I have doesn't seem to work with all Dance moves.
 
Where i can find Surge surfer ability?

EDIT: Nevermind, i just realize that ability within the surges abilities codes.
 
Last edited:
Sorry, I won't post each one of them because, firstly, there are many of the abilities posted here, here, here and here, and, secondly, there is too much work for me now (I believe there are like 40 abilities introduced in gen 7). The purpose of this thread is to post the abilities that weren't previously completely solved by another, but I don't know which are those, so, make a concise request, like WolfPP.



What is written with red is what you should add.

Power of Alchemy and Receiver:
Spoiler:

Unfortunately, its script didnt work for me. Nothing happens. What could be?

EDIT: Done!
In 'PokeBattle_Battler', above 'Intimidate' script, paste:
Spoiler:
 
Last edited:
Stakeout:
Spoiler:


Long Reach (I suggest this one):
Spoiler:


Long Reach (alternative):
Spoiler:

Slush Rush:
Spoiler:

Does the Stakeout ability clash with Wimp Out and Emergency Exit? I did everything as you said and although I don't get any errors, the ability doesn't get triggered. I tested by fighting a trainer with 2 pokémon, one with the Wimp Out ability. It switches to the other pokémon just fine when its HP gets below half but the Stakeout ability doesn't trigger and damage from my pokémon doesn't seem doubled. Is there another way to test this? I don't know how to make a trainer switches out a pokémon by himself.
 
Does the Stakeout ability clash with Wimp Out and Emergency Exit? I did everything as you said and although I don't get any errors, the ability doesn't get triggered. I tested by fighting a trainer with 2 pokémon, one with the Wimp Out ability. It switches to the other pokémon just fine when its HP gets below half but the Stakeout ability doesn't trigger and damage from my pokémon doesn't seem doubled. Is there another way to test this? I don't know how to make a trainer switches out a pokémon by himself.

What script do you have?

I did install that script
 
Quick question. I remember you saying that you have a disguise script that breaks after it gets hit by the first hit of a multihit attack. Could you post your Disguise script? Also if possible could you post your Battle Bond script as well, so it would be compatible with your Power Construct script?

Did you check here?
 
Did you check here?

Yeah I did, but mybusiness said that he has a different disguise script that breaks after the first hit of a multihit attack, unlike the one the one in that thread. I feel like the one mybusiness has is more balanced.
 
Back
Top