• 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?".
  • Forum moderator applications are now open! Click here for details.
  • 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

~Angel~

Lead developer for Pokémon Millennium
281
Posts
14
Years
God I got some many questions XD
But this one is for others. I am using P-sign's B/W Pack and Pokemon Essentials B/W's overworlds (Recolored shiny by me 50% Done) and finally Zingzags/Help-14's follow script. I have thought it through but can't put my finger on it. I want to make all 649 pokemon be able to follow the character on of the most ultimate add-ons for pokemon. I am yet un-able to put my finger on why the sprites won't show. This is a project Zingzags was working on but is un-able to work on now. Now I am trying to take it over. I wish I had more expirence with Scripting but what can you do about newbies?
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
#==============================================================================
# Zingzags comments
#==============================================================================
# I know its not perfect, and it can be shortened, for example addind an array 
# for the random items.
#==============================================================================

#==============================================================================
#   ¡Ü 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].hp>0 && !$Trainer.party[0].egg?
      change_sprite($Trainer.party[0].species, shiny, 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, 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 animation==true
          $scene.spriteset.addUserAnimation(Animation_Come_Out,@realEvents[i].x,@realEvents[i].y)
        end
        $game_variables[Walking_Time_Variable]=0
      end
    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
Replace pbMountBike
Code:
def Kernel.pbMountBike
  return if $PokemonGlobal.bicycle
  $PokemonGlobal.bicycle=true
  $PokemonTemp.dependentEvents.remove_sprite(true)
  Kernel.pbUpdateVehicle
  bikebgm=pbGetMetadata(0,MetadataBicycleBGM)
  if bikebgm
    pbCueBGM(bikebgm,0.5)
  end
end
Replace the Dependent event's with this:
Code:
class PokemonTemp
  attr_accessor :dependentEvents

  def dependentEvents
    @dependentEvents=DependentEvents.new if !@dependentEvents
    return @dependentEvents
  end
end



def pbRemoveDependencies()
  $PokemonTemp.dependentEvents.removeAllEvents()
  pbDeregisterPartner() rescue nil
end

def pbAddDependency(event)
  $PokemonTemp.dependentEvents.addEvent(event)
end

def pbRemoveDependency(event)
  $PokemonTemp.dependentEvents.removeEvent(event)
end

def pbAddDependency2(eventID, eventName, commonEvent)
  $PokemonTemp.dependentEvents.addEvent($game_map.events[eventID],eventName,commonEvent)
end

# Gets the Game_Character object associated with a dependent event.
def pbGetDependency(eventName)
  return $PokemonTemp.dependentEvents.getEventByName(eventName)
end

def pbRemoveDependency2(eventName)
  $PokemonTemp.dependentEvents.removeEventByName(eventName)
end



class PokemonGlobalMetadata
  attr_accessor :dependentEvents

  def dependentEvents
    @dependentEvents=[] if !@dependentEvents
    return @dependentEvents
  end
end



class Game_Event
  def set_starting
    @starting=true
  end
end



def pbTestPass(follower,x,y,direction=nil)
  return $MapFactory.isPassableStrict?(follower.map.map_id,x,y,follower)
end

# Same map only
def moveThrough(follower,direction)
  oldThrough=follower.through
  follower.through=true
  case direction
    when 2 # down
      follower.move_down
    when 4 # left
      follower.move_left
    when 6 # right
      follower.move_right
    when 8 # up
      follower.move_up
  end 
  follower.through=oldThrough
end

# Same map only
def moveFancy(follower,direction)
  deltaX=(direction == 6 ? 1 : (direction == 4 ? -1 : 0))
  deltaY=(direction == 2 ? 1 : (direction == 8 ? -1 : 0))
  newX = follower.x + deltaX
  newY = follower.y + deltaY
  # Move if new position is the player's, or the new position is passable,
  # or the current position is not passable
  if ($game_player.x==newX && $game_player.y==newY) ||
     pbTestPass(follower,newX,newY,0) ||
     !pbTestPass(follower,follower.x,follower.y,0)
    oldThrough=follower.through
    follower.through=true
    case direction
      when 2 # down
        follower.move_down
      when 4 # left
        follower.move_left
      when 6 # right
        follower.move_right
      when 8 # up
        follower.move_up
    end 
    follower.through=oldThrough
  end
end

# Same map only
def jumpFancy(follower,direction)
  deltaX=(direction == 6 ? 2 : (direction == 4 ? -2 : 0))
  deltaY=(direction == 2 ? 2 : (direction == 8 ? -2 : 0))
  halfDeltaX=(direction == 6 ? 1 : (direction == 4 ? -1 : 0))
  halfDeltaY=(direction == 2 ? 1 : (direction == 8 ? -1 : 0))
  middle=pbTestPass(follower,follower.x+halfDeltaX,follower.y+halfDeltaY,0)
  ending=pbTestPass(follower,follower.x+deltaX,    follower.y+deltaY,    0)
  if middle
    moveFancy(follower,direction)
    moveFancy(follower,direction)
  elsif ending
    if pbTestPass(follower,follower.x,follower.y,0)
      follower.jump(deltaX,deltaY)
    else
      moveThrough(follower,direction)
      moveThrough(follower,direction)
    end
  end
end

def pbFancyMoveTo(follower,newX,newY)
  if follower.x-newX==-1 && follower.y==newY
    moveFancy(follower,6)
  elsif follower.x-newX==1 && follower.y==newY
    moveFancy(follower,4)
  elsif follower.y-newY==-1 && follower.x==newX
    moveFancy(follower,2)
  elsif follower.y-newY==1 && follower.x==newX
    moveFancy(follower,8)
  elsif follower.x-newX==-2 && follower.y==newY
    jumpFancy(follower,6)
  elsif follower.x-newX==2 && follower.y==newY
    jumpFancy(follower,4)
  elsif follower.y-newY==-2 && follower.x==newX
    jumpFancy(follower,2)
  elsif follower.y-newY==2 && follower.x==newX
    jumpFancy(follower,8)
  elsif follower.x!=newX || follower.y!=newY
    follower.moveto(newX,newY)
  end
end



class DependentEvents
  def createEvent(eventData)
    rpgEvent=RPG::Event.new(eventData[3],eventData[4])
    rpgEvent.id=eventData[1]
    if eventData[9]
      # Must setup common event list here and now
      commonEvent=Game_CommonEvent.new(eventData[9])
      rpgEvent.pages[0].list=commonEvent.list
    end
    newEvent=Game_Event.new(eventData[0],rpgEvent,
       $MapFactory.getMap(eventData[2]))
    newEvent.character_name=eventData[6]
    newEvent.character_hue=eventData[7]
    case eventData[5] # direction
      when 2 # down
        newEvent.turn_down
      when 4 # left
        newEvent.turn_left
      when 6 # right
        newEvent.turn_right
      when 8 # up
        newEvent.turn_up
    end
    return newEvent
  end

  attr_reader :lastUpdate

  def initialize
    # Original map, Event ID, Current map, X, Y, Direction
    events=$PokemonGlobal.dependentEvents
    @realEvents=[]
    @lastUpdate=-1
    for event in events
      @realEvents.push(createEvent(event))
    end
  end

  def pbEnsureEvent(event, newMapID)
    events=$PokemonGlobal.dependentEvents
    found=-1
    for i in 0...events.length
      # Check original map ID and original event ID 
      if events[i][0]==event.map_id && events[i][1]==event.id
        # Change current map ID
        events[i][2]=newMapID
        newEvent=createEvent(events[i])
        # Replace event
        @realEvents[i]=newEvent
        @lastUpdate+=1
        return i
      end
    end
    return -1
  end

  def pbFollowEventAcrossMaps(leader,follower,instant=false,leaderIsTrueLeader=true)
    d=leader.direction
    areConnected=$MapFactory.areConnected?(leader.map.map_id,follower.map.map_id)
    # Get the rear facing tile of leader
    facingDirection=[0,0,8,0,6,0,4,0,2][d]
    if !leaderIsTrueLeader && areConnected
      relativePos=$MapFactory.getThisAndOtherEventRelativePos(leader,follower)
      if (relativePos[1]==0 && relativePos[0]==2) # 2 spaces to the right of leader
        facingDirection=6
      elsif (relativePos[1]==0 && relativePos[0]==-2) # 2 spaces to the left of leader
        facingDirection=4
      elsif relativePos[1]==-2 && relativePos[0]==0 # 2 spaces above leader
        facingDirection=8
      elsif relativePos[1]==2 && relativePos[0]==0 # 2 spaces below leader
        facingDirection=2
      end
    end
    facings=[facingDirection] # Get facing from behind
    facings.push([0,0,4,0,8,0,2,0,6][d]) # Get right facing
    facings.push([0,0,6,0,2,0,8,0,4][d]) # Get left facing
    if !leaderIsTrueLeader
      facings.push([0,0,2,0,4,0,6,0,8][d]) # Get forward facing
    end
    mapTile=nil
    if areConnected
      bestRelativePos=-1
      oldthrough=follower.through
      follower.through=false
      for i in 0...facings.length
        facing=facings[i]
        tile=$MapFactory.getFacingTile(facing,leader)
        passable=tile && $MapFactory.isPassableStrict?(tile[0],tile[1],tile[2],follower)
        if i==0 && !passable && tile && 
           $MapFactory.getTerrainTag(tile[0],tile[1],tile[2])==PBTerrain::Ledge
          # If the tile isn't passable and the tile is a ledge,
          # get tile from further behind
          tile=$MapFactory.getFacingTileFromPos(tile[0],tile[1],tile[2],facing)
          passable=tile && $MapFactory.isPassableStrict?(tile[0],tile[1],tile[2],follower)
        end
        if passable
          relativePos=$MapFactory.getThisAndOtherPosRelativePos(
             follower,tile[0],tile[1],tile[2])
          distance=Math.sqrt(relativePos[0]*relativePos[0]+relativePos[1]*relativePos[1])
          if bestRelativePos==-1 || bestRelativePos>distance
            bestRelativePos=distance
            mapTile=tile
          end
          if i==0 && distance<=1 # Prefer behind if tile can move up to 1 space
            break
          end
        end
      end
      follower.through=oldthrough
    else
      tile=$MapFactory.getFacingTile(facings[0],leader)
      passable=tile && $MapFactory.isPassableStrict?(
         tile[0],tile[1],tile[2],follower)
      mapTile=passable ? mapTile : nil
    end
    if mapTile && follower.map.map_id==mapTile[0]
      # Follower is on same map
      newX=mapTile[1]
      newY=mapTile[2]
      deltaX=(d == 6 ? -1 : d == 4 ? 1 : 0)
      deltaY=(d == 2 ? -1 : d == 8 ? 1 : 0)
      posX = newX + deltaX
      posY = newY + deltaY
      follower.move_speed=leader.move_speed # sync movespeed
      if (follower.x-newX==-1 && follower.y==newY) ||
         (follower.x-newX==1 && follower.y==newY) ||
         (follower.y-newY==-1 && follower.x==newX) ||
         (follower.y-newY==1 && follower.x==newX)
        if instant
          follower.moveto(newX,newY)
        else
          pbFancyMoveTo(follower,newX,newY)
        end
      elsif (follower.x-newX==-2 && follower.y==newY) ||
            (follower.x-newX==2 && follower.y==newY) ||
            (follower.y-newY==-2 && follower.x==newX) ||
            (follower.y-newY==2 && follower.x==newX)
        if instant
          follower.moveto(newX,newY)
        else
          pbFancyMoveTo(follower,newX,newY)
        end
      elsif follower.x!=posX || follower.y!=posY
        if instant
          follower.moveto(newX,newY)
        else
          pbFancyMoveTo(follower,posX,posY)
          pbFancyMoveTo(follower,newX,newY)
        end
      end
      pbTurnTowardEvent(follower,leader)
    else
      if !mapTile
        # Make current position into leader's position
        mapTile=[leader.map.map_id,leader.x,leader.y]
      end
      if follower.map.map_id==mapTile[0]
        # Follower is on same map as leader
        follower.moveto(leader.x,leader.y)
        pbTurnTowardEvent(follower,leader)
      else
        # Follower will move to different map
        events=$PokemonGlobal.dependentEvents
        eventIndex=pbEnsureEvent(follower,mapTile[0])
        if eventIndex>=0
          newFollower=@realEvents[eventIndex]
          newEventData=events[eventIndex]
          newFollower.moveto(mapTile[1],mapTile[2])
          newEventData[3]=mapTile[1]
          newEventData[4]=mapTile[2]
          if mapTile[0]==leader.map.map_id
            pbTurnTowardEvent(follower,leader)
          end
        end
      end
    end
  end

  def debugEcho
    self.eachEvent {|e,d|
       echoln d
       echoln [e.map_id,e.map.map_id,e.id]
    }
  end

  def pbMapChangeMoveDependentEvents
    events=$PokemonGlobal.dependentEvents
    updateDependentEvents
    leader=$game_player
    for i in 0...events.length
      event=@realEvents[i]
      pbFollowEventAcrossMaps(leader,event,true,i==0)
      # Update X and Y for this event
      events[i][3]=event.x
      events[i][4]=event.y
      events[i][5]=event.direction
      # Set leader to this event
      leader=event
    end
  end

  def pbMoveDependentEvents
    events=$PokemonGlobal.dependentEvents
    updateDependentEvents
    leader=$game_player
    for i in 0...events.length
      event=@realEvents[i]
      pbFollowEventAcrossMaps(leader,event,false,i==0)
      # Update X and Y for this event
      events[i][3]=event.x
      events[i][4]=event.y
      events[i][5]=event.direction
      # Set leader to this event
      leader=event
    end
  end

  def pbTurnDependentEvents
    events=$PokemonGlobal.dependentEvents
    updateDependentEvents
    leader=$game_player
    for i in 0...events.length
      event=@realEvents[i]
      pbTurnTowardEvent(event,leader)
      # Update direction for this event
      events[i][5]=event.direction
      # Set leader to this event
      leader=event
    end
  end

  def eachEvent
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      yield @realEvents[i],events[i]
    end   
  end

  def updateDependentEvents
    events=$PokemonGlobal.dependentEvents
    return if events.length==0
    for i in 0...events.length
      event=@realEvents[i]
      next if !@realEvents[i]
      event.transparent=$game_player.transparent
      if (event.jumping? || event.moving?) || !($game_player.jumping? || $game_player.moving?) then
        event.update
      elsif !event.starting
        event.set_starting
        event.update
        event.clear_starting
      end
      events[i][3]=event.x
      events[i][4]=event.y
      events[i][5]=event.direction
    end
    # Check event triggers
    if Input.trigger?(Input::C) && !pbMapInterpreterRunning?
      # Get position of tile facing the player
      facingTile=$MapFactory.getFacingTile()
      self.eachEvent {|e,d|
         next if !d[9]
         if e.x==$game_player.x && e.y==$game_player.y
           # On same position
           if not e.jumping? && (!e.respond_to?("over_trigger") || e.over_trigger?)
             if e.list.size>1
               # Start event
               $game_map.refresh if $game_map.need_refresh
               e.lock
               pbMapInterpreter.setup(e.list,e.id,e.map.map_id)
             end
           end
         elsif facingTile && e.map.map_id==facingTile[0] &&
               e.x==facingTile[1] && e.y==facingTile[2]
           # On facing tile
           if not e.jumping? && (!e.respond_to?("over_trigger") || !e.over_trigger?)
             if e.list.size>1
               # Start event
               $game_map.refresh if $game_map.need_refresh
               e.lock
               pbMapInterpreter.setup(e.list,e.id,e.map.map_id)
             end
           end
         end
      }
    end
  end

  def removeEvent(event)
    events=$PokemonGlobal.dependentEvents
    mapid=$game_map.map_id
    for i in 0...events.length
      if events[i][2]==mapid && # Refer to current map
         events[i][0]==event.map_id && # Event's map ID is original ID
         events[i][1]==event.id
        events[i]=nil
        @realEvents[i]=nil
        @lastUpdate+=1
      end
      events.compact!
      @realEvents.compact!
    end
  end

  def getEventByName(name)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]==name # Arbitrary name given to dependent event
        return @realEvents[i]
      end
    end
    return nil
  end

  def removeAllEvents
    events=$PokemonGlobal.dependentEvents
    events.clear
    @realEvents.clear
    @lastUpdate+=1
  end

  def removeEventByName(name)
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][8]==name # Arbitrary name given to dependent event
        events[i]=nil
        @realEvents[i]=nil
        @lastUpdate+=1
      end
      events.compact!
      @realEvents.compact!
    end
  end

  def addEvent(event,eventName=nil,commonEvent=nil)
    return if !event
    events=$PokemonGlobal.dependentEvents
    for i in 0...events.length
      if events[i] && events[i][0]==$game_map.map_id && events[i][1]==event.id
        # Already exists
        return
      end
    end
    # Original map ID, original event ID, current map ID,
    # event X, event Y, event direction,
    # event's filename,
    # event's hue, event's name, common event ID
    eventData=[
       $game_map.map_id,event.id,$game_map.map_id,
       event.x,event.y,event.direction,
       event.character_name.clone,
       event.character_hue,eventName,commonEvent
    ]
    newEvent=createEvent(eventData)
    events.push(eventData)
    @realEvents.push(newEvent)
    @lastUpdate+=1
    event.erase
  end
