• 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.
  • Dawn, Gloria, Juliana, or Summer - which Pokémon protagonist is your favorite? Let us know by voting in our poll!
  • Our friends from the Johto Times are hosting a favorite Pokémon poll - and we'd love for you to participate! Click here for information on how to vote for your favorites!
  • 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.

Forcing a trainer to use a specific last pokémon

KillerMapper

Helix Follower
  • 184
    Posts
    10
    Years
    Hello !

    I would like to know if it's possible to force a trainer (in my case, a gym leader, with better AI than regular trainers) to use a specific pokémon of his team as his last pokémon. I would like to have the strongest pokémon (which have custom IVs, movesets...) at the end of the battle, but the trainer will use it before the other (and less powerful) pokémons if the players use a strong pokémon.

    Does PE have an option for that, or does it need some scripting anywhere ?

    Thanks.
     
    In Pokebattle around 3990

    override

    Code:
      def pbDefaultChooseNewEnemy(index,party)
        enemies=[]
        for i in 0..party.length-1
          if pbCanSwitchLax?(index,i,false)
            enemies.push(i)
          end
        end
        if enemies.length>0
          return pbChooseBestNewEnemy(index,party,enemies)
        end
        return -1
      end
    with (XXX - your switch ID; this is untested)

    Code:
      def pbDefaultChooseNewEnemy(index,party)
        enemies=[]
        length = party.length-1
        for i in 0..length
            if pbCanSwitchLax?(index,i,false)
                if i == length && $game_switches[xxx]
                    if  enemies.length == 0
                        enemies.push(i)
                    end
                else
                    enemies.push(i)
                end
            end
        end
        if enemies.length>0
          return pbChooseBestNewEnemy(index,party,enemies)
        end
        return -1
      end
     
    Last edited:
    Thanks, it's working !

    Do you think it's possible to let the trainer choose the best pokémon except for the last one ?
     
    It actually does that. (It calls pbChooseBestNewEnemy)

    If you are not satisfied with the criteria, you have to work with the function.

    It is around line ~4000

    Code:
      def pbChooseBestNewEnemy(index,party,enemies)
        return -1 if !enemies || enemies.length==0
        $PokemonTemp=PokemonTemp.new if !$PokemonTemp
        o1=@battlers[index].pbOpposing1
        o2=@battlers[index].pbOpposing2
        o1=nil if o1 && o1.isFainted?
        o2=nil if o2 && o2.isFainted?
        best=-1
        bestSum=0
        for e in enemies
          pkmn=party[e]
          sum=0
          for move in pkmn.moves
            next if move.id==0
            md=PBMoveData.new(move.id)
            next if md.basedamage==0
            if o1
              sum+=PBTypes.getCombinedEffectiveness(md.type,o1.type1,o1.type2)
            end
            if o2
              sum+=PBTypes.getCombinedEffectiveness(md.type,o2.type1,o2.type2)
            end
          end
          if best==-1 || sum>bestSum
            best=e
            bestSum=sum
          end
        end
        return best
      end

    Things you could work around with:
    -Pokemon base stats, expecting type damage
    -Pokemon defensive capabilities (physical, spezial, KP)

    "known" moves (this could be tricky, if you don't want to cheat)
     
    I needed this to, I'm going to try it.
    Also is there a way to get the opponent to show his sprite when he sends out said last Pokemon, just like it does in the games? Like for example when you face Galactic Boss Cyrus in Platinum, when he sends out his last Pokemon his sprite pops out for a second and he says, "I admit you have pushed me to this extreme."
     
    Ok. Trainer just used the order defined in the txt, maybe I wasn't lucky. I'll try more battles then. Thanks for your help.
     
    In Pokebattle around 3990

    override

    Code:
      def pbDefaultChooseNewEnemy(index,party)
        enemies=[]
        for i in 0..party.length-1
          if pbCanSwitchLax?(index,i,false)
            enemies.push(i)
          end
        end
        if enemies.length>0
          return pbChooseBestNewEnemy(index,party,enemies)
        end
        return -1
      end
    with (XXX - your switch ID; this is untested)

    Code:
      def pbDefaultChooseNewEnemy(index,party)
        enemies=[]
        length = party.length-1
        for i in 0..length
            if pbCanSwitchLax?(index,i,false)
                if i == length && $game_switches[xxx]
                    if  enemies.length == 0
                        enemies.push(i)
                    end
                else
                    enemies.push(i)
                end
            end
        end
        if enemies.length>0
          return pbChooseBestNewEnemy(index,party,enemies)
        end
        return -1
      end

    Sorry for asking.
    How should i define the ID and how do I use it in the Event?
     
    Back
    Top