• 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.

Project: Generation 6 for Pokémon Essentials (Pokémon sprites and PBS files)

Boonzeet

Pokémon Secrets of the Ages Developer
188
Posts
15
Years
  • "Various PBS File Updates, Stochastic, Mar 16, 2014"

    The link has been broken for a while, does anyone have the fixed link?
     

    Destiny.

    The Absol Master
    163
    Posts
    14
    Years
    • Seen Oct 31, 2019
    Where are you putting it in the script? I've had the same problem a few times and sometimes it was placement.

    EDIT: Got home and tried it out and am having the same problem. I'll let you know if I get it to work right.
    Gale Wings works fine if you remove the typing constraint :s I suspect it doesn't work correctly because typing or something hasn't been defined by that stage in the script.
     
    95
    Posts
    9
    Years
    • Seen Jun 18, 2016
    I don't know if this has been posted yet, i looked and didn't find anything, so i'll just post the code i used for Strong Jaw (the signature ability of Tyrunt and Tyrantrum):

    Code:
    strongjawMoves=[PBMoves::CRUNCH,PBMoves::BITE,PBMoves::FIREFANG,
             PBMoves::ICEFANG,PBMoves::THUNDERFANG,PBMoves::POISONFANG]
          
          if isConst?(opponent.ability,PBAbilities,:STRONGJAW) && strongjawMoves.include?(@id)
            basedmg=(basedmg*1.5).floor
             end

    The ability defined in the PBS:

    Code:
    XXX,STRONGJAW,Strong jaw,"Powers up jaw moves."

    You have to change the XXX for the next ID number in your file.

    It should work, but i'm not 100% sure :-P
     
    148
    Posts
    11
    Years
  • I don't know if this has been posted yet, i looked and didn't find anything, so i'll just post the code i used for Strong Jaw (the signature ability of Tyrunt and Tyrantrum):

    Code:
    strongjawMoves=[PBMoves::CRUNCH,PBMoves::BITE,PBMoves::FIREFANG,
             PBMoves::ICEFANG,PBMoves::THUNDERFANG,PBMoves::POISONFANG]
          
          if isConst?(opponent.ability,PBAbilities,:STRONGJAW) && strongjawMoves.include?(@id)
            basedmg=(basedmg*1.5).floor
             end

    The ability defined in the PBS:

    Code:
    XXX,STRONGJAW,Strong jaw,"Powers up jaw moves."

    You have to change the XXX for the next ID number in your file.

    It should work, but i'm not 100% sure :-P

    I'm fairly new to scripting, haven't seen a ability code done like that before.
    could have just used a flag to tell which moves got boosted ^__^

    Code:
    if isConst?(attacker.ability,PBAbilities,:STRONGJAW) &&
           (@flags&0x1000)!=0 # flag m
          basedmg=(basedmg*1.5).floor
        end

    Where did you place that in the scripts? Just curious in case I make an ability using it as a template.
     
    95
    Posts
    9
    Years
    • Seen Jun 18, 2016
    I'm fairly new to scripting, haven't seen a ability code done like that before.
    could have just used a flag to tell which moves got boosted ^__^

    Code:
    if isConst?(attacker.ability,PBAbilities,:STRONGJAW) &&
           (@flags&0x1000)!=0 # flag m
          basedmg=(basedmg*1.5).floor
        end

    Where did you place that in the scripts? Just curious in case I make an ability using it as a template.

    I have all the new abilities (Pixilate, Aerilate, Megalauncher, etc.) right under Minus/Plus.

    I didn't know there was a flag for the biting moves, so i didn't do it with the flag xD. I'm also fairly new to scripting, haha.
     
    148
    Posts
    11
    Years
  • I have all the new abilities (Pixilate, Aerilate, Megalauncher, etc.) right under Minus/Plus.

    I didn't know there was a flag for the biting moves, so i didn't do it with the flag xD. I'm also fairly new to scripting, haha.

    Flags M,N,O.and P are unused. You can use them for whatever you want. Although, your way would probably be better for something like Strong Jaw.
     

    Maruno

    Lead Dev of Pokémon Essentials
    5,286
    Posts
    16
    Years
    • Seen May 3, 2024
    Either way is fine.

    Making a new flag and giving it to biting moves makes the ability a bit easier to add new moves for, since it's easier to add the flag to new biting moves in moves.txt than it is to know that you need to edit an array somewhere in the scripts. It also avoids crashes in the event that one of the biting moves in the array doesn't actually exist in the game (but that's unlikely).

    On the other hand, there are only four unused flags available, which you might want to use for other things. There are only a handful of biting moves, so it's easy enough to just list them all in an array. You seriously don't want to try telling people how to make changes to many scripts just so that you can add a few new move flags.
     
    1,224
    Posts
    10
    Years
  • I tried to do it in a way that avoids the use of flags. I basically just created a few new move effect classes that are copies of the moves affected by Strong Jaw (there's like 6, so this didn't take long), and changed those said moves to use these copied classes.
    Then all I needed was
    Code:
      if isConst?(attacker.ability,PBAbilities,:STRONGJAW)
           if @function==0x156 || #bite
              @function==0x157 || #crunch
              @function==0x158 || #thunderfang
              @function==0x159 || #firefang
              @function==0x160 || #icefang
              @function==0x161     #poisonfang
              basedmg=(basedmg*1.333).floor
          end
       end
     

    PinkCatDragon

    The 17 year old programer. Now byte off
    388
    Posts
    14
    Years
  • Here is a fixed form of fairy aura and dark aura
    Code:
        fairyaura=false
        darkaura=false
        aurabreak=false
        if isConst?(attacker.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        partner=attacker.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        if isConst?(opponent.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        partner=opponent.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        if isConst?(attacker.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        partner=attacker.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        if isConst?(opponent.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        partner=opponent.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        if fairyaura==true && type==getConst(PBTypes,:FAIRY)
          boost=1
          if aurabreak==true
            boost-=0.333
          else
            boost+=0.333
          end
          basedmg=(basedmg*boost).floor
        end
        if darkaura==true && type==getConst(PBTypes,:DARK)
          boost=1
          if aurabreak==true
            boost-=0.333
          else
            boost+=0.333
          end
          basedmg=(basedmg*boost).floor
        end
    It now work for all pokemon
     
    1,224
    Posts
    10
    Years
  • Here is a fixed form of fairy aura and dark aura
    Code:
        fairyaura=false
        darkaura=false
        aurabreak=false
        if isConst?(attacker.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        partner=attacker.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        if isConst?(opponent.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        partner=opponent.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:FARIYAURA)
          fairyaura=true
        end
        if isConst?(attacker.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        partner=attacker.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        if isConst?(opponent.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        partner=opponent.pbPartner
        if partner && isConst?(partner.ability,PBAbilities,:DARKAURA)
          darkaura=true
        end
        if fairyaura==true && type==getConst(PBTypes,:FAIRY)
          boost=1
          if aurabreak==true
            boost-=0.333
          else
            boost+=0.333
          end
          basedmg=(basedmg*boost).floor
        end
        if darkaura==true && type==getConst(PBTypes,:DARK)
          boost=1
          if aurabreak==true
            boost-=0.333
          else
            boost+=0.333
          end
          basedmg=(basedmg*boost).floor
        end
    It now work for all pokemon

    A more condensed version
    Code:
    if  ((isConst?(attacker.ability,PBAbilities,:FAIRYAURA)  || isConst?(attacker.pbPartner.ability,PBAbilities,:FAIRYAURA) || isConst?(opponent.ability,PBAbilities,:FAIRYAURA) || isConst?(opponent.pbPartner.ability,PBAbilities,:FAIRYAURA)) && isConst?(type,PBTypes,:FAIRY)) ||
         ((isConst?(attacker.ability,PBAbilities,:DARKAURA) || isConst?(attacker.pbPartner.ability,PBAbilities,:DARKAURA) || isConst?(opponent.ability,PBAbilities,:DARKAURA) || isConst?(opponent.pbPartner.ability,PBAbilities,:DARKAURA)) && isConst?(type,PBTypes,:DARK))
        if isConst?(attacker.ability,PBAbilities,:AURABREAK) || isConst?(attacker.pbPartner.ability,PBAbilities,:AURABREAK) || isConst?(opponent.ability,PBAbilities,:AURABREAK) || isConst?(opponent.pbPartner.ability,PBAbilities,:AURABREAK)
        basedmg=((basedmg*2)/3).floor
        else
        basedmg=((basedmg*4)/3).floor
        end
         end
     

    PinkCatDragon

    The 17 year old programer. Now byte off
    388
    Posts
    14
    Years
  • A more condensed version
    Code:
    if  ((isConst?(attacker.ability,PBAbilities,:FAIRYAURA)  || isConst?(attacker.pbPartner.ability,PBAbilities,:FAIRYAURA) || isConst?(opponent.ability,PBAbilities,:FAIRYAURA) || isConst?(opponent.pbPartner.ability,PBAbilities,:FAIRYAURA)) && isConst?(type,PBTypes,:FAIRY)) ||
         ((isConst?(attacker.ability,PBAbilities,:DARKAURA) || isConst?(attacker.pbPartner.ability,PBAbilities,:DARKAURA) || isConst?(opponent.ability,PBAbilities,:DARKAURA) || isConst?(opponent.pbPartner.ability,PBAbilities,:DARKAURA)) && isConst?(type,PBTypes,:DARK))
        if isConst?(attacker.ability,PBAbilities,:AURABREAK) || isConst?(attacker.pbPartner.ability,PBAbilities,:AURABREAK) || isConst?(opponent.ability,PBAbilities,:AURABREAK) || isConst?(opponent.pbPartner.ability,PBAbilities,:AURABREAK)
        basedmg=((basedmg*2)/3).floor
        else
        basedmg=((basedmg*4)/3).floor
        end
         end
    ty i was wonder how i could make it smaller
     

    Maruno

    Lead Dev of Pokémon Essentials
    5,286
    Posts
    16
    Years
    • Seen May 3, 2024
    An even more condensed version:

    Code:
    if (pbCheckGlobalAbility(:FAIRYAURA) && isConst?(type,PBTypes,:FAIRY)) ||
       (pbCheckGlobalAbility(:DARKAURA) && isConst?(type,PBTypes,:DARK))
      if pbCheckGlobalAbility(:AURABREAK)
        basedmg=(basedmg*2/3).floor
      else
        basedmg=(basedmg*4/3).floor
      end
    end
     

    PinkCatDragon

    The 17 year old programer. Now byte off
    388
    Posts
    14
    Years
  • An even more condensed version:

    Code:
    if (pbCheckGlobalAbility(:FAIRYAURA) && isConst?(type,PBTypes,:FAIRY)) ||
       (pbCheckGlobalAbility(:DARKAURA) && isConst?(type,PBTypes,:DARK))
      if pbCheckGlobalAbility(:AURABREAK)
        basedmg=(basedmg*2/3).floor
      else
        basedmg=(basedmg*4/3).floor
      end
    end
    ty i didnt know there was a pbcheckglobalAbilty func
    ill remember that
     
    20
    Posts
    10
    Years
    • Seen Jul 16, 2015
    Thanks a lot for what you guys have done up to now!
    I am also constructing my own project and want to update the G6 elements in my game as well.
    This add-on project really gave me a great hand!
    I should thank all of you second time!

    Here is a question about how to script ability "Pixilate":
    In the ability list above, there are two different scripts about "Pixilate"
    Should I add both of them in the ess script or only one I need to add ?
    Also I donnot know where to put these scripts.
    I put the first script after:
    def pbType(type,attacker,opponent)
    if type>=0 && isConst?(attacker.ability,PBAbilities,:NORMALIZE)
    type=getConst(PBTypes,:NORMAL) || 0
    end
    it did work and turn normal moves to fairy type but how about basedamage*1.3?Where should I add this script?
     
    95
    Posts
    9
    Years
    • Seen Jun 18, 2016
    Thanks a lot for what you guys have done up to now!
    I am also constructing my own project and want to update the G6 elements in my game as well.
    This add-on project really gave me a great hand!
    I should thank all of you second time!

    Here is a question about how to script ability "Pixilate":
    In the ability list above, there are two different scripts about "Pixilate"
    Should I add both of them in the ess script or only one I need to add ?
    Also I donnot know where to put these scripts.
    I put the first script after:
    def pbType(type,attacker,opponent)
    if type>=0 && isConst?(attacker.ability,PBAbilities,:NORMALIZE)
    type=getConst(PBTypes,:NORMAL) || 0
    end
    it did work and turn normal moves to fairy type but how about basedamage*1.3?Where should I add this script?

    I have the Pixilate code right under Minus/Plus. Your code should be something like this:

    Code:
    if isConst?(type,PBTypes,:NORMAL) && isConst?(attacker.ability,PBAbilities,:PIXILATE)
          type=PBTypes::FAIRY
          [COLOR="Red"]basedmg=(basedmg*1.33).floor[/COLOR]
        end

    I suppose that the red part is what you are missing.
     
    20
    Posts
    10
    Years
    • Seen Jul 16, 2015
    I have the Pixilate code right under Minus/Plus. Your code should be something like this:

    Code:
    if isConst?(type,PBTypes,:NORMAL) && isConst?(attacker.ability,PBAbilities,:PIXILATE)
          type=PBTypes::FAIRY
          [COLOR="Red"]basedmg=(basedmg*1.33).floor[/COLOR]
        end

    I suppose that the red part is what you are missing.

    Thanks for your reply!
    I did as you taught me just now and test several times.
    I made mega GARDEVOIR(lv23) attack HYDREIGON(lv35) , use move HYPERVOICE, the HYDREIGON was still alive
    when i changed the figure 1.33 to 133 , it emerged the same result
    does it mean this script does not work at all?
    Waiting your answer!

    As I know, HYPERVOICE(90*1.3*1.5=163.8,when attack HYDREIGON the result will *4
    it should be killed
     
    95
    Posts
    9
    Years
    • Seen Jun 18, 2016
    Thanks for your reply!
    I did as you taught me just now and test several times.
    I made mega GARDEVOIR(lv23) attack HYDREIGON(lv35) , use move HYPERVOICE, the HYDREIGON was still alive
    when i changed the figure 1.33 to 133 , it emerged the same result
    does it mean this script does not work at all?
    Waiting your answer!

    As I know, HYPERVOICE(90*1.3*1.5=163.8,when attack HYDREIGON the result will *4
    it should be killed

    Maybe it's not about the script. You could make a trainer battle against someone with a M-Gardevoir, give him the stats you want and only the move Hyper voice, and then you can see if it works or not by the damage it deals to you.

    You can also compare the damage by removing this line: basedmg=(basedmg*1.33).floor, doing a move against the Hydreigon, and then putting the line again and doing another move against Hydreigon. This way you can see if there is a damage difference.

    Also, remember that if it's a wild Pokémon battle, the nature isn't always the same, so you may want to create a trainer battle with a defined nature (because it's not the same fighting against a Calm Hydreigon or a Rash Hydreigon)
     
    20
    Posts
    10
    Years
    • Seen Jul 16, 2015
    Maybe it's not about the script. You could make a trainer battle against someone with a M-Gardevoir, give him the stats you want and only the move Hyper voice, and then you can see if it works or not by the damage it deals to you.

    You can also compare the damage by removing this line: basedmg=(basedmg*1.33).floor, doing a move against the Hydreigon, and then putting the line again and doing another move against Hydreigon. This way you can see if there is a damage difference.

    Also, remember that if it's a wild Pokémon battle, the nature isn't always the same, so you may want to create a trainer battle with a defined nature (because it's not the same fighting against a Calm Hydreigon or a Rash Hydreigon)

    I'm sure i did everything you told me and you can try if you change 1.33 to 133 , the damage doesn't change at all
     
    Back
    Top