end



class DependentEventSprites
  def refresh
    for sprite in @sprites
      sprite.dispose
    end
    @sprites.clear
    $PokemonTemp.dependentEvents.eachEvent {|event,data|
       if data[0][email protected]_id # Check original map
         @map.events[data[1]].erase
       end
       if data[2][email protected]_id # Check current map
         @sprites.push(Sprite_Character.new(@viewport,event))
       end
    }
  end

  def initialize(viewport,map)
    @disposed=false
    @sprites=[]
    @map=map
    @viewport=viewport
    refresh
    @lastUpdate=nil
  end

  def update
    if $PokemonTemp.dependentEvents.lastUpdate!=@lastUpdate
      refresh
      @lastUpdate=$PokemonTemp.dependentEvents.lastUpdate
    end
    for sprite in @sprites
      sprite.update
    end
  end

  def dispose
    return if @disposed
    for sprite in @sprites
      sprite.dispose
    end
    @sprites.clear
    @disposed=true
  end

  def disposed?
    @disposed
  end
end



Events.onSpritesetCreate+=proc{|sender,e|
   spriteset=e[0] # Spriteset being created
   viewport=e[1] # Viewport used for tilemap and characters
   map=spriteset.map # Map associated with the spriteset (not necessarily the current map).
   spriteset.addUserSprite(DependentEventSprites.new(viewport,map))
}

