• 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!
  • Dawn, Gloria, Juliana, or Summer - which Pokémon protagonist is your favorite? Let us know by voting in our poll!
  • 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.

[Scripting Question] Custom features pt. 2

What is a better name for the Phoenix Down?

  • Revival Candy

    Votes: 0 0.0%
  • Comeback Wing

    Votes: 0 0.0%

  • Total voters
    6

HeroesFightingFear

"The Champion of Alon"
  • 99
    Posts
    5
    Years
    I had an idea for a variant of the Rare Candy called a Phoenix Down (not-so-subtle reference, I know) that levels up a Pokemon when it revives them. How would I code it in without breaking the game?
     
    Disclaimer, I only tested a little bit. It's basically just a merge of Max Revive and Rare Candy, with the Rare Candy's evolve stuff stripped out in the battle version

    It doesn't level up if the mon is not fainted and it doesn't revive if it's a max level mon.

    Code:
    ItemHandlers::UseOnPokemon.add(:HOOHDOWN,proc{|item,pokemon,scene|
       if pokemon.hp>0
         scene.pbDisplay(_INTL("It won't have any effect."))
         next false
       elsif pokemon.level>=PBExperience::MAXLEVEL || (pokemon.isShadow? rescue false)
         scene.pbDisplay(_INTL("It won't have any effect."))
         next false
       else
         pokemon.healHP
         pokemon.healStatus
         pbChangeLevel(pokemon,pokemon.level+1,scene)
         scene.pbHardRefresh
         scene.pbDisplay(_INTL("{1}'s HP was restored.",pokemon.name))
         next true
       end
    })

    Code:
    ItemHandlers::BattleUseOnPokemon.add(:HOOHDOWN,proc{|item,pokemon,battler,scene|
       if pokemon.hp>0
         scene.pbDisplay(_INTL("It won't have any effect."))
         next false
       elsif pokemon.level>=PBExperience::MAXLEVEL || (pokemon.isShadow? rescue false)
         scene.pbDisplay(_INTL("It won't have any effect."))
         next false
       else
         pokemon.healHP
         pokemon.healStatus
         pbChangeLevelNoEvo(pokemon,pokemon.level+1,scene)
         for i in 0...$Trainer.party.length
           if $Trainer.party[i]==pokemon
             battler.pbInitialize(pokemon,i,false) if battler
             break
           end
         end
         scene.pbRefresh
         scene.pbDisplay(_INTL("{1}'s HP was restored.",pokemon.name))
         next true
       end
    })

    Code:
    def pbChangeLevelNoEvo(pokemon,newlevel,scene)
      newlevel=1 if newlevel<1
      newlevel=PBExperience::MAXLEVEL if newlevel>PBExperience::MAXLEVEL
      if pokemon.level>newlevel
        attackdiff=pokemon.attack
        defensediff=pokemon.defense
        speeddiff=pokemon.speed
        spatkdiff=pokemon.spatk
        spdefdiff=pokemon.spdef
        totalhpdiff=pokemon.totalhp
        pokemon.level=newlevel
        pokemon.calcStats
        scene.pbRefresh
        Kernel.pbMessage(_INTL("{1} was downgraded to Level {2}!",pokemon.name,pokemon.level))
        attackdiff=pokemon.attack-attackdiff
        defensediff=pokemon.defense-defensediff
        speeddiff=pokemon.speed-speeddiff
        spatkdiff=pokemon.spatk-spatkdiff
        spdefdiff=pokemon.spdef-spdefdiff
        totalhpdiff=pokemon.totalhp-totalhpdiff
        pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
           totalhpdiff,attackdiff,defensediff,spatkdiff,spdefdiff,speeddiff))
        pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
           pokemon.totalhp,pokemon.attack,pokemon.defense,pokemon.spatk,pokemon.spdef,pokemon.speed))
      elsif pokemon.level==newlevel
        Kernel.pbMessage(_INTL("{1}'s level remained unchanged.",pokemon.name))
      else
        attackdiff=pokemon.attack
        defensediff=pokemon.defense
        speeddiff=pokemon.speed
        spatkdiff=pokemon.spatk
        spdefdiff=pokemon.spdef
        totalhpdiff=pokemon.totalhp
        oldlevel=pokemon.level
        pokemon.level=newlevel
        pokemon.changeHappiness("levelup")
        pokemon.calcStats
        scene.pbRefresh
        Kernel.pbMessage(_INTL("{1} was elevated to Level {2}!",pokemon.name,pokemon.level))
        attackdiff=pokemon.attack-attackdiff
        defensediff=pokemon.defense-defensediff
        speeddiff=pokemon.speed-speeddiff
        spatkdiff=pokemon.spatk-spatkdiff
        spdefdiff=pokemon.spdef-spdefdiff
        totalhpdiff=pokemon.totalhp-totalhpdiff
        pbTopRightWindow(_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
           totalhpdiff,attackdiff,defensediff,spatkdiff,spdefdiff,speeddiff))
        pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
           pokemon.totalhp,pokemon.attack,pokemon.defense,pokemon.spatk,pokemon.spdef,pokemon.speed))
        movelist=pokemon.getMoveList
        for i in movelist
          if i[0]==pokemon.level          # Learned a new move
            pbLearnMove(pokemon,i[1],true)
          end
        end
      end
    end
     
    it works great, thanks
     
    Back
    Top