Resource icon

Wild Pokemon you can't catch

Introduction + Code


Wild Pokemon you can't catch are a pretty novel concept, and can make for an interesting story experience; for example, it can be partially involved with recreating the Totem Pokemon Battles from Sun and Moon! The tutorial itself is rather simple to work with, so lets dive right into it! I've isolated the code itself from all the additional flavor I've made for this, so if you just want the code, you don't need to leave this tab at all.

First things first, we're gonna have to move PokeBattle_Battle When you're there, do a search for this bit of code:
Code:
    if @opponent && (!pbIsSnagBall?(ball) || !battler.isShadow?)
      @scene.pbThrowAndDeflect(ball,1)
      pbDisplay(_INTL("The Trainer blocked the Ball!\nDon't be a thief!"))
    else
Right after the else, we're going to insert this chunk of code:
Code:
     if $game_switches[xxx] # Pokemon can't be caught switch
       pbDisplay(_INTL("It dodged the thrown Ball! It looks like it's refusing to be caught! We have to knock it out!"))
       return
     end

As you can see, we make use of a global switch to determine whether or not this Pokemon can be caught. This switch is important to remember and i really should have made it an option in settings but i digress, so make sure you create the relevant switch!


Flavor Edits


So, you want a little more. That's cool, so did I. That's why I made more. The following changes make it so that it displays strings for the special type of encounter.

First off, go to PokeBattle_Battler and search for the following bit of code (which should be around line 548 in an unmodified Essentials 16.2)
Code:
################################################################################
# About this battler
################################################################################
  def pbThis(lowercase=false)
    if @battle.pbIsOpposing?(@index)
      if @battle.opponent
        return lowercase ? _INTL("the opposing {1}",self.name) : _INTL("The opposing {1}",self.name)
      else
        return lowercase ? _INTL("the wild {1}",self.name) : _INTL("The wild {1}",self.name)
      end
    elsif @battle.pbOwnedByPlayer?(@index)
      return _INTL("{1}",self.name)
    else
      return lowercase ? _INTL("the ally {1}",self.name) : _INTL("The ally {1}",self.name)
    end
  end

We're going to modify it so that it has another option to display. For this example, we're going to refer to them as "Territorial Battles"- Pokemon you can't catch, but can still fight. Take the code we just found, and go to where it says if @battle.opponent. Make that if statement an "elsif", and above it paste the following lines:
Code:
if $game_switches[xxx] # Territorial Battles
        return lowercase ? _INTL("the territorial {1}",self.name) : _INTL("The territorial {1}",self.name)

Next up, go back to PokeBattle_Battle and do a search for this:
Code:
  # Only used for Wish
  def pbThisEx(battlerindex,pokemonindex)
    party=pbParty(battlerindex)
    if pbIsOpposing?(battlerindex)
      if @opponent
        return _INTL("The foe {1}",party[pokemonindex].name)
      else
        return _INTL("The wild {1}",party[pokemonindex].name)
      end
    else
      return _INTL("{1}",party[pokemonindex].name)
    end
  end

Like the above examples, we're going to insert the relevant code into this. Make the if @opponent into an elsif statement, and then above that paste the following:
Code:
      if $game_switches[xxx]
        return _INTL("The territorial {1}",party[pokemonindex].name)

The next change will require you to search for:
Code:
#========================
# Initialize wild Pokémon
#========================
    if !@opponent
      if @party2.length==1
        if @doublebattle
          raise _INTL("Only two wild Pokémon are allowed in double battles")
        end
        wildpoke=@party2[0]
        @battlers[1].pbInitialize(wildpoke,0,false)
        @peer.pbOnEnteringBattle(self,wildpoke)
        pbSetSeen(wildpoke)
        @scene.pbStartBattle(self)
        pbDisplayPaused(_INTL("Wild {1} appeared!",wildpoke.name))
      elsif @party2.length==2
        if !@doublebattle
          raise _INTL("Only one wild Pokémon is allowed in single battles")
        end
        @battlers[1].pbInitialize(@party2[0],0,false)
        @battlers[3].pbInitialize(@party2[1],0,false)
        @peer.pbOnEnteringBattle(self,@party2[0])
        @peer.pbOnEnteringBattle(self,@party2[1])
        pbSetSeen(@party2[0])
        pbSetSeen(@party2[1])
        @scene.pbStartBattle(self)
        pbDisplayPaused(_INTL("Wild {1} and\r\n{2} appeared!",
           @party2[0].name,@party2[1].name))
      else
        raise _INTL("Only one or two wild Pokémon are allowed")
      end

Look for the following line,
Code:
pbDisplayPaused(_INTL("Wild {1} appeared!",wildpoke.name))

And replace it with:
Code:
        if $game_switches[xxx]
          pbDisplayPaused(_INTL("The territorial {1} attacked!",wildpoke.name))
        else
        pbDisplayPaused(_INTL("Wild {1} appeared!",wildpoke.name))       
        end[code]

In that same chunk of code, do the same to this line,
[code]        pbDisplayPaused(_INTL("Wild {1} and\r\n{2} appeared!",
           @party2[0].name,@party2[1].name))

And replace it with:
Code:
        if $game_switches[xxx]
          pbDisplayPaused(_INTL("The territorial {1} and\r\n{2} attacked!",
           @party2[0].name,@party2[1].name))
        else
        pbDisplayPaused(_INTL("Wild {1} and\r\n{2} appeared!",
           @party2[0].name,@party2[1].name))
        end

And that should be all the flavor! A video of what it looks like can be seen here:
Credits
I'm not going to ask for credit here because I can't remember if I came up with it myself or not. I was inspired by someone's Ghost code though, I think. So give credit to Desbrina tbh.
Author
DerxwnaKapsyla
Views
132
First release
Last update
Rating
0.00 star(s) 0 ratings

More resources from DerxwnaKapsyla

Top