Events.onMapSceneChange+=proc{|sender,e|
   scene=e[0]
   mapChanged=e[1]
   if mapChanged
     $PokemonTemp.dependentEvents.pbMapChangeMoveDependentEvents
   end
}
Add this into the script called Settings
Code:
#=========================================================
# ● Config Script For Your Game Here
# Change the emo_ to what ever number is the cell holding the animation
#=========================================================
Current_Following_Variable = 36
CommonEvent = 3
ItemWalk=26
Walking_Time_Variable = 27
Animation_Come_Out = 22
Animation_Come_In = 23
Emo_Happy = 24
Emo_Normal = 25
Emo_Hate = 26
Emo_Poison= 27
Emo_sing= 28
Emo_love= 29
Place this
Code:
$PokemonTemp.dependentEvents.refresh_sprite
under this in the script section called PokemonParty.
Look for this code:
Code:
       next if havecommand
      if cmdSummary>=0 && command==cmdSummary
        @scene.pbSummary(pkmnid)
      elsif cmdSwitch>=0 && command==cmdSwitch
        @scene.pbSetHelpText(_INTL("Move to where?"))
        oldpkmnid=pkmnid
        [email protected](true)
        if pkmnid>=0 && pkmnid!=oldpkmnid
          pbSwitch(oldpkmnid,pkmnid)
