Go Back   The PokéCommunity Forums > Create & Discover > Game Development > Scripts & Tutorials
Reload this Page Essentials Script Help-14's Pokémon Following Character script - fixes and additions

Notices
For all updates, view the main page.

Scripts & Tutorials This forum is for scripts and code, as well as all kinds of tutorials, software, tools and so forth. Remember to give credit!
The thread revival limit does not apply here.



Closed Thread
 
Thread Tools
  #1    
Old May 30th, 2012 (4:23 PM). Edited June 20th, 2012 by zingzags.
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

Well here you go :p
I know it can be cleaner and shortened.

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" [email protected][i].x [email protected][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

def Talkative $PokemonTemp.dependentEvents.talk_to_pokemon end

replace Kernel.pbMountBike with

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 dependent events

Code:
class PokemonTemp
  attr_accessor :dependentEvents

def dependentEvents @dependentEvents=DependentEvents.new if [email protected] 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 [email protected] 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 [email protected][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 [email protected][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 [email protected][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 [email protected][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 [email protected][i] next if [email protected][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 [email protected] 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 these to your 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

Put this in common events and name it TalkToPokemon

Code:
Talkative

Put this in PokemonParty

Code:
$PokemonTemp.dependentEvents.refresh_sprite
under
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)

Also place it in PokemonStorage under

Code:
def pbTrainerPC
 Kernel.pbMessage(_INTL("\\se[computeropen]{1} booted up the PC.",$Trainer.name))
 pbTrainerPCMenu
  pbSEPlay("computerclose")

also under this

Code:
 def access
   Kernel.pbMessage(_INTL("\\se[accesspc]Accessed {1}'s PC.",$Trainer.name))
   pbTrainerPCMenu

in def update of Game_player_ add

$PokemonTemp.dependentEvents.add_following_time

under
$PokemonTemp.dependentEvents.updateDependentEvents

Replace pbEndBattle in Pokemon_ActualScene

Code:
def pbEndBattle(result)
    @abortable=false
    pbShowWindow(BLANK)
    # Fade out all sprites
    $PokemonTemp.dependentEvents.check_faint
    pbBGMFade(1.0)
    pbFadeOutAndHide(@sprites)
    pbDisposeSprites
  end

Also after you are done healing a pokemon from the pokemon center put this in

Code:
$PokemonTemp.dependentEvents.refresh_sprite

Place this in PokemonField above def kernel.pbReceiveItem

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

http://dl.dropbox.com/u/7240024/Pokemon-Follow.png
http://dl.dropbox.com/u/7240024/emo.png
http://dl.dropbox.com/u/7240024/emo2.png
http://dl.dropbox.com/u/7240024/Animations.rxdata
http://dl.dropbox.com/u/7240024/Emo_Sing.anm
http://dl.dropbox.com/u/7240024/Emo_Poison.anm
http://dl.dropbox.com/u/7240024/Emo_Normal.anm
http://dl.dropbox.com/u/7240024/Emo_love.anm
http://dl.dropbox.com/u/7240024/Emo_Hate.anm
http://dl.dropbox.com/u/7240024/Emo_Happy.anm
http://dl.dropbox.com/u/7240024/Characters.rar
That should be everything, report any errors down below, anything to help make the code shorter and better post below or pm me.

Attached Thumbnails
Pokemon-Follow.png‎   emo.png‎   emo2.png‎  
__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon

Relevant Advertising!

  #2    
Old May 31st, 2012 (2:30 AM).
Nickalooose Nickalooose is offline
--------------------
 
Join Date: Mar 2008
Gender: Female
Posts: 1,285

Impressed.

I will test this later, not right now, but I will... If anyone else can test this now and let us know any bugs and such... It's nice you've placed all of the resources too, sometimes some people just give the script... +5 to you haha

  #3    
Old May 31st, 2012 (8:35 AM).
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

I forgot something in def update of Game_player_ add

$PokemonTemp.dependentEvents.add_following_time

under
$PokemonTemp.dependentEvents.updateDependentEvents

__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon
  #4    
Old May 31st, 2012 (9:16 AM).
venom12's Avatar
venom12 venom12 is offline
Pokemon Crystal Rain Relased
 
Join Date: Sep 2006
Age: 25
Gender: Male
Nature: Adamant
Posts: 528
Send a message via Windows Live Messenger to venom12

Great work, i didnt tested much but for now works ok, one thing i would like to have in that is, when we dont moving pokemon still steps like on hgss.

  #5    
Old May 31st, 2012 (10:50 AM). Edited May 31st, 2012 by zingzags.
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

Quote originally posted by venom12:
Great work, i didnt tested much but for now works ok, one thing i would like to have in that is, when we dont moving pokemon still steps like on hgss.

That is a good idea, but it would require the animation to just play. I have no idea how to do that though.

Updated the thread because I forgot a few things.

__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon
  #6    
Old June 2nd, 2012 (10:56 AM).
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

updated, added egg check to see if you have an egg in the first slot of your party. If you have an egg in the first slot of your party the dependent event gets removed.

__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon
  #7    
Old June 2nd, 2012 (12:31 PM).
Lord Varion's Avatar
Lord Varion Lord Varion is offline
Guess who's back?
 
Join Date: Feb 2009
Age: 21
Gender: Other
Nature: Naughty
Posts: 2,648

I never saw the original script.
But, I'm guessing I'd need the sprites for the pokémon.
But, do I need the old script too ?

__________________
gone.
  #8    
Old June 3rd, 2012 (9:50 AM).
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

Quote originally posted by Nintendork15:
I never saw the original script.
But, I'm guessing I'd need the sprites for the pokémon.
But, do I need the old script too ?
Yes
Yes
No
I haven't uploaded the sprites but they are in the original thread, search for help -14.

__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon
  #9    
Old June 5th, 2012 (6:48 AM). Edited June 5th, 2012 by FHJoker.
FHJoker's Avatar
FHJoker FHJoker is offline
Re-thinking Osmium
 
Join Date: Dec 2007
Location: Somwhere alone in peace
Age: 24
Gender: Male
Nature: Relaxed
Posts: 88

I did the above but i got this error message when the GotPokemon Switch is turned on.

---------------------------
Pokemon Essentials
---------------------------
Exception: TypeError

Message: cannot convert Fixnum into String

WalkingPkMn:44:in `+'

WalkingPkMn:44:in `add_following_time'

Game_Player_:401:in `update_old'

Walk_Run:71:in `update'

Scene_Map:85:in `miniupdate'

Scene_Map:83:in `loop'

Scene_Map:95:in `miniupdate'

PokemonMessages:145:in `pbUpdateSceneMap'

PokemonPauseMenu: 16 : in `pbShowCommands'

PokemonPauseMenu: 12: in `loop'

This exception was logged

  #10    
Old June 5th, 2012 (12:45 PM).
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

Quote originally posted by FHJoker:
I did the above but i got this error message when the GotPokemon Switch is turned on.

---------------------------
Pokemon Essentials
---------------------------
Exception: TypeError

Message: cannot convert Fixnum into String

WalkingPkMn:44:in `+'

WalkingPkMn:44:in `add_following_time'

Game_Player_:401:in `update_old'

Walk_Run:71:in `update'

Scene_Map:85:in `miniupdate'

Scene_Map:83:in `loop'

Scene_Map:95:in `miniupdate'

PokemonMessages:145:in `pbUpdateSceneMap'

PokemonPauseMenu: 16 : in `pbShowCommands'

PokemonPauseMenu: 12: in `loop'

This exception was logged

^ You must did something wrong, because it works fine for me.

Ill check that out, I updated the thread again, I forgot to add something(again), and thanks to Maruno there is an easier way to add random items.

__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon
  #11    
Old June 6th, 2012 (9:19 AM). Edited June 6th, 2012 by FHJoker.
FHJoker's Avatar
FHJoker FHJoker is offline
Re-thinking Osmium
 
Join Date: Dec 2007
Location: Somwhere alone in peace
Age: 24
Gender: Male
Nature: Relaxed
Posts: 88

I copied it again and got almost the same

---------------------------
Pokemon Essentials
---------------------------
Exception: TypeError

Message: cannot convert Fixnum into String

FollowingCharacter:44:in `+'

FollowingCharacter:44:in `add_following_time'

Game_Player_:401:in `update_old'

Walk_Run:71:in `update'

Scene_Map:104:in `update'

Scene_Map:101:in `loop'

Scene_Map:114:in `update'

Scene_Map:68:in `main'

Scene_Map:65:in `loop'

Scene_Map:72:in `main'

Edit: I put the script in a fresh version of Essentials and no error but nothing shows up

Edit again: Got Pikachu to show up but it says nothing except for it's cry no emotion bubble, how do i fix it. And how to I make gender differences show up?

Edit Again: I got another problem, using the latest version of essentials unedited before the follow script, I can only talk (hear their cry) in Test map2(Where I got my pokemon) and Test Map 1(outside) not in the daycare map I get something like this
---------------------------
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'

This exception was logged
---------------------------
OK
---------------------------

__________________

  #12    
Old June 6th, 2012 (12:46 PM).
ChaosLord's Avatar
ChaosLord ChaosLord is offline
Game Dev Wanderer
 
Join Date: Nov 2010
Gender: Male
Nature: Bold
Posts: 58

Looks great, but which section is pbMountBike's at? It's the only thing missing part I actually need. Seems to work without it, though when talking to your Pokemon, you get a call from Prof.Oak(Testing this with the latest version of Essentials.)

  #13    
Old June 6th, 2012 (6:49 PM).
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

Quote originally posted by FHJoker:
I copied it again and got almost the same

---------------------------
Pokemon Essentials
---------------------------
Exception: TypeError

Message: cannot convert Fixnum into String

FollowingCharacter:44:in `+'

FollowingCharacter:44:in `add_following_time'

Game_Player_:401:in `update_old'

Walk_Run:71:in `update'

Scene_Map:104:in `update'

Scene_Map:101:in `loop'

Scene_Map:114:in `update'

Scene_Map:68:in `main'

Scene_Map:65:in `loop'

Scene_Map:72:in `main'

Edit: I put the script in a fresh version of Essentials and no error but nothing shows up

Edit again: Got Pikachu to show up but it says nothing except for it's cry no emotion bubble, how do i fix it. And how to I make gender differences show up?

Edit Again: I got another problem, using the latest version of essentials unedited before the follow script, I can only talk (hear their cry) in Test map2(Where I got my pokemon) and Test Map 1(outside) not in the daycare map I get something like this
---------------------------
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'

This exception was logged
---------------------------
OK
---------------------------

Ill try to see into that.

__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon
  #14    
Old June 10th, 2012 (11:33 AM). Edited June 10th, 2012 by ~Angel~.
~Angel~'s Avatar
~Angel~ ~Angel~ is offline
Lead developer for Pokémon Millennium
 
Join Date: Mar 2010
Location: United States Of America.
Age: 18
Gender: Male
Nature: Quiet
Posts: 272

Hm...Nice job yet I can't figure out how to add
in def update of Game_player_ add

$PokemonTemp.dependentEvents.add_following_time

under
$PokemonTemp.dependentEvents.updateDependentEvents
I am unsure of where to put it. I looked but I don't see where you say to put it.

Edit: Well Never mind I got it but now It's giving me a problem with the
Put this in PokemonParty
Code:
$PokemonTemp.dependentEvents.refresh_sprite part as well as the piece under it. I put it exactly where you said to unless I am mistaken.
Edit 2:
---------------------------
Pokemon Essentials
---------------------------
Script 'PokemonParty' line 2: NoMethodError occurred.

undefined method `dependentEvents' for nil:NilClass
---------------------------
OK
---------------------------
This is the Error I get. Not sure of what it means. Maybe you can help me? Now it's just giving me a bunch of errors. I am going to repute it back in and start over.
Edit: I got it to work but now I need to figure out how to make the pokemon follow.
My Last Edit: How do I add pokemon? It's not working for me.

  #15    
Old June 17th, 2012 (11:17 AM). Edited June 17th, 2012 by zingzags.
zingzags's Avatar
zingzags zingzags is offline
PokemonGDX creator
 
Join Date: Jan 2009
Location: Boston
Age: 22
Nature: Adamant
Posts: 561

Update to fix the unlock problem comment out this line
in Interperter line 512:

Code:
$game_map.events[@event_id].unlock
to
Code:
#$game_map.events[@event_id].unlock
I will try to fix the pokemon not talking soon.

EDIT:nvm I fixed the no talking issue

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" [email protected][i].x [email protected][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

__________________
Check out the Pokemon Game Engine I am working on:
https://github.com/sjosegarcia/Pokemon
  #16    
Old June 18th, 2012 (9:09 AM). Edited June 18th, 2012 by ~Angel~.
~Angel~'s Avatar
~Angel~ ~Angel~ is offline
Lead developer for Pokémon Millennium
 
Join Date: Mar 2010
Location: United States Of America.
Age: 18
Gender: Male
Nature: Quiet
Posts: 272

Everything works fine. I like it :D I just tested it's perfect. Yet in the script you should use CNG's way. He was able to make the pokemon moving even with out the player taking a step. You should look into it. Also How do I make the pokemon appear outside of the pokeball without adding 6 pokemon? Just a quick question. Just looked at it once again. The script now does not change it so Pokemon Come out when collected I might upload a video if you want to know what I mean.

  #17    
Old June 18th, 2012 (10:50 AM).
p.claydon p.claydon is online now
 
Join Date: Jan 2011
Gender:
Posts: 325

ok how do i get the pokemon out? ive added all the script stuff from the 1st post but dont know were to go from there (im also asuming the .anm files go in the animation folder

  #18    
Old June 18th, 2012 (10:55 AM). Edited June 18th, 2012 by ~Angel~.
~Angel~'s Avatar
~Angel~ ~Angel~ is offline
Lead developer for Pokémon Millennium
 
Join Date: Mar 2010
Location: United States Of America.
Age: 18
Gender: Male
Nature: Quiet
Posts: 272

Quote originally posted by p.claydon:
ok how do i get the pokemon out? ive added all the script stuff from the 1st post but dont know were to go from there (im also asuming the .anm files go in the animation folder

It's a simple set up. Just read it though and think of where you might find the stuff he is talking about. Also the .Anm does not go in that folder. It goes in the Data Folder.
Edit: For the people who can't figure out how to put this in I made a upload for them. This makes it so much easier on Zingzags. Just dowload and replace the folder you have. Warning! This will replace all scripts and Maps you have made. I suggest coping the Map data you all ready have and Replacing it once done. Make sure to delete the Map data in the folder once extracted. Your welcome Zingzags ;D I thought this would help.
Edit: Left the link out XD http://www.mediafire.com/?mdxz0zxm7xkjbrp This file does not contain the Overworlds for it. The scripts are all seperated by me to make sure I know where to place stuff. I will update this link everytime there is a new update on the script.

  #19    
Old June 18th, 2012 (11:47 AM).
p.claydon p.claydon is online now
 
Join Date: Jan 2011
Gender:
Posts: 325

ok your demo works but why is the sprite bulbasaur when the pokemon 1st starts to follow you?

  #20    
Old June 18th, 2012 (12:07 PM).
~Angel~'s Avatar
~Angel~ ~Angel~ is offline
Lead developer for Pokémon Millennium
 
Join Date: Mar 2010
Location: United States Of America.
Age: 18
Gender: Male
Nature: Quiet
Posts: 272

I just set it that way. I was getting annoyed with the Over worlds that were there I just set it that way.

  #21    
Old June 18th, 2012 (12:09 PM).
p.claydon p.claydon is online now
 
Join Date: Jan 2011
Gender:
Posts: 325

yh just figured out roughly how it works (i had the call event wrong) but what does the 3 mean in the call script
Kernel.pbAddDependency2(7, "Dependent", 3)

  #22    
Old June 18th, 2012 (12:25 PM). Edited June 18th, 2012 by ~Angel~.
~Angel~'s Avatar
~Angel~ ~Angel~ is offline
Lead developer for Pokémon Millennium
 
Join Date: Mar 2010
Location: United States Of America.
Age: 18
Gender: Male
Nature: Quiet
Posts: 272

Quote originally posted by p.claydon:
yh just figured out roughly how it works (i had the call event wrong) but what does the 3 mean in the call script
Kernel.pbAddDependency2(7, "Dependent", 3)

I am unsure of what the '3' Means. Sense it's based of the work Help-14 I figured the same scripts he used works for the same exact one here. Once the newer version of this came up it stop working. So now it's just a matter of time until Zingzag's checks back in to tell us more. 3 is for the common event.

  #23    
Old June 18th, 2012 (12:48 PM). Edited June 18th, 2012 by p.claydon.
p.claydon p.claydon is online now
 
Join Date: Jan 2011
Gender:
Posts: 325

oh

shame we cant scroll through the pokemon like we used too

EDIT

if all your pokemon faint then your pokemon no longer follows you

EDIT

if all your pokemon faint then your pokemon no longer follows you - Fixed

  #24    
Old June 18th, 2012 (4:20 PM).
~Angel~'s Avatar
~Angel~ ~Angel~ is offline
Lead developer for Pokémon Millennium
 
Join Date: Mar 2010
Location: United States Of America.
Age: 18
Gender: Male
Nature: Quiet
Posts: 272

You need to update the Pokecenter scripts to. That's why they did not follow. Open up a nurse and add in this: $PokemonTemp.dependentEvents.refresh_sprite

  #25    
Old June 18th, 2012 (4:32 PM).
p.claydon p.claydon is online now
 
Join Date: Jan 2011
Gender:
Posts: 325

yh forgot that there was a second event page for the nurse for when you loose soo it seams to be almost identical to the old script (except its less buggy and you can not switch between your pokemon/turn off)

Closed Thread
Quick Reply

Sponsored Links
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -8. The time now is 1:31 PM.