• 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

WolfPP

Spriter/ Pixel Artist
1,309
Posts
5
Years
  • 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?
     

    mybusiness

    Guest
    0
    Posts
    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.
     

    Juno and Ice

    Developer of Pokémon Floral Tempus
    150
    Posts
    5
    Years
    • Seen Apr 30, 2024
    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?


    unknown.png
     

    mybusiness

    Guest
    0
    Posts
    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?


    unknown.png

    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
     

    Juno and Ice

    Developer of Pokémon Floral Tempus
    150
    Posts
    5
    Years
    • Seen Apr 30, 2024
    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:

    mybusiness

    Guest
    0
    Posts
    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
     

    WolfPP

    Spriter/ Pixel Artist
    1,309
    Posts
    5
    Years
  • 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:

    mybusiness

    Guest
    0
    Posts
    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:

    WolfPP

    Spriter/ Pixel Artist
    1,309
    Posts
    5
    Years
  • 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:

    mybusiness

    Guest
    0
    Posts
    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`.
     

    Juno and Ice

    Developer of Pokémon Floral Tempus
    150
    Posts
    5
    Years
    • Seen Apr 30, 2024
    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.
     
    220
    Posts
    9
    Years
  • Where i can find Surge surfer ability?

    EDIT: Nevermind, i just realize that ability within the surges abilities codes.
     
    Last edited:

    WolfPP

    Spriter/ Pixel Artist
    1,309
    Posts
    5
    Years
  • 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:
    43
    Posts
    6
    Years
    • Seen Sep 23, 2023
    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.
     

    WolfPP

    Spriter/ Pixel Artist
    1,309
    Posts
    5
    Years
  • 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
     

    Juno and Ice

    Developer of Pokémon Floral Tempus
    150
    Posts
    5
    Years
    • Seen Apr 30, 2024

    WolfPP

    Spriter/ Pixel Artist
    1,309
    Posts
    5
    Years
  • 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?
     

    Juno and Ice

    Developer of Pokémon Floral Tempus
    150
    Posts
    5
    Years
    • Seen Apr 30, 2024
    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