Place
Code:
$PokemonTemp.dependentEvents.refresh_sprite
and place it under this or look for this in PokemonStorage:
Code:
def pbTrainerPC
 Kernel.pbMessage(_INTL("\\se[computeropen]{1} booted up the PC.",$Trainer.name))
 pbTrainerPCMenu
  pbSEPlay("computerclose")
Place this
Code:
$PokemonTemp.dependentEvents.refresh_sprite
under this in this in PokemonStorage:
Code:
def access
   Kernel.pbMessage(_INTL("\\se[accesspc]Accessed {1}'s PC.",$Trainer.name))
   pbTrainerPCMenu
Find this in Game_Player
Code:
$PokemonTemp.dependentEvents.updateDependentEvents
and place this under that:
Code:
$PokemonTemp.dependentEvents.add_following_time
Find pbEndBattle in Pokemon Actual_scene and replace it with this:
Code:
def pbEndBattle(result)
    @abortable=false
    pbShowWindow(BLANK)
    # Fade out all sprites
    $PokemonTemp.dependentEvents.check_faint
    pbBGMFade(1.0)
    pbFadeOutAndHide(@sprites)
    pbDisposeSprites
  end
Place this in both sections of the Pokemon center Nurse script:
Code:
$PokemonTemp.dependentEvents.refresh_sprite
Finally place this above kernel.pbReceiveItem in PokemonField
Code:
def Kernel.pbPokemonFound(item,quantity=1,plural=nil)
  itemname=PBItems.getName(item)
  pocket=pbGetPocket(item)
  e=$Trainer.party[0].name
