• 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?".
  • Staff applications for our PokéCommunity Daily and Social Media team are now open! Interested in joining staff? Then click here for more info!
  • 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.

Follow Script addition

Every once in a while I get this error after talking to the following Pokemon.
It's doesn't happen enough to make the script unplayable but it sure is annoying. :(
Any ideas on how to fix it?

By the way, bravo for getting this awesome script to work this is pretty much the only error I found. I even Fixed the sprite not updating after the first pokemon in your party evolved. But that was an easy fix.

---------------------------
Pokemon Essentials
---------------------------
Exception: NoMethodError

Message: undefined method `unlock' for nil:NilClass

Interpreter:512:in `command_end'

Interpreter:295:in `execute_command'

Interpreter:193:in `update'

Interpreter:106:in `loop'

Interpreter:198:in `update'

Scene_Map:103:in `update'

Scene_Map:101:in `loop'

Scene_Map:114:in `update'

Scene_Map:68:in `main'

Scene_Map:65:in `loop'
 
Every once in a while I get this error after talking to the following Pokemon.
It's doesn't happen enough to make the script unplayable but it sure is annoying. :(
Any ideas on how to fix it?

By the way, bravo for getting this awesome script to work this is pretty much the only error I found. I even Fixed the sprite not updating after the first pokemon in your party evolved. But that was an easy fix.

---------------------------
Pokemon Essentials
---------------------------
Exception: NoMethodError

Message: undefined method `unlock' for nil:NilClass

Interpreter:512:in `command_end'

Interpreter:295:in `execute_command'

Interpreter:193:in `update'

Interpreter:106:in `loop'

Interpreter:198:in `update'

Scene_Map:103:in `update'

Scene_Map:101:in `loop'

Scene_Map:114:in `update'

Scene_Map:68:in `main'

Scene_Map:65:in `loop'



in Interperter line 512:

Code:
$game_map.events[@event_id].unlock

change to

Code:
#$game_map.events[@event_id].unlock

in witch script and line do you update to fix the evolution thing,
 
To update the sprite after an evolution,

In PokemonEvolution

Change this:
def pbEndScreen
Kernel.pbDisposeMessageWindow(@sprites["msgwindow"])
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@viewport.dispose
end

To this:
def pbEndScreen
Kernel.pbDisposeMessageWindow(@sprites["msgwindow"])
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@viewport.dispose
$PokemonTemp.dependentEvents.refresh_sprite
end

See? Told ya it was easy. :3
I'm not sure if this is the best way to do this, but it does the job.

Yay! I'm pretty sure the previous error I posted about is completely fixed now! Thank you! :D
 
Last edited:
To update the sprite after an evolution,

In PokemonEvolution

Change this:
def pbEndScreen
Kernel.pbDisposeMessageWindow(@sprites["msgwindow"])
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@viewport.dispose
end

To this:
def pbEndScreen
Kernel.pbDisposeMessageWindow(@sprites["msgwindow"])
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@viewport.dispose
$PokemonTemp.dependentEvents.refresh_sprite
end

See? Told ya it was easy. :3
I'm not sure if this is the best way to do this, but it does the job.

Yay! I'm pretty sure the previous error I posted about is completely fixed now! Thank you! :D

It is the way to do it, I forgot to list it in the guide lol.
 
Well then. Lol :D Hey I still can't get B/W pokemon to follow maybe it's just to many for the script/RMXP maker to hold. I finished the sprites and what not but they don't show.

They all work for me including the shiny ones, how have you got them named in your graphics folder.if its 495 and 495s it should work.
also are you adding the b/w first or changing to them in the debug menu
if your going to them in the debug menu you need to refrsh the dependint event for them to show.

sorry if you already know this just trying to figger it out myself.
 
Well I got some free time on my hands I am going to see if I can get alternate forms to work.
@Rick, its because you are naming them wrong, which is the same thing that happened last time.
EDIT: seems like my trail mode has expired, and I do not really feel like spending money to buy the program, I guess I cant work on it for now.

EDIT AGAIN: NVM found the old 1.02a version of RPG MAKER XP, and just used a keygen.

Well I made alternate forms, but for now you cannot make a shiny alternate, just regular at the moment, I know how to fix it, but I will repost the fix later.
But for those who cannot wait here you go.
Code:
 def refresh_sprite
    if $Trainer.party.length!=$game_variables[Current_Following_Variable]
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    elsif $Trainer.party[0].hp<=0 
      remove_sprite
      end
     end
    end

  #----------------------------------------------------------------------------
  # - change_sprite(id, shiny, animation)
  # - Example, to change sprite to shiny lugia with animation:
  #     change_sprite(249, true, true)
  # - If just change sprite:
  #     change_sprite(249)
  #----------------------------------------------------------------------------
  def change_sprite(id, shiny=nil, altform=nil, animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        if shiny==true
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        if altform==true
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end  
       if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
        end
        $game_variables[Walking_Time_Variable]=0
    end
  end

Here is the actual 100% fix
Code:
#==============================================================================
# ¡Ü Credits to Help - 14 for both the scripts and Sprites
# ¡Ü Edited by Zingzags 
# -Fixed bugs
# -Clean ups
# -Fixed Surf Bug (After Surf is done)
# -Fixed def talk_to_pokemon while in surf
# -Fixed Surf Check
# -Fixed Type Check
# -Added Door Support
# -Fixed Hp Bug
# -Added Pokemon Center Support
# -Animation problems
# -Fixed Walk_time_variable problem
# -Added random item loot
# -Added egg check
# -Added Multiple Forms fix
#==============================================================================
# Zingzags comments
#==============================================================================
# Special thanks to Maruno, and Venom - 13, as they helped me a bit!
# 
#==============================================================================

#==============================================================================
#   ¡Ü Control the following Pokemon
#==============================================================================

def FollowingMoveRoute(commands,waitComplete=false)
    $PokemonTemp.dependentEvents.SetMoveRoute(commands,waitComplete)
end

#==============================================================================
#   ¡Ü Pokemon Following Character v3 By Help-14
#==============================================================================

class DependentEvents
#==============================================================================
# Raises The Current Pokemon's Happiness levels +1 per each time the 
# Walk_time_Variable reachs 5000 then resets to 0
# ItemWalk, is when the variable reaches a certain amount, that you are able to talk to your pokemon to recieve an item
#==============================================================================
    def add_following_time
      if $game_switches[2]==true && $Trainer.party.length>=1
        $game_variables[Walking_Time_Variable]+=1 if $game_variables[Current_Following_Variable]!=$Trainer.party.length
        if $game_variables[Walking_Time_Variable]==5000
          $Trainer.party[0].happiness+=1
          $game_variables[Walking_Time_Variable]=0
        if $game_variables[ItemWalk]==5
           else
           $game_variables[ItemWalk]+=1
          end
        end
      end
    end
  #----------------------------------------------------------------------------
  # -  refresh_sprite
  # -  Change sprite without animation
  #----------------------------------------------------------------------------
  
  def refresh_sprite
    if $Trainer.party.length!=$game_variables[Current_Following_Variable]
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    elsif $Trainer.party[0].hp<=0 
      remove_sprite
      end
     end
    end

  #----------------------------------------------------------------------------
  # - change_sprite(id, shiny, animation)
  # - Example, to change sprite to shiny lugia with animation:
  #     change_sprite(249, true, true)
  # - If just change sprite:
  #     change_sprite(249)
  #----------------------------------------------------------------------------
  def change_sprite(id, shiny=nil, altform=nil, animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        if shiny==true && altform==false
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       elsif altform==true && shiny==false
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        elsif altform==true && shiny==true
           events[i][6]=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end 
    end  
       if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
        end
        $game_variables[Walking_Time_Variable]=0
    end
  end
  
  #----------------------------------------------------------------------------
  # - remove_sprite(animation)
  # - Example, to remove sprite with animation:
  #     remove_sprite(true)
  # - If just remove sprite:
  #     remove_sprite
  #----------------------------------------------------------------------------
  
  def remove_sprite(animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          events[i][6]=sprintf("nil")
          @realEvents[i].character_name=sprintf("nil")
         if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_In,@realEvents[i].x,@realEvents[i].y)
          pbWait(10)
          end
        $game_variables[Current_Following_Variable]=$Trainer.party[0]
        $game_variables[Walking_Time_Variable]=0
      end
    end
  end

  #----------------------------------------------------------------------------
  # - check_surf(animation)
  # - If current Pokemon is a water Pokemon, it is still following.
  # - If current Pokemon is not a water Pokemon, remove sprite.
  # - Require Water_Pokemon_Can_Surf = true to enable
  #----------------------------------------------------------------------------
def check_surf(animation=nil)
  events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
         events[i][6]=sprintf("nil")
         @realEvents[i].character_name=sprintf("nil")
       else
       if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
        if $Trainer.party[0].hasType?(:WATER)
        remove_sprite
      else
        remove_sprite
        pbWait(20)
      end
    elsif $Trainer.party[0].hp<=0 
      end
    end
  end
end  
  
  #----------------------------------------------------------------------------
  # -  talk_to_pokemon
  # -  It will run when you talk to Pokemon following
  #----------------------------------------------------------------------------

  def talk_to_pokemon
    e=$Trainer.party[0]
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          pos_x=@realEvents[i].x
          pos_y=@realEvents[i].y
      end
    end
    if e==0
    else
    if e.hp>0 && !$Trainer.party[0].egg?
    if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
    else
      if e!=6
       pbPlayCry(e.species)
       random1=rand(5)
if $game_variables[ItemWalk]==5 
      items=[:POTION,:SUPERPOTION,:FULLRESTORE,:REVIVE,:PPUP,
       :PPMAX,:RARECANDY,:REPEL,:MAXREPEL,:ESCAPEROPE,
       :HONEY,:TINYMUSHROOM,:PEARL,:NUGGET,:GREATBALL,
       :ULTRABALL,:THUNDERSTONE,:MOONSTONE,:SUNSTONE,:DUSKSTONE,
       :REDAPRICORN,:BLUAPRICORN,:YLWAPRICORN,:GRNAPRICORN,:PNKAPRICORN,
       :BLKAPRICORN,:WHTAPRICORN
      ]
random2=0
loop do
  random2=rand(items.length)
  break if hasConst?(PBItems,items[random2])
 end

Kernel.pbMessage(_INTL("{1} seems to be holding something, it looks like {1} wants to give it to me.",e.name))
Kernel.pbPokemonFound(getConst(PBItems,items[random2]))
$game_variables[ItemWalk]=0
      end
      
       if random1==0
        $scene.spriteset.addUserAnimation(Emo_sing, pos_x, pos_y-2)
        pbWait(50)
        Kernel.pbMessage(_INTL("{1} loves this tune so much that {1} is singing it.",e.name)) 
      elsif e.happiness>0 && e.happiness<=50
        $scene.spriteset.addUserAnimation(Emo_Hate, pos_x, pos_y-2)
        pbWAit(70)
        Kernel.pbMessage(_INTL("{1} hate to travel with {2}.",e.name,$Trainer.name))
      elsif e.status==PBStatuses::POISON && e.hp>0 && !e.egg?
        $scene.spriteset.addUserAnimation(Emo_Poison, pos_x, pos_y-2)
        pbWait(120)
        Kernel.pbMessage(_INTL("{1} is badly poisoned, {1} needs help quick.",e.name))
      elsif e.happiness>50 && e.happiness<=100
        $scene.spriteset.addUserAnimation(Emo_Normal, pos_x, pos_y-2)
        pbWait(100)
        Kernel.pbMessage(_INTL("{1} is still undecided for whether traveling with {2} is a good thing or not.",e.name,$Trainer.name))
      elsif e.happiness>100 && e.happiness<150
        $scene.spriteset.addUserAnimation(Emo_Happy, pos_x, pos_y-2)
        Kernel.pbMessage(_INTL("{1} is happy traveling with {2}.",e.name,$Trainer.name))
      elsif e.happiness>=150
        $scene.spriteset.addUserAnimation(Emo_love, pos_x, pos_y-2)
        pbWait(70)
        Kernel.pbMessage(_INTL("{1} loves traveling with {2}.",e.name,$Trainer.name))
      end
      
    else
    
     
     end
    end
   end
  end
 end


def Come_back(shiny=nil, animation=nil)
  events=$PokemonGlobal.dependentEvents
  if $game_variables[Current_Following_Variable]==$Trainer.party.length
      $game_variables[Current_Following_Variable]
    else
      $game_variables[Current_Following_Variable]
    end
    if $game_variables[Current_Following_Variable]==$Trainer.party.length
      remove_sprite(false)
      for i in 0...events.length 
      $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
   end
     else
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      change_sprite($Trainer.party[0].species, shiny, false)
    end
    for i in 0..$Trainer.party.length-1
        if $Trainer.party[i].hp>0 && !$Trainer.party[0].egg?
          $game_variables[Current_Following_Variable]=i
          refresh_sprite
          break
        end
      end
    for i in 0...events.length 
       for i in 0..$Trainer.party.length-1
     if $Trainer.party[i].hp<=0 
       id = $Trainer.party[i].species
     else
       id = $Trainer.party[i].species
      end
     end
  if events[i] && events[i][8]=="Dependent"
        if shiny==true
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
          end
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      if animation==true
      else
      end
    end 
  end 
end

  #----------------------------------------------------------------------------
  # - check_faint
  # - If current Pokemon is fainted, change other Pokemon.
  #----------------------------------------------------------------------------

def check_faint
  if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
  else

  if $Trainer.party[0].hp<=0 
    $game_variables[Current_Following_Variable]=0  
    remove_sprite
   elsif $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?

  end 
 end
end

def SetMoveRoute(commands,waitComplete=false)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        pbMoveRoute(@realEvents[i],commands,waitComplete)
      end
    end
  end
end

  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbSurf, It'll check curent Pokemon when surf
  #----------------------------------------------------------------------------  

  def Kernel.pbSurf
#  if $game_player.pbHasDependentEvents?
#    return false
#  end
  if $DEBUG ||
    (HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
    movefinder=Kernel.pbCheckMove(:SURF)
    if $DEBUG || movefinder
      if Kernel.pbConfirmMessage(_INTL("The water is dyed a deep blue...  Would you like to surf?"))
        speciesname=!movefinder ? $Trainer.name : movefinder.name
        Kernel.pbMessage(_INTL("{1} used Surf!",speciesname))
        pbHiddenMoveAnimation(movefinder)
#        $PokemonTemp.dependentEvents.check_surf
        surfbgm=pbGetMetadata(0,MetadataSurfBGM)
        $PokemonTemp.dependentEvents.check_surf
        if surfbgm
          pbCueBGM(surfbgm,0.5)
        end
        pbStartSurfing()
        return true
      end
    end
  end
  return false
end



  #----------------------------------------------------------------------------
  # -  Auto add Script to pbEndSurf, It'll show sprite after surf
  #----------------------------------------------------------------------------  

  def pbEndSurf(xOffset,yOffset)
      return false if !$PokemonGlobal.surfing
  x=$game_player.x
  y=$game_player.y
  currentTag=$game_map.terrain_tag(x,y)
  facingTag=Kernel.pbFacingTerrainTag
  if pbIsSurfableTag?(currentTag)&&!pbIsSurfableTag?(facingTag)
    if Kernel.pbJumpToward
      Kernel.pbCancelVehicles
      $game_map.autoplayAsCue
      $game_player.increase_steps
      result=$game_player.check_event_trigger_here([1,2])
      Kernel.pbOnStepTaken(result)
      $PokemonTemp.dependentEvents.Come_back(true)
    end
    return true
  end
  return false
end
  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbCanUseHiddenMove, fix HM bug
  #----------------------------------------------------------------------------  
def Kernel.pbCanUseHiddenMove?(pkmn,move)
 case move
  when PBMoves::FLY
   if !$DEBUG && !$Trainer.badges[BADGEFORFLY]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::CUT
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Tree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::HEADBUTT
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="HeadbuttTree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::SURF
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.surfing
    Kernel.pbMessage(_INTL("You're already surfing."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   terrain=Kernel.pbFacingTerrainTag
   if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
    Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
    return false
   end
   if !pbIsWaterTag?(terrain)
    Kernel.pbMessage(_INTL("No surfing here!"))
    return false
   end
   return true
  when PBMoves::STRENGTH
   if !$DEBUG && !$Trainer.badges[BADGEFORSTRENGTH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Boulder"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::ROCKSMASH
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORROCKSMASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Rock"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::FLASH
   if !$DEBUG && !$Trainer.badges[BADGEFORFLASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDarkMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $PokemonGlobal.flashUsed
    Kernel.pbMessage(_INTL("This is in use already."))
    return false
   end
   return true
  when PBMoves::WATERFALL
   if !$DEBUG && !$Trainer.badges[BADGEFORWATERFALL]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   terrain=Kernel.pbFacingTerrainTag
   if terrain!=PBTerrain::Waterfall
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::DIVE
   if !$DEBUG && !$Trainer.badges[BADGEFORDIVE]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.diving
    return true
   end
   if $game_player.terrain_tag!=PBTerrain::DeepWater
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDiveMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::TELEPORT
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   healing=$PokemonGlobal.healingSpot
   if !healing
    healing=pbGetMetadata(0,MetadataHome) # Home
   end
   if healing
    mapname=pbGetMapNameFromId(healing[0])
    if Kernel.pbConfirmMessage(_INTL("Want to return to the healing spot used last in {1}?",mapname))
     return true
    end
    return false
   else
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
  when PBMoves::DIG
   escape=pbGetMetadata($game_map.map_id,MetadataEscapePoint)
   if !escape
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $game_player.pbHasDependentEvents?
    Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
    return false
   end
   mapname=pbGetMapNameFromId(escape[0])
   if Kernel.pbConfirmMessage(_INTL("Want to escape from here and return to {1}?",mapname))
    return true
   end
   return false
  when PBMoves::SWEETSCENT
   return true
  else
   return HiddenMoveHandlers.triggerCanUseMove(move,pkmn)
 end
 return false
end

def pbPokemonFollow(x)
Kernel.pbAddDependency2(x, "Dependent", CommonEvent)
$PokemonTemp.dependentEvents.refresh_sprite
end
 
Last edited:
Well I got some free time on my hands I am going to see if I can get alternate forms to work.
@Rick, its because you are naming them wrong, which is the same thing that happened last time.
EDIT: seems like my trail mode has expired, and I do not really feel like spending money to buy the program, I guess I cant work on it for now.

EDIT AGAIN: NVM found the old 1.02a version of RPG MAKER XP, and just used a keygen.

Well I made alternate forms, but for now you cannot make a shiny alternate, just regular at the moment, I know how to fix it, but I will repost the fix later.
But for those who cannot wait here you go.
Code:
 def refresh_sprite
    if $Trainer.party.length!=$game_variables[Current_Following_Variable]
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    elsif $Trainer.party[0].hp<=0 
      remove_sprite
      end
     end
    end

  #----------------------------------------------------------------------------
  # - change_sprite(id, shiny, animation)
  # - Example, to change sprite to shiny lugia with animation:
  #     change_sprite(249, true, true)
  # - If just change sprite:
  #     change_sprite(249)
  #----------------------------------------------------------------------------
  def change_sprite(id, shiny=nil, altform=nil, animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        if shiny==true
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        if altform==true
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end  
       if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
        end
        $game_variables[Walking_Time_Variable]=0
    end
  end

Here is the actual 100% fix
Code:
#==============================================================================
# ¡Ü Credits to Help - 14 for both the scripts and Sprites
# ¡Ü Edited by Zingzags 
# -Fixed bugs
# -Clean ups
# -Fixed Surf Bug (After Surf is done)
# -Fixed def talk_to_pokemon while in surf
# -Fixed Surf Check
# -Fixed Type Check
# -Added Door Support
# -Fixed Hp Bug
# -Added Pokemon Center Support
# -Animation problems
# -Fixed Walk_time_variable problem
# -Added random item loot
# -Added egg check
# -Added Multiple Forms fix
#==============================================================================
# Zingzags comments
#==============================================================================
# Special thanks to Maruno, and Venom - 13, as they helped me a bit!
# 
#==============================================================================

#==============================================================================
#   ¡Ü Control the following Pokemon
#==============================================================================

def FollowingMoveRoute(commands,waitComplete=false)
    $PokemonTemp.dependentEvents.SetMoveRoute(commands,waitComplete)
end

#==============================================================================
#   ¡Ü Pokemon Following Character v3 By Help-14
#==============================================================================

class DependentEvents
#==============================================================================
# Raises The Current Pokemon's Happiness levels +1 per each time the 
# Walk_time_Variable reachs 5000 then resets to 0
# ItemWalk, is when the variable reaches a certain amount, that you are able to talk to your pokemon to recieve an item
#==============================================================================
    def add_following_time
      if $game_switches[2]==true && $Trainer.party.length>=1
        $game_variables[Walking_Time_Variable]+=1 if $game_variables[Current_Following_Variable]!=$Trainer.party.length
        if $game_variables[Walking_Time_Variable]==5000
          $Trainer.party[0].happiness+=1
          $game_variables[Walking_Time_Variable]=0
        if $game_variables[ItemWalk]==5
           else
           $game_variables[ItemWalk]+=1
          end
        end
      end
    end
  #----------------------------------------------------------------------------
  # -  refresh_sprite
  # -  Change sprite without animation
  #----------------------------------------------------------------------------
  
  def refresh_sprite
    if $Trainer.party.length!=$game_variables[Current_Following_Variable]
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    elsif $Trainer.party[0].hp<=0 
      remove_sprite
      end
     end
    end

  #----------------------------------------------------------------------------
  # - change_sprite(id, shiny, animation)
  # - Example, to change sprite to shiny lugia with animation:
  #     change_sprite(249, true, true)
  # - If just change sprite:
  #     change_sprite(249)
  #----------------------------------------------------------------------------
  def change_sprite(id, shiny=nil, altform=nil, animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        if shiny==true && altform==false
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       elsif altform==true && shiny==false
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        elsif altform==true && shiny==true
           events[i][6]=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end 
    end  
       if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
        end
        $game_variables[Walking_Time_Variable]=0
    end
  end
  
  #----------------------------------------------------------------------------
  # - remove_sprite(animation)
  # - Example, to remove sprite with animation:
  #     remove_sprite(true)
  # - If just remove sprite:
  #     remove_sprite
  #----------------------------------------------------------------------------
  
  def remove_sprite(animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          events[i][6]=sprintf("nil")
          @realEvents[i].character_name=sprintf("nil")
         if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_In,@realEvents[i].x,@realEvents[i].y)
          pbWait(10)
          end
        $game_variables[Current_Following_Variable]=$Trainer.party[0]
        $game_variables[Walking_Time_Variable]=0
      end
    end
  end

  #----------------------------------------------------------------------------
  # - check_surf(animation)
  # - If current Pokemon is a water Pokemon, it is still following.
  # - If current Pokemon is not a water Pokemon, remove sprite.
  # - Require Water_Pokemon_Can_Surf = true to enable
  #----------------------------------------------------------------------------
def check_surf(animation=nil)
  events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
         events[i][6]=sprintf("nil")
         @realEvents[i].character_name=sprintf("nil")
       else
       if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
        if $Trainer.party[0].hasType?(:WATER)
        remove_sprite
      else
        remove_sprite
        pbWait(20)
      end
    elsif $Trainer.party[0].hp<=0 
      end
    end
  end
end  
  
  #----------------------------------------------------------------------------
  # -  talk_to_pokemon
  # -  It will run when you talk to Pokemon following
  #----------------------------------------------------------------------------

  def talk_to_pokemon
    e=$Trainer.party[0]
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          pos_x=@realEvents[i].x
          pos_y=@realEvents[i].y
      end
    end
    if e==0
    else
    if e.hp>0 && !$Trainer.party[0].egg?
    if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
    else
      if e!=6
       pbPlayCry(e.species)
       random1=rand(5)
if $game_variables[ItemWalk]==5 
      items=[:POTION,:SUPERPOTION,:FULLRESTORE,:REVIVE,:PPUP,
       :PPMAX,:RARECANDY,:REPEL,:MAXREPEL,:ESCAPEROPE,
       :HONEY,:TINYMUSHROOM,:PEARL,:NUGGET,:GREATBALL,
       :ULTRABALL,:THUNDERSTONE,:MOONSTONE,:SUNSTONE,:DUSKSTONE,
       :REDAPRICORN,:BLUAPRICORN,:YLWAPRICORN,:GRNAPRICORN,:PNKAPRICORN,
       :BLKAPRICORN,:WHTAPRICORN
      ]
random2=0
loop do
  random2=rand(items.length)
  break if hasConst?(PBItems,items[random2])
 end

Kernel.pbMessage(_INTL("{1} seems to be holding something, it looks like {1} wants to give it to me.",e.name))
Kernel.pbPokemonFound(getConst(PBItems,items[random2]))
$game_variables[ItemWalk]=0
      end
      
       if random1==0
        $scene.spriteset.addUserAnimation(Emo_sing, pos_x, pos_y-2)
        pbWait(50)
        Kernel.pbMessage(_INTL("{1} loves this tune so much that {1} is singing it.",e.name)) 
      elsif e.happiness>0 && e.happiness<=50
        $scene.spriteset.addUserAnimation(Emo_Hate, pos_x, pos_y-2)
        pbWAit(70)
        Kernel.pbMessage(_INTL("{1} hate to travel with {2}.",e.name,$Trainer.name))
      elsif e.status==PBStatuses::POISON && e.hp>0 && !e.egg?
        $scene.spriteset.addUserAnimation(Emo_Poison, pos_x, pos_y-2)
        pbWait(120)
        Kernel.pbMessage(_INTL("{1} is badly poisoned, {1} needs help quick.",e.name))
      elsif e.happiness>50 && e.happiness<=100
        $scene.spriteset.addUserAnimation(Emo_Normal, pos_x, pos_y-2)
        pbWait(100)
        Kernel.pbMessage(_INTL("{1} is still undecided for whether traveling with {2} is a good thing or not.",e.name,$Trainer.name))
      elsif e.happiness>100 && e.happiness<150
        $scene.spriteset.addUserAnimation(Emo_Happy, pos_x, pos_y-2)
        Kernel.pbMessage(_INTL("{1} is happy traveling with {2}.",e.name,$Trainer.name))
      elsif e.happiness>=150
        $scene.spriteset.addUserAnimation(Emo_love, pos_x, pos_y-2)
        pbWait(70)
        Kernel.pbMessage(_INTL("{1} loves traveling with {2}.",e.name,$Trainer.name))
      end
      
    else
    
     
     end
    end
   end
  end
 end


def Come_back(shiny=nil, animation=nil)
  events=$PokemonGlobal.dependentEvents
  if $game_variables[Current_Following_Variable]==$Trainer.party.length
      $game_variables[Current_Following_Variable]
    else
      $game_variables[Current_Following_Variable]
    end
    if $game_variables[Current_Following_Variable]==$Trainer.party.length
      remove_sprite(false)
      for i in 0...events.length 
      $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
   end
     else
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      change_sprite($Trainer.party[0].species, shiny, false)
    end
    for i in 0..$Trainer.party.length-1
        if $Trainer.party[i].hp>0 && !$Trainer.party[0].egg?
          $game_variables[Current_Following_Variable]=i
          refresh_sprite
          break
        end
      end
    for i in 0...events.length 
       for i in 0..$Trainer.party.length-1
     if $Trainer.party[i].hp<=0 
       id = $Trainer.party[i].species
     else
       id = $Trainer.party[i].species
      end
     end
  if events[i] && events[i][8]=="Dependent"
        if shiny==true
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
          end
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      if animation==true
      else
      end
    end 
  end 
end

  #----------------------------------------------------------------------------
  # - check_faint
  # - If current Pokemon is fainted, change other Pokemon.
  #----------------------------------------------------------------------------

def check_faint
  if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
  else

  if $Trainer.party[0].hp<=0 
    $game_variables[Current_Following_Variable]=0  
    remove_sprite
   elsif $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?

  end 
 end
end

def SetMoveRoute(commands,waitComplete=false)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        pbMoveRoute(@realEvents[i],commands,waitComplete)
      end
    end
  end
end

  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbSurf, It'll check curent Pokemon when surf
  #----------------------------------------------------------------------------  

  def Kernel.pbSurf
#  if $game_player.pbHasDependentEvents?
#    return false
#  end
  if $DEBUG ||
    (HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
    movefinder=Kernel.pbCheckMove(:SURF)
    if $DEBUG || movefinder
      if Kernel.pbConfirmMessage(_INTL("The water is dyed a deep blue...  Would you like to surf?"))
        speciesname=!movefinder ? $Trainer.name : movefinder.name
        Kernel.pbMessage(_INTL("{1} used Surf!",speciesname))
        pbHiddenMoveAnimation(movefinder)
#        $PokemonTemp.dependentEvents.check_surf
        surfbgm=pbGetMetadata(0,MetadataSurfBGM)
        $PokemonTemp.dependentEvents.check_surf
        if surfbgm
          pbCueBGM(surfbgm,0.5)
        end
        pbStartSurfing()
        return true
      end
    end
  end
  return false
end



  #----------------------------------------------------------------------------
  # -  Auto add Script to pbEndSurf, It'll show sprite after surf
  #----------------------------------------------------------------------------  

  def pbEndSurf(xOffset,yOffset)
      return false if !$PokemonGlobal.surfing
  x=$game_player.x
  y=$game_player.y
  currentTag=$game_map.terrain_tag(x,y)
  facingTag=Kernel.pbFacingTerrainTag
  if pbIsSurfableTag?(currentTag)&&!pbIsSurfableTag?(facingTag)
    if Kernel.pbJumpToward
      Kernel.pbCancelVehicles
      $game_map.autoplayAsCue
      $game_player.increase_steps
      result=$game_player.check_event_trigger_here([1,2])
      Kernel.pbOnStepTaken(result)
      $PokemonTemp.dependentEvents.Come_back(true)
    end
    return true
  end
  return false
end
  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbCanUseHiddenMove, fix HM bug
  #----------------------------------------------------------------------------  
def Kernel.pbCanUseHiddenMove?(pkmn,move)
 case move
  when PBMoves::FLY
   if !$DEBUG && !$Trainer.badges[BADGEFORFLY]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::CUT
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Tree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::HEADBUTT
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="HeadbuttTree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::SURF
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.surfing
    Kernel.pbMessage(_INTL("You're already surfing."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   terrain=Kernel.pbFacingTerrainTag
   if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
    Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
    return false
   end
   if !pbIsWaterTag?(terrain)
    Kernel.pbMessage(_INTL("No surfing here!"))
    return false
   end
   return true
  when PBMoves::STRENGTH
   if !$DEBUG && !$Trainer.badges[BADGEFORSTRENGTH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Boulder"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::ROCKSMASH
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORROCKSMASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Rock"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::FLASH
   if !$DEBUG && !$Trainer.badges[BADGEFORFLASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDarkMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $PokemonGlobal.flashUsed
    Kernel.pbMessage(_INTL("This is in use already."))
    return false
   end
   return true
  when PBMoves::WATERFALL
   if !$DEBUG && !$Trainer.badges[BADGEFORWATERFALL]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   terrain=Kernel.pbFacingTerrainTag
   if terrain!=PBTerrain::Waterfall
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::DIVE
   if !$DEBUG && !$Trainer.badges[BADGEFORDIVE]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.diving
    return true
   end
   if $game_player.terrain_tag!=PBTerrain::DeepWater
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDiveMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::TELEPORT
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   healing=$PokemonGlobal.healingSpot
   if !healing
    healing=pbGetMetadata(0,MetadataHome) # Home
   end
   if healing
    mapname=pbGetMapNameFromId(healing[0])
    if Kernel.pbConfirmMessage(_INTL("Want to return to the healing spot used last in {1}?",mapname))
     return true
    end
    return false
   else
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
  when PBMoves::DIG
   escape=pbGetMetadata($game_map.map_id,MetadataEscapePoint)
   if !escape
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $game_player.pbHasDependentEvents?
    Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
    return false
   end
   mapname=pbGetMapNameFromId(escape[0])
   if Kernel.pbConfirmMessage(_INTL("Want to escape from here and return to {1}?",mapname))
    return true
   end
   return false
  when PBMoves::SWEETSCENT
   return true
  else
   return HiddenMoveHandlers.triggerCanUseMove(move,pkmn)
 end
 return false
end

def pbPokemonFollow(x)
Kernel.pbAddDependency2(x, "Dependent", CommonEvent)
$PokemonTemp.dependentEvents.refresh_sprite
end

They are not named wrong now. I named them like the number of the pokemon and it's shiny form. Such as 493 and 493s those should be named correctly. That or it's the file I am using o3o
 
They are not named wrong now. I named them like the number of the pokemon and it's shiny form. Such as 493 and 493s those should be named correctly. That or it's the file I am using o3o

Then I hope this explanation helps.

You see this here:
Code:
events[i][6]=sprintf("%03d",id)
%03d is what I define 3 digit numbers, so numbers that are under 3 digits like
25 (Pikachu) would be, 025 which is how the images are named in battlers. But I remember when you sent me your project I had to change the script to make it easier for both me and you, so we wouldn't have to rename 400+ pokemon.

What I did to your script was I made it to %03d_0 because your pokemon overworlds in your folder were 001_0, 002_0... 493_0. the _0 in the script I edited for you was what made the pokemon overworlds show.

So what you are going to have to do for each release that comes out, you are going to have to go into the script and change each

%03d, %03ds, %03d_%d, %03ds_%d
to
%03d_0, %03ds_0, %03d_%d, %03ds_%d

EDIT: I forgot to edit one thing
Code:
#==============================================================================
# ¡Ü Credits to Help - 14 for both the scripts and Sprites
# ¡Ü Edited by Zingzags 
# -Fixed bugs
# -Clean ups
# -Fixed Surf Bug (After Surf is done)
# -Fixed def talk_to_pokemon while in surf
# -Fixed Surf Check
# -Fixed Type Check
# -Added Door Support
# -Fixed Hp Bug
# -Added Pokemon Center Support
# -Animation problems
# -Fixed Walk_time_variable problem
# -Added random item loot
# -Added egg check
# -Added Multiple Forms fix
#==============================================================================
# Zingzags comments
#==============================================================================
# Special thanks to Maruno, and Venom - 13, as they helped me a bit!
# 
#==============================================================================

#==============================================================================
#   ¡Ü Control the following Pokemon
#==============================================================================

def FollowingMoveRoute(commands,waitComplete=false)
    $PokemonTemp.dependentEvents.SetMoveRoute(commands,waitComplete)
end

#==============================================================================
#   ¡Ü Pokemon Following Character v3 By Help-14
#==============================================================================

class DependentEvents
#==============================================================================
# Raises The Current Pokemon's Happiness levels +1 per each time the 
# Walk_time_Variable reachs 5000 then resets to 0
# ItemWalk, is when the variable reaches a certain amount, that you are able to talk to your pokemon to recieve an item
#==============================================================================
    def add_following_time
      if $game_switches[2]==true && $Trainer.party.length>=1
        $game_variables[Walking_Time_Variable]+=1 if $game_variables[Current_Following_Variable]!=$Trainer.party.length
        if $game_variables[Walking_Time_Variable]==5000
          $Trainer.party[0].happiness+=1
          $game_variables[Walking_Time_Variable]=0
        if $game_variables[ItemWalk]==5
           else
           $game_variables[ItemWalk]+=1
          end
        end
      end
    end
  #----------------------------------------------------------------------------
  # -  refresh_sprite
  # -  Change sprite without animation
  #----------------------------------------------------------------------------
  
  def refresh_sprite
    if $Trainer.party.length!=$game_variables[Current_Following_Variable]
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    elsif $Trainer.party[0].hp<=0 
      remove_sprite
      end
     end
    end

  #----------------------------------------------------------------------------
  # - change_sprite(id, shiny, animation)
  # - Example, to change sprite to shiny lugia with animation:
  #     change_sprite(249, true, true)
  # - If just change sprite:
  #     change_sprite(249)
  #----------------------------------------------------------------------------
  def change_sprite(id, shiny=nil, altform=nil, animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        if shiny==true && altform==false
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       elsif altform==true && shiny==false
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        elsif altform==true && shiny==true
           events[i][6]=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end 
    end  
       if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
        end
        $game_variables[Walking_Time_Variable]=0
    end
  end
  
  #----------------------------------------------------------------------------
  # - remove_sprite(animation)
  # - Example, to remove sprite with animation:
  #     remove_sprite(true)
  # - If just remove sprite:
  #     remove_sprite
  #----------------------------------------------------------------------------
  
  def remove_sprite(animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          events[i][6]=sprintf("nil")
          @realEvents[i].character_name=sprintf("nil")
         if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_In,@realEvents[i].x,@realEvents[i].y)
          pbWait(10)
          end
        $game_variables[Current_Following_Variable]=$Trainer.party[0]
        $game_variables[Walking_Time_Variable]=0
      end
    end
  end

  #----------------------------------------------------------------------------
  # - check_surf(animation)
  # - If current Pokemon is a water Pokemon, it is still following.
  # - If current Pokemon is not a water Pokemon, remove sprite.
  # - Require Water_Pokemon_Can_Surf = true to enable
  #----------------------------------------------------------------------------
def check_surf(animation=nil)
  events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
         events[i][6]=sprintf("nil")
         @realEvents[i].character_name=sprintf("nil")
       else
       if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
        if $Trainer.party[0].hasType?(:WATER)
        remove_sprite
      else
        remove_sprite
        pbWait(20)
      end
    elsif $Trainer.party[0].hp<=0 
      end
    end
  end
end  
  
  #----------------------------------------------------------------------------
  # -  talk_to_pokemon
  # -  It will run when you talk to Pokemon following
  #----------------------------------------------------------------------------

  def talk_to_pokemon
    e=$Trainer.party[0]
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          pos_x=@realEvents[i].x
          pos_y=@realEvents[i].y
      end
    end
    if e==0
    else
    if e.hp>0 && !$Trainer.party[0].egg?
    if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
    else
      if e!=6
       pbPlayCry(e.species)
       random1=rand(5)
if $game_variables[ItemWalk]==5 
      items=[:POTION,:SUPERPOTION,:FULLRESTORE,:REVIVE,:PPUP,
       :PPMAX,:RARECANDY,:REPEL,:MAXREPEL,:ESCAPEROPE,
       :HONEY,:TINYMUSHROOM,:PEARL,:NUGGET,:GREATBALL,
       :ULTRABALL,:THUNDERSTONE,:MOONSTONE,:SUNSTONE,:DUSKSTONE,
       :REDAPRICORN,:BLUAPRICORN,:YLWAPRICORN,:GRNAPRICORN,:PNKAPRICORN,
       :BLKAPRICORN,:WHTAPRICORN
      ]
random2=0
loop do
  random2=rand(items.length)
  break if hasConst?(PBItems,items[random2])
 end

Kernel.pbMessage(_INTL("{1} seems to be holding something, it looks like {1} wants to give it to me.",e.name))
Kernel.pbPokemonFound(getConst(PBItems,items[random2]))
$game_variables[ItemWalk]=0
      end
      
       if random1==0
        $scene.spriteset.addUserAnimation(Emo_sing, pos_x, pos_y-2)
        pbWait(50)
        Kernel.pbMessage(_INTL("{1} loves this tune so much that {1} is singing it.",e.name)) 
      elsif e.happiness>0 && e.happiness<=50
        $scene.spriteset.addUserAnimation(Emo_Hate, pos_x, pos_y-2)
        pbWAit(70)
        Kernel.pbMessage(_INTL("{1} hate to travel with {2}.",e.name,$Trainer.name))
      elsif e.status==PBStatuses::POISON && e.hp>0 && !e.egg?
        $scene.spriteset.addUserAnimation(Emo_Poison, pos_x, pos_y-2)
        pbWait(120)
        Kernel.pbMessage(_INTL("{1} is badly poisoned, {1} needs help quick.",e.name))
      elsif e.happiness>50 && e.happiness<=100
        $scene.spriteset.addUserAnimation(Emo_Normal, pos_x, pos_y-2)
        pbWait(100)
        Kernel.pbMessage(_INTL("{1} is still undecided for whether traveling with {2} is a good thing or not.",e.name,$Trainer.name))
      elsif e.happiness>100 && e.happiness<150
        $scene.spriteset.addUserAnimation(Emo_Happy, pos_x, pos_y-2)
        Kernel.pbMessage(_INTL("{1} is happy traveling with {2}.",e.name,$Trainer.name))
      elsif e.happiness>=150
        $scene.spriteset.addUserAnimation(Emo_love, pos_x, pos_y-2)
        pbWait(70)
        Kernel.pbMessage(_INTL("{1} loves traveling with {2}.",e.name,$Trainer.name))
      end
      
    else
    
     
     end
    end
   end
  end
 end


def Come_back(shiny=nil, altform=nil, animation=nil)
  events=$PokemonGlobal.dependentEvents
  if $game_variables[Current_Following_Variable]==$Trainer.party.length
      $game_variables[Current_Following_Variable]
    else
      $game_variables[Current_Following_Variable]
    end
    if $game_variables[Current_Following_Variable]==$Trainer.party.length
      remove_sprite(false)
      for i in 0...events.length 
      $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
   end
     else
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
       if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    end
    for i in 0..$Trainer.party.length-1
        if $Trainer.party[i].hp>0 && !$Trainer.party[0].egg?
          $game_variables[Current_Following_Variable]=i
          refresh_sprite
          break
        end
      end
    for i in 0...events.length 
       for i in 0..$Trainer.party.length-1
     if $Trainer.party[i].hp<=0 
       id = $Trainer.party[i].species
     else
       id = $Trainer.party[i].species
      end
    end
    
     if events[i] && events[i][8]=="Dependent"
        if shiny==true && altform==false
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       elsif altform==true && shiny==false
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        elsif altform==true && shiny==true
           events[i][6]=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end 
 
    
      if animation==true
      else
      end
    end 
  end 
end

  #----------------------------------------------------------------------------
  # - check_faint
  # - If current Pokemon is fainted, change other Pokemon.
  #----------------------------------------------------------------------------

def check_faint
  if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
  else

  if $Trainer.party[0].hp<=0 
    $game_variables[Current_Following_Variable]=0  
    remove_sprite
   elsif $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?

  end 
 end
end

def SetMoveRoute(commands,waitComplete=false)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        pbMoveRoute(@realEvents[i],commands,waitComplete)
      end
    end
  end
end

  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbSurf, It'll check curent Pokemon when surf
  #----------------------------------------------------------------------------  

  def Kernel.pbSurf
#  if $game_player.pbHasDependentEvents?
#    return false
#  end
  if $DEBUG ||
    (HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
    movefinder=Kernel.pbCheckMove(:SURF)
    if $DEBUG || movefinder
      if Kernel.pbConfirmMessage(_INTL("The water is dyed a deep blue...  Would you like to surf?"))
        speciesname=!movefinder ? $Trainer.name : movefinder.name
        Kernel.pbMessage(_INTL("{1} used Surf!",speciesname))
        pbHiddenMoveAnimation(movefinder)
#        $PokemonTemp.dependentEvents.check_surf
        surfbgm=pbGetMetadata(0,MetadataSurfBGM)
        $PokemonTemp.dependentEvents.check_surf
        if surfbgm
          pbCueBGM(surfbgm,0.5)
        end
        pbStartSurfing()
        return true
      end
    end
  end
  return false
end



  #----------------------------------------------------------------------------
  # -  Auto add Script to pbEndSurf, It'll show sprite after surf
  #----------------------------------------------------------------------------  

  def pbEndSurf(xOffset,yOffset)
      return false if !$PokemonGlobal.surfing
  x=$game_player.x
  y=$game_player.y
  currentTag=$game_map.terrain_tag(x,y)
  facingTag=Kernel.pbFacingTerrainTag
  if pbIsSurfableTag?(currentTag)&&!pbIsSurfableTag?(facingTag)
    if Kernel.pbJumpToward
      Kernel.pbCancelVehicles
      $game_map.autoplayAsCue
      $game_player.increase_steps
      result=$game_player.check_event_trigger_here([1,2])
      Kernel.pbOnStepTaken(result)
      $PokemonTemp.dependentEvents.Come_back(true)
    end
    return true
  end
  return false
end
  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbCanUseHiddenMove, fix HM bug
  #----------------------------------------------------------------------------  
def Kernel.pbCanUseHiddenMove?(pkmn,move)
 case move
  when PBMoves::FLY
   if !$DEBUG && !$Trainer.badges[BADGEFORFLY]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::CUT
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Tree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::HEADBUTT
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="HeadbuttTree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::SURF
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.surfing
    Kernel.pbMessage(_INTL("You're already surfing."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   terrain=Kernel.pbFacingTerrainTag
   if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
    Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
    return false
   end
   if !pbIsWaterTag?(terrain)
    Kernel.pbMessage(_INTL("No surfing here!"))
    return false
   end
   return true
  when PBMoves::STRENGTH
   if !$DEBUG && !$Trainer.badges[BADGEFORSTRENGTH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Boulder"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::ROCKSMASH
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORROCKSMASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Rock"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::FLASH
   if !$DEBUG && !$Trainer.badges[BADGEFORFLASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDarkMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $PokemonGlobal.flashUsed
    Kernel.pbMessage(_INTL("This is in use already."))
    return false
   end
   return true
  when PBMoves::WATERFALL
   if !$DEBUG && !$Trainer.badges[BADGEFORWATERFALL]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   terrain=Kernel.pbFacingTerrainTag
   if terrain!=PBTerrain::Waterfall
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::DIVE
   if !$DEBUG && !$Trainer.badges[BADGEFORDIVE]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.diving
    return true
   end
   if $game_player.terrain_tag!=PBTerrain::DeepWater
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDiveMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::TELEPORT
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   healing=$PokemonGlobal.healingSpot
   if !healing
    healing=pbGetMetadata(0,MetadataHome) # Home
   end
   if healing
    mapname=pbGetMapNameFromId(healing[0])
    if Kernel.pbConfirmMessage(_INTL("Want to return to the healing spot used last in {1}?",mapname))
     return true
    end
    return false
   else
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
  when PBMoves::DIG
   escape=pbGetMetadata($game_map.map_id,MetadataEscapePoint)
   if !escape
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $game_player.pbHasDependentEvents?
    Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
    return false
   end
   mapname=pbGetMapNameFromId(escape[0])
   if Kernel.pbConfirmMessage(_INTL("Want to escape from here and return to {1}?",mapname))
    return true
   end
   return false
  when PBMoves::SWEETSCENT
   return true
  else
   return HiddenMoveHandlers.triggerCanUseMove(move,pkmn)
 end
 return false
end

def pbPokemonFollow(x)
Kernel.pbAddDependency2(x, "Dependent", CommonEvent)
$PokemonTemp.dependentEvents.refresh_sprite
end
 
Last edited:
very nice update. I missed the alternate forms thing. I don't know whats up with Rick's because i have them numbered 495, 495s, 496, 496s... etc and it works fine.
 
very nice update. I missed the alternate forms thing. I don't know whats up with Rick's because i have them numbered 495, 495s, 496, 496s... etc and it works fine.

I changed it to the same script everyone else is using o3o and still nothing works. I will have to look back. It may have gotten changed when I moved my scripts.
Wait. Just remembered. I am using Venom12's scripts o3o it has the same thing just in a new folder. Yet I can't figure it out >_< I put everything where it is men't to be. And nothing.

Then I hope this explanation helps.

You see this here:
Code:
events[i][6]=sprintf("%03d",id)
%03d is what I define 3 digit numbers, so numbers that are under 3 digits like
25 (Pikachu) would be, 025 which is how the images are named in battlers. But I remember when you sent me your project I had to change the script to make it easier for both me and you, so we wouldn't have to rename 400+ pokemon.

What I did to your script was I made it to %03d_0 because your pokemon overworlds in your folder were 001_0, 002_0... 493_0. the _0 in the script I edited for you was what made the pokemon overworlds show.

So what you are going to have to do for each release that comes out, you are going to have to go into the script and change each

%03d, %03ds, %03d_%d, %03ds_%d
to
%03d_0, %03ds_0, %03d_%d, %03ds_%d

EDIT: I forgot to edit one thing
Code:
#==============================================================================
# ¡Ü Credits to Help - 14 for both the scripts and Sprites
# ¡Ü Edited by Zingzags 
# -Fixed bugs
# -Clean ups
# -Fixed Surf Bug (After Surf is done)
# -Fixed def talk_to_pokemon while in surf
# -Fixed Surf Check
# -Fixed Type Check
# -Added Door Support
# -Fixed Hp Bug
# -Added Pokemon Center Support
# -Animation problems
# -Fixed Walk_time_variable problem
# -Added random item loot
# -Added egg check
# -Added Multiple Forms fix
#==============================================================================
# Zingzags comments
#==============================================================================
# Special thanks to Maruno, and Venom - 13, as they helped me a bit!
# 
#==============================================================================

#==============================================================================
#   ¡Ü Control the following Pokemon
#==============================================================================

def FollowingMoveRoute(commands,waitComplete=false)
    $PokemonTemp.dependentEvents.SetMoveRoute(commands,waitComplete)
end

#==============================================================================
#   ¡Ü Pokemon Following Character v3 By Help-14
#==============================================================================

class DependentEvents
#==============================================================================
# Raises The Current Pokemon's Happiness levels +1 per each time the 
# Walk_time_Variable reachs 5000 then resets to 0
# ItemWalk, is when the variable reaches a certain amount, that you are able to talk to your pokemon to recieve an item
#==============================================================================
    def add_following_time
      if $game_switches[2]==true && $Trainer.party.length>=1
        $game_variables[Walking_Time_Variable]+=1 if $game_variables[Current_Following_Variable]!=$Trainer.party.length
        if $game_variables[Walking_Time_Variable]==5000
          $Trainer.party[0].happiness+=1
          $game_variables[Walking_Time_Variable]=0
        if $game_variables[ItemWalk]==5
           else
           $game_variables[ItemWalk]+=1
          end
        end
      end
    end
  #----------------------------------------------------------------------------
  # -  refresh_sprite
  # -  Change sprite without animation
  #----------------------------------------------------------------------------
  
  def refresh_sprite
    if $Trainer.party.length!=$game_variables[Current_Following_Variable]
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
      if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    elsif $Trainer.party[0].hp<=0 
      remove_sprite
      end
     end
    end

  #----------------------------------------------------------------------------
  # - change_sprite(id, shiny, animation)
  # - Example, to change sprite to shiny lugia with animation:
  #     change_sprite(249, true, true)
  # - If just change sprite:
  #     change_sprite(249)
  #----------------------------------------------------------------------------
  def change_sprite(id, shiny=nil, altform=nil, animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        if shiny==true && altform==false
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       elsif altform==true && shiny==false
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        elsif altform==true && shiny==true
           events[i][6]=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end 
    end  
       if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
        end
        $game_variables[Walking_Time_Variable]=0
    end
  end
  
  #----------------------------------------------------------------------------
  # - remove_sprite(animation)
  # - Example, to remove sprite with animation:
  #     remove_sprite(true)
  # - If just remove sprite:
  #     remove_sprite
  #----------------------------------------------------------------------------
  
  def remove_sprite(animation=nil)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          events[i][6]=sprintf("nil")
          @realEvents[i].character_name=sprintf("nil")
         if animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_In,@realEvents[i].x,@realEvents[i].y)
          pbWait(10)
          end
        $game_variables[Current_Following_Variable]=$Trainer.party[0]
        $game_variables[Walking_Time_Variable]=0
      end
    end
  end

  #----------------------------------------------------------------------------
  # - check_surf(animation)
  # - If current Pokemon is a water Pokemon, it is still following.
  # - If current Pokemon is not a water Pokemon, remove sprite.
  # - Require Water_Pokemon_Can_Surf = true to enable
  #----------------------------------------------------------------------------
def check_surf(animation=nil)
  events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
         events[i][6]=sprintf("nil")
         @realEvents[i].character_name=sprintf("nil")
       else
       if $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?
        if $Trainer.party[0].hasType?(:WATER)
        remove_sprite
      else
        remove_sprite
        pbWait(20)
      end
    elsif $Trainer.party[0].hp<=0 
      end
    end
  end
end  
  
  #----------------------------------------------------------------------------
  # -  talk_to_pokemon
  # -  It will run when you talk to Pokemon following
  #----------------------------------------------------------------------------

  def talk_to_pokemon
    e=$Trainer.party[0]
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
          pos_x=@realEvents[i].x
          pos_y=@realEvents[i].y
      end
    end
    if e==0
    else
    if e.hp>0 && !$Trainer.party[0].egg?
    if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
    else
      if e!=6
       pbPlayCry(e.species)
       random1=rand(5)
if $game_variables[ItemWalk]==5 
      items=[:POTION,:SUPERPOTION,:FULLRESTORE,:REVIVE,:PPUP,
       :PPMAX,:RARECANDY,:REPEL,:MAXREPEL,:ESCAPEROPE,
       :HONEY,:TINYMUSHROOM,:PEARL,:NUGGET,:GREATBALL,
       :ULTRABALL,:THUNDERSTONE,:MOONSTONE,:SUNSTONE,:DUSKSTONE,
       :REDAPRICORN,:BLUAPRICORN,:YLWAPRICORN,:GRNAPRICORN,:PNKAPRICORN,
       :BLKAPRICORN,:WHTAPRICORN
      ]
random2=0
loop do
  random2=rand(items.length)
  break if hasConst?(PBItems,items[random2])
 end

Kernel.pbMessage(_INTL("{1} seems to be holding something, it looks like {1} wants to give it to me.",e.name))
Kernel.pbPokemonFound(getConst(PBItems,items[random2]))
$game_variables[ItemWalk]=0
      end
      
       if random1==0
        $scene.spriteset.addUserAnimation(Emo_sing, pos_x, pos_y-2)
        pbWait(50)
        Kernel.pbMessage(_INTL("{1} loves this tune so much that {1} is singing it.",e.name)) 
      elsif e.happiness>0 && e.happiness<=50
        $scene.spriteset.addUserAnimation(Emo_Hate, pos_x, pos_y-2)
        pbWAit(70)
        Kernel.pbMessage(_INTL("{1} hate to travel with {2}.",e.name,$Trainer.name))
      elsif e.status==PBStatuses::POISON && e.hp>0 && !e.egg?
        $scene.spriteset.addUserAnimation(Emo_Poison, pos_x, pos_y-2)
        pbWait(120)
        Kernel.pbMessage(_INTL("{1} is badly poisoned, {1} needs help quick.",e.name))
      elsif e.happiness>50 && e.happiness<=100
        $scene.spriteset.addUserAnimation(Emo_Normal, pos_x, pos_y-2)
        pbWait(100)
        Kernel.pbMessage(_INTL("{1} is still undecided for whether traveling with {2} is a good thing or not.",e.name,$Trainer.name))
      elsif e.happiness>100 && e.happiness<150
        $scene.spriteset.addUserAnimation(Emo_Happy, pos_x, pos_y-2)
        Kernel.pbMessage(_INTL("{1} is happy traveling with {2}.",e.name,$Trainer.name))
      elsif e.happiness>=150
        $scene.spriteset.addUserAnimation(Emo_love, pos_x, pos_y-2)
        pbWait(70)
        Kernel.pbMessage(_INTL("{1} loves traveling with {2}.",e.name,$Trainer.name))
      end
      
    else
    
     
     end
    end
   end
  end
 end


def Come_back(shiny=nil, altform=nil, animation=nil)
  events=$PokemonGlobal.dependentEvents
  if $game_variables[Current_Following_Variable]==$Trainer.party.length
      $game_variables[Current_Following_Variable]
    else
      $game_variables[Current_Following_Variable]
    end
    if $game_variables[Current_Following_Variable]==$Trainer.party.length
      remove_sprite(false)
      for i in 0...events.length 
      $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
   end
     else
      if $Trainer.party[0].isShiny?
        shiny=true
      else
        shiny=false
      end
       if $Trainer.party[0].form>0
         altform=true
      else
         altform=false
      end
      change_sprite($Trainer.party[0].species, shiny, altform, false)
    end
    for i in 0..$Trainer.party.length-1
        if $Trainer.party[i].hp>0 && !$Trainer.party[0].egg?
          $game_variables[Current_Following_Variable]=i
          refresh_sprite
          break
        end
      end
    for i in 0...events.length 
       for i in 0..$Trainer.party.length-1
     if $Trainer.party[i].hp<=0 
       id = $Trainer.party[i].species
     else
       id = $Trainer.party[i].species
      end
    end
    
     if events[i] && events[i][8]=="Dependent"
        if shiny==true && altform==false
           events[i][6]=sprintf("%03ds",id)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds",id)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
       elsif altform==true && shiny==false
           events[i][6]=sprintf("%03d_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03d_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
        elsif altform==true && shiny==true
           events[i][6]=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        if FileTest.image_exist?("Graphics/Characters/"+events[i][6])
          @realEvents[i].character_name=sprintf("%03ds_%d",id,$Trainer.party[0].form)
        else
          events[i][6]=sprintf("%03d",id)
          @realEvents[i].character_name=sprintf("%03d",id)
        end
      end 
 
    
      if animation==true
      else
      end
    end 
  end 
end

  #----------------------------------------------------------------------------
  # - check_faint
  # - If current Pokemon is fainted, change other Pokemon.
  #----------------------------------------------------------------------------

def check_faint
  if $PokemonGlobal.surfing==true || $PokemonGlobal.bicycle==true
  else

  if $Trainer.party[0].hp<=0 
    $game_variables[Current_Following_Variable]=0  
    remove_sprite
   elsif $Trainer.party[0].hp>0 && !$Trainer.party[0].egg?

  end 
 end
end

def SetMoveRoute(commands,waitComplete=false)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]=="Dependent"
        pbMoveRoute(@realEvents[i],commands,waitComplete)
      end
    end
  end
end

  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbSurf, It'll check curent Pokemon when surf
  #----------------------------------------------------------------------------  

  def Kernel.pbSurf
#  if $game_player.pbHasDependentEvents?
#    return false
#  end
  if $DEBUG ||
    (HIDDENMOVESCOUNTBADGES ? $Trainer.numbadges>=BADGEFORSURF : $Trainer.badges[BADGEFORSURF])
    movefinder=Kernel.pbCheckMove(:SURF)
    if $DEBUG || movefinder
      if Kernel.pbConfirmMessage(_INTL("The water is dyed a deep blue...  Would you like to surf?"))
        speciesname=!movefinder ? $Trainer.name : movefinder.name
        Kernel.pbMessage(_INTL("{1} used Surf!",speciesname))
        pbHiddenMoveAnimation(movefinder)
#        $PokemonTemp.dependentEvents.check_surf
        surfbgm=pbGetMetadata(0,MetadataSurfBGM)
        $PokemonTemp.dependentEvents.check_surf
        if surfbgm
          pbCueBGM(surfbgm,0.5)
        end
        pbStartSurfing()
        return true
      end
    end
  end
  return false
end



  #----------------------------------------------------------------------------
  # -  Auto add Script to pbEndSurf, It'll show sprite after surf
  #----------------------------------------------------------------------------  

  def pbEndSurf(xOffset,yOffset)
      return false if !$PokemonGlobal.surfing
  x=$game_player.x
  y=$game_player.y
  currentTag=$game_map.terrain_tag(x,y)
  facingTag=Kernel.pbFacingTerrainTag
  if pbIsSurfableTag?(currentTag)&&!pbIsSurfableTag?(facingTag)
    if Kernel.pbJumpToward
      Kernel.pbCancelVehicles
      $game_map.autoplayAsCue
      $game_player.increase_steps
      result=$game_player.check_event_trigger_here([1,2])
      Kernel.pbOnStepTaken(result)
      $PokemonTemp.dependentEvents.Come_back(true)
    end
    return true
  end
  return false
end
  #----------------------------------------------------------------------------
  # -  Auto add Script to Kernel.pbCanUseHiddenMove, fix HM bug
  #----------------------------------------------------------------------------  
def Kernel.pbCanUseHiddenMove?(pkmn,move)
 case move
  when PBMoves::FLY
   if !$DEBUG && !$Trainer.badges[BADGEFORFLY]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::CUT
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Tree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::HEADBUTT
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="HeadbuttTree"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::SURF
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORCUT]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.surfing
    Kernel.pbMessage(_INTL("You're already surfing."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   terrain=Kernel.pbFacingTerrainTag
   if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
    Kernel.pbMessage(_INTL("Let's enjoy cycling!"))
    return false
   end
   if !pbIsWaterTag?(terrain)
    Kernel.pbMessage(_INTL("No surfing here!"))
    return false
   end
   return true
  when PBMoves::STRENGTH
   if !$DEBUG && !$Trainer.badges[BADGEFORSTRENGTH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Boulder"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::ROCKSMASH
   terrain=Kernel.pbFacingTerrainTag
   if !$DEBUG && !$Trainer.badges[BADGEFORROCKSMASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   facingEvent=$game_player.pbFacingEvent
   if !facingEvent || facingEvent.name!="Rock"
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true  
  when PBMoves::FLASH
   if !$DEBUG && !$Trainer.badges[BADGEFORFLASH]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDarkMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $PokemonGlobal.flashUsed
    Kernel.pbMessage(_INTL("This is in use already."))
    return false
   end
   return true
  when PBMoves::WATERFALL
   if !$DEBUG && !$Trainer.badges[BADGEFORWATERFALL]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   terrain=Kernel.pbFacingTerrainTag
   if terrain!=PBTerrain::Waterfall
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::DIVE
   if !$DEBUG && !$Trainer.badges[BADGEFORDIVE]
    Kernel.pbMessage(_INTL("Sorry, a new Badge is required."))
    return false
   end
   if $PokemonGlobal.diving
    return true
   end
   if $game_player.terrain_tag!=PBTerrain::DeepWater
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if !pbGetMetadata($game_map.map_id,MetadataDiveMap)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   return true
  when PBMoves::TELEPORT
   if !pbGetMetadata($game_map.map_id,MetadataOutdoor)
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   #if $game_player.pbHasDependentEvents?
   # Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
   # return false
   #end
   healing=$PokemonGlobal.healingSpot
   if !healing
    healing=pbGetMetadata(0,MetadataHome) # Home
   end
   if healing
    mapname=pbGetMapNameFromId(healing[0])
    if Kernel.pbConfirmMessage(_INTL("Want to return to the healing spot used last in {1}?",mapname))
     return true
    end
    return false
   else
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
  when PBMoves::DIG
   escape=pbGetMetadata($game_map.map_id,MetadataEscapePoint)
   if !escape
    Kernel.pbMessage(_INTL("Can't use that here."))
    return false
   end
   if $game_player.pbHasDependentEvents?
    Kernel.pbMessage(_INTL("You can't use that if you have someone with you."))
    return false
   end
   mapname=pbGetMapNameFromId(escape[0])
   if Kernel.pbConfirmMessage(_INTL("Want to escape from here and return to {1}?",mapname))
    return true
   end
   return false
  when PBMoves::SWEETSCENT
   return true
  else
   return HiddenMoveHandlers.triggerCanUseMove(move,pkmn)
 end
 return false
end

def pbPokemonFollow(x)
Kernel.pbAddDependency2(x, "Dependent", CommonEvent)
$PokemonTemp.dependentEvents.refresh_sprite
end

I looked back. The Scripts still are not showing the pokemon. I have every single last pokemon named correctly. Such as the number men't to be show. My data is EXACTLY like everyone else. I use Venom12's data. I have not changed anything in that data. And yet I am still not able to show them.
 
Last edited:
Sorry guys I figured out my problem XD I was missing the audio files for the pokemon :/ All that for nothing XD all well it's working now and soon will have alternate forms :D
 
I replaced the followpokemon script in my game for the alternate forms fix that zingzags came up with and now only shiny Pokemon follow me... The sprites for regular Pokemon are invisible. Are they named wrong? If so how should I name them?

Edit: I found that if I change the Pokemon's form to 1 with the debug editor The regular (non shiny) sprite works... But I have to do it manually... Also the shiny doesn't appear on form 1...

And just for reference in my characters folder they are named:
001, 001s, 001_1, 001s_1, ect...
 
Last edited:
I replaced the followpokemon script in my game for the alternate forms fix that zingzags came up with and now only shiny Pokemon follow me... The sprites for regular Pokemon are invisible. Are they named wrong? If so how should I name them?

Edit: I found that if I change the Pokemon's form to 1 with the debug editor The regular (non shiny) sprite works... But I have to do it manually... Also the shiny doesn't appear on form 1...

And just for reference in my characters folder they are named:
001, 001s, 001_1, 001s_1, ect...

You would need to change them. With Zingzags premission I would be glad to let you use the script he made for me. But he changed it differently then what you have all ready. You could go to his original post and get the characters there correctly named.
 
How are they supposed to be named? In what sequence?
I get the feeling it's just a code error or something.
I'm pretty sure I'm doing everything right... Maybe. :I
 
I replaced the followpokemon script in my game for the alternate forms fix that zingzags came up with and now only shiny Pokemon follow me... The sprites for regular Pokemon are invisible. Are they named wrong? If so how should I name them?

Edit: I found that if I change the Pokemon's form to 1 with the debug editor The regular (non shiny) sprite works... But I have to do it manually... Also the shiny doesn't appear on form 1...

And just for reference in my characters folder they are named:
001, 001s, 001_1, 001s_1, ect...

The debug issue is something that Maruno needs to know about, I encountered the same issue trying to change my pokemon's from through the debug editor. But it works 100% my pokemon do show up shiny no matter what form they are in.

Take a picture of your folder, I want to see how is it named inside.
 
The debug issue is something that Maruno needs to know about, I encountered the same issue trying to change my pokemon's from through the debug editor. But it works 100% my pokemon do show up shiny no matter what form they are in.
Why should I need to know about it? This following script isn't in Essentials. It's not up to me to make sure Essentials is compatible with it (that's just backwards).

Besides, it sounds to me like this "problem" is just a case of not reading the instructions. See below.


What I did to your script was I made it to %03d_0 because your pokemon overworlds in your folder were 001_0, 002_0... 493_0. the _0 in the script I edited for you was what made the pokemon overworlds show.

So what you are going to have to do for each release that comes out, you are going to have to go into the script and change each

%03d, %03ds, %03d_%d, %03ds_%d
to
%03d_0, %03ds_0, %03d_%d, %03ds_%d
Change the names of the Pokémon overworld charsets as mentioned.
 
Why should I need to know about it? This following script isn't in Essentials. It's not up to me to make sure Essentials is compatible with it (that's just backwards).

No it wasn't something that had to do with the script, it was something with essentials that you explained to me in another thread.
 
Last edited:
I'm not sure I was understood. The Shiny sprites show up fine. It's the normal (non shiny and non alternate form) sprites that don't show. I tried changing the charsets and that didn't work either. I even went into the folder and changed the names of all the sprites. Still nothing. I can upload my game or scripts and post a link if you want or something? maybe that will help you tell me what I'm doing wrong? Meh.
 
Back
Top