if $PokemonBag.pbStoreItem(item,quantity) 
  pbWait(5)

    if $ItemData[item][ITEMUSE]==3 || $ItemData[item][ITEMUSE]==4
      Kernel.pbMessage(_INTL("\\se[]{1} found {2}!\\se[itemlevel]\\nIt contained {3}.\\wtnp[30]",e,itemname,PBMoves.getName($ItemData[item][ITEMMACHINE])))
      Kernel.pbMessage(_INTL("{1} put the {2}\r\nin the {3} Pocket.",$Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
    elsif isConst?(item,PBItems,:LEFTOVERS)
      Kernel.pbMessage(_INTL("\\se[]{1} found some {2}!\\se[itemlevel]\\wtnp[30]",e,itemname))
      Kernel.pbMessage(_INTL("{1} put the {2}\r\nin the {3} Pocket.",$Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
    else
      if quantity>1
        if plural
          Kernel.pbMessage(_INTL("\\se[]{1} found {2} {3}!\\se[itemlevel]\\wtnp[30]",e,quantity,plural))
          Kernel.pbMessage(_INTL("{1} put the {2}\r\nin the {3} Pocket.",$Trainer.name,plural,PokemonBag.pocketNames()[pocket]))
        else
          Kernel.pbMessage(_INTL("\\se[]{1} found {2} {3}s!\\se[itemlevel]\\wtnp[30]",e,quantity,itemname))
          Kernel.pbMessage(_INTL("{1} put the {2}s\r\nin the {3} Pocket.",$Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
        end
      else
        Kernel.pbMessage(_INTL("\\se[]{1} found one {2}!\\se[itemlevel]\\wtnp[30]",e,itemname))
        Kernel.pbMessage(_INTL("{1} put the {2}\r\nin the {3} Pocket.",$Trainer.name,itemname,PokemonBag.pocketNames()[pocket]))
      end
    end
    return true
  else   # Can't add the item
    if $ItemData[item][ITEMUSE]==3 || $ItemData[item][ITEMUSE]==4
      Kernel.pbMessage(_INTL("{1} found {2}!\\wtnp[20]",e,itemname))
    elsif isConst?(item,PBItems,:LEFTOVERS)
      Kernel.pbMessage(_INTL("{1} found some {2}!\\wtnp[20]",$Trainer.name,itemname))
    else
      if quantity>1
        if plural
          Kernel.pbMessage(_INTL("{1} found {2} {3}!\\wtnp[20]",e,quantity,plural))
        else
          Kernel.pbMessage(_INTL("{1} found {2} {3}s!\\wtnp[20]",$Trainer.name,quantity,itemname))
        end
      else
        Kernel.pbMessage(_INTL("{1} found one {2}!\\wtnp[20]",e,itemname))
      end
    end
    Kernel.pbMessage(_INTL("Too bad... The Bag is full..."))
    return false
  end
end
When you want to talk to the pokemon make sure to add
Code:
$PokemonTemp.dependentEvents.talk_to_pokemon
To activate the script use:
Code:
pbPokemonFollow(x)
x being the number of the pokemon going to follow you.
Yeah I know it's sorta like a tutorial but. It's more of me needing help to XD Sorry I was just asking for help.
More credit's to Zingzag's for the script and Help-14. I re-wrote the tutorial to help people understand it a bit better. So if anyone can help me find out what might be causing the sprites to not show please help me? I want to help people more and get some answers. I checked and was un able to find where the problem was being caused. If anyone is able to show me it would be greatly appreciated. Yet again I say yes it's like a tutorial as well. Sorry for this but I just want people to have something they were not able to have in Pokemon B/W and B/W2. Thanks again.
 
Last edited:

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
this is quite a bit more descriptive. Thank you. You have done a lot to help people like me. I will try implementing this, and let you know

ok. I just put everything in. No errors come up, which is a good sign, but the pokemon don't show up either. I have all the sprites in the characters folder in graphics. I don't know whats wrong. Do I have to make them show up with an event, or should they appear automatically

EDITEDITEDIT

Ok. First of all, ignore my last post. I figured out the switches to activate, and the pokemon follow now. I realized you forgot to add the Talkative thing in, but I did that anyway as well. My only problem now, is adding in the things that Zingzags put to go in the data folder. I got the first three that were images, but what type of file should the others be? When I click the link, they show up as computer code, and when I try to save it, it saves as a webpage archive, which i don't think is right. Everything else is great. My only thing is since I don't have all the data in the data folder, whenever i try talking to my pokemon, it calls oak, which is a problem...
 
Last edited:

~Angel~

Lead developer for Pokémon Millennium
281
Posts
14
Years
this is quite a bit more descriptive. Thank you. You have done a lot to help people like me. I will try implementing this, and let you know

ok. I just put everything in. No errors come up, which is a good sign, but the pokemon don't show up either. I have all the sprites in the characters folder in graphics. I don't know whats wrong. Do I have to make them show up with an event, or should they appear automatically

EDITEDITEDIT

Ok. First of all, ignore my last post. I figured out the switches to activate, and the pokemon follow now. I realized you forgot to add the Talkative thing in, but I did that anyway as well. My only problem now, is adding in the things that Zingzags put to go in the data folder. I got the first three that were images, but what type of file should the others be? When I click the link, they show up as computer code, and when I try to save it, it saves as a webpage archive, which i don't think is right. Everything else is great. My only thing is since I don't have all the data in the data folder, whenever i try talking to my pokemon, it calls oak, which is a problem...
Oh! Right. I remeber. Talkative or something like that. It does not work. So I have to put in the old code.
Put this in slot 3 of your common events.
Make sure to name it TalkToPokemon
Code:
$PokemonTemp.dependentEvents.talk_to_pokemon
 
10,673
Posts
14
Years
  • Age 30
  • Seen Dec 30, 2023
Rick, you're really starting to bug me a small bit. Read the rules of this section. Take 10 minutes to read all the rules of the sections you post in and you'll not make so many mistakes.

When making a thread, name it properly! A thread's name should describe what that thread is about. Calling a thread "Question" is bad, but calling it "[Question] How do I change the screen size?" is good.


I've gone ahead and renamed this for you.
 

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
Oh! Right. I remeber. Talkative or something like that. It does not work. So I have to put in the old code.
Put this in slot 3 of your common events.
Make sure to name it TalkToPokemon
Code:
$PokemonTemp.dependentEvents.talk_to_pokemon

Ok thank you. I no longer get the problem where it calls oak. Now, I get this error

Spoiler:



I think this is because i still don't have the things in the data folder. I still need help with that. I mentioned it in my last post, but you didn't respond to it. Thank you for all the help so far, I hope this is almost done with. To clarify, I have the png images in the data folder, but am missing all of the code things, because I don't know how to put them in the data folder.
 

~Angel~

Lead developer for Pokémon Millennium
281
Posts
14
Years
Ok thank you. I no longer get the problem where it calls oak. Now, I get this error

Spoiler:



I think this is because i still don't have the things in the data folder. I still need help with that. I mentioned it in my last post, but you didn't respond to it. Thank you for all the help so far, I hope this is almost done with. To clarify, I have the png images in the data folder, but am missing all of the code things, because I don't know how to put them in the data folder.

Run extend text when putting in the TalkToPokemon script. Makes the box larger so you can insert the script with no Errors.
 

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
ok thank you. That fixed the error. Now i can talk to my pokemon, and it plays their cry, and says some text, but nothing shows up above their head. I am assuming this is because i still am missing the rest of the data. any help with that?
 

~Angel~

Lead developer for Pokémon Millennium
281
Posts
14
Years
ok thank you. That fixed the error. Now i can talk to my pokemon, and it plays their cry, and says some text, but nothing shows up above their head. I am assuming this is because i still am missing the rest of the data. any help with that?

Just go back to Zingzags one and put the animations in the animations folder. Edit the settings to the way you want. They will replace over any animations placed in the settings.
 

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
no no no

I have the animations or at least the png images. Zingzags left about 8 attachments. I don't know how to put the ones that weren't images into the data folder

EDITEDITEDIT

Ok. I figured out why it wasn't downloading. I'll figure it out by myself now. I get the general idea. Thank you for all your help. I will be giving you credits along with Help-14 and Zingzags.
 
Last edited:

~Angel~

Lead developer for Pokémon Millennium
281
Posts
14
Years
no no no

I have the animations or at least the png images. Zingzags left about 8 attachments. I don't know how to put the ones that weren't images into the data folder

EDITEDITEDIT

Ok. I figured out why it wasn't downloading. I'll figure it out by myself now. I get the general idea. Thank you for all your help. I will be giving you credits along with Help-14 and Zingzags.

No credit's needed for me. I will only accept them when I figure out why it is not working.
 

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
No credit's needed for me. I will only accept them when I figure out why it is not working.

I want to credit you, as you have replied to literally dozens of my posts asking for help. It is working pretty much perfectly for me. I just need to change up a few animations. Thank you again, and you will receive credit, whether you want it or not:)
 

~Angel~

Lead developer for Pokémon Millennium
281
Posts
14
Years
I want to credit you, as you have replied to literally dozens of my posts asking for help. It is working pretty much perfectly for me. I just need to change up a few animations. Thank you again, and you will receive credit, whether you want it or not:)

All right. I have been very helpful to you a ton XD I don't wish to take credit for other peoples stuff but all right.
 

Nerameshu

Regional Explorer
32
Posts
12
Years
  • Age 33
  • Seen Oct 13, 2012
Since I'm completely lost in just looking at this scripting, would one of you guys mind posting the full script for following poke's, but with one modification? I want to have an in-game choice to be able to make your lead Pokemon follow you or not.

Also, if I may be so bold as to ask for the Pokemon sprites, I will be much appreciative.
 

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
Since I'm completely lost in just looking at this scripting, would one of you guys mind posting the full script for following poke's, but with one modification? I want to have an in-game choice to be able to make your lead Pokemon follow you or not.

Also, if I may be so bold as to ask for the Pokemon sprites, I will be much appreciative.

The pokemon sprites can be found in Zingzags post in the Tutorials section, and in Help-14's original post. You make the pokemon follow you in events, although this is not working quite perfectly for me yet.
 

Nerameshu

Regional Explorer
32
Posts
12
Years
  • Age 33
  • Seen Oct 13, 2012
Awesome, ok. Thank you. And the credits list is Zingzags, Help-14, and you guys for this, right?
 

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
Awesome, ok. Thank you. And the credits list is Zingzags, Help-14, and you guys for this, right?

Help-14 and Zingzags. I am also crediting Rick1234 as he helped me personally with over 20 responses. Definitely not me. Just Help-14 and Zingzags. Rick1234 if you want, but he is modest, and doesn't want it, or require it
 
49
Posts
16
Years
  • Seen Apr 28, 2013
v8 essentials with Pokémon follow and ultimate b/w add-on ,i got it 100% working with all Pokémon except I don't have gen 5 shinny's witch I gather rick1234 does but they are easy to implement. i figured out why the exp didn't generate, it was because the Pokémon pb base exp for all Pokémon was set to 0

#EDIT ok fixed exp Problem it should be fine now.
#EDIT here's the linkhttp://www.mediafire.com/?av2o3aba0qn78yk


if you youse the debug system to change pokemon you need to refresh the dependent event in order for the new pokemon to follow.

the script $PokemonTemp.dependentEvents.refresh_sprite only refreshes the the dependent event so when your Pokémon faint it won't make your Pokémon follow you again, for that to happen you need to place another dependent event and the script pbPokemonFollow() () being the event number of the dependent event. You do this in the start over events in Pokémon centres and in the players home. (which I have already done.)

I've already changed that in the Pokémon centre example and also a $PokemonTemp.dependentEvents.refresh_sprite had to be inserted into the daycear centre event so your party will be updated with the right following Pokémon.

hope this helps you out rick1234

credits go to
P-Sign
Clowcardruler
Maruno
Venom12
FL .
for the ultamit b/w kit

rick 1234 for the hero from b/w2 used to replace red

and help-14 for the follow script and zingzags for the fixes.
(i had nothing to do with the creation of this so no need to credit me, i just put them all together for people to enjoy.)
 
Last edited:

Rayd12smitty

Shadow Maker
645
Posts
12
Years
  • Seen Feb 21, 2016
v8 essentials with Pokémon follow and ultimate b/w add-on ,i got it 100% working with all Pokémon except I don't have gen 5 shinny's witch I gather rick1234 does but they are easy to implement. i figured out why the exp didn't generate, it was because the Pokémon pb base exp for all Pokémon was set to 0

#EDIT ok fixed exp Problem it should be fine now.
#EDIT here's the linkhttp://www.mediafire.com/?av2o3aba0qn78yk


if you youse the debug system to change pokemon you need to refresh the dependent event in order for the new pokemon to follow.

the script $PokemonTemp.dependentEvents.refresh_sprite only refreshes the the dependent event so when your Pokémon faint it won't make your Pokémon follow you again, for that to happen you need to place another dependent event and the script pbPokemonFollow() () being the event number of the dependent event. You do this in the start over events in Pokémon centres and in the players home. (which I have already done.)

I've already changed that in the Pokémon centre example and also a $PokemonTemp.dependentEvents.refresh_sprite had to be inserted into the daycear centre event so your party will be updated with the right following Pokémon.

hope this helps you out rick1234

credits go to
P-Sign
Clowcardruler
Maruno
Venom12
FL .
for the ultamit b/w kit

rick 1234 for the hero from b/w2 used to replace red

and help-14 for the follow script and zingzags for the fixes.
(i had nothing to do with the creation of this so no need to credit me, i just put them all together for people to enjoy.)


O wow. You put this all together. That is awesome. Now I'm wishing I would have waited a day, and downloaded your file. Well, there goes five hours of my life. Nice work though
 

~Angel~

Lead developer for Pokémon Millennium
281
Posts
14
Years
O wow. You put this all together. That is awesome. Now I'm wishing I would have waited a day, and downloaded your file. Well, there goes five hours of my life. Nice work though

Hm. He has put it together extremely well. But I already know where to place all the stuff. It's just the B/W pokemon that don't appear on the screen.
 

Nerameshu

Regional Explorer
32
Posts
12
Years
  • Age 33
  • Seen Oct 13, 2012
So to use the follow script, I just need to follow the download link? Or, in order to keep using Essentials, should I try to implement the scripting myself?

Sorry, script newbie. :p
 
Back
Top