BADGEFORCUT=0
BADGEFORFLASH=1
BADGEFORROCKSMASH=2
BADGEFORSURF=3
BADGEFORLAVA=3
BADGEFORFLY=4
BADGEFORSTRENGTH=5
BADGEFORDIVE=6
BADGEFORWATERFALL=7
class MoveHandlerHash < HandlerHash
def initialize
super(:PBMoves)
end
end
module HiddenMoveHandlers
CanUseMove=MoveHandlerHash.new
UseMove=MoveHandlerHash.new
def self.addCanUseMove(item,proc)
CanUseMove.add(item,proc)
end
def self.addUseMove(item,proc)
UseMove.add(item,proc)
end
def self.hasHandler(item)
return CanUseMove[item]!=nil && UseMove[item]!=nil
end
def self.triggerCanUseMove(item,pokemon)
# Returns whether move can be used
if !CanUseMove[item]
return false
else
return CanUseMove.trigger(item,pokemon)
end
end
def self.triggerUseMove(item,pokemon)
# Returns whether move was used
if !UseMove[item]
return false
else
return UseMove.trigger(item,pokemon)
end
end
end
def pbHiddenMoveAnimation(pokemon)
return false if !pokemon
viewport=Viewport.new(0,0,0,0)
viewport.z=99999
ptinterp=nil
plane=ColoredPlane.new(Color.new(0,0,0,255),viewport)
sprite=PokemonSprite.new
sprite.z=99999
sprite.setPokemonBitmap(pokemon)
sprite.visible=false
interp=RectInterpolator.new(
Rect.new(Graphics.width,Graphics.height/2,0,0),
Rect.new(0,(Graphics.height-sprite.bitmap.height)/2,
Graphics.width,sprite.bitmap.height),20
)
sprite.ox=sprite.bitmap.width/2
sprite.oy=sprite.bitmap.height/2
strobes=[]
15.times do |i|
strobe=BitmapSprite.new(80,8,viewport)
strobe.bitmap.fill_rect(0,0,80,8,Color.new(248,248,248))
strobe.visible=false
strobes.push(strobe)
end
phase=1
frames=0
begin
Graphics.update
Input.update
case phase
when 1
interp.update
interp.set(viewport.rect)
if interp.done?
phase=2
ptinterp=PointInterpolator.new(
Graphics.width+(sprite.bitmap.width/2),Graphics.height/2,
Graphics.width/2,Graphics.height/2,15
)
end
when 2
ptinterp.update
sprite.x=ptinterp.x
sprite.y=ptinterp.y
sprite.visible=true
if ptinterp.done?
phase=3
pbPlayCry(pokemon)
frames=0
end
when 3
frames+=1
if frames>30
phase=4
ptinterp=PointInterpolator.new(
Graphics.width/2,Graphics.height/2,
-(sprite.bitmap.width/2),Graphics.height/2,15
)
frames=0
end
when 4
ptinterp.update
sprite.x=ptinterp.x
sprite.y=ptinterp.y
if ptinterp.done?
phase=5
sprite.visible=false
interp=RectInterpolator.new(
Rect.new(0,(Graphics.height-sprite.bitmap.height)/2,
Graphics.width,sprite.bitmap.height),
Rect.new(0,(Graphics.height)/2,Graphics.width,0),20
)
end
when 5
interp.update
interp.set(viewport.rect)
phase=6 if interp.done?
end
for strobe in strobes
strobe.ox=strobe.viewport.rect.x
strobe.oy=strobe.viewport.rect.y
if strobe.visible && strobe.x+strobe.src_rect.width>=0
strobe.x-=32
elsif !strobe.visible
randomY=[80,100,120,140,160,180,200,220,240]
strobe.y=randomY[rand(randomY.length)]
strobe.x=rand(Graphics.width)
strobe.src_rect.width=20+rand(40)
strobe.visible=true
else
randomY=[80,100,120,140,160,180,200,220,240]
strobe.y=randomY[rand(randomY.length)]
strobe.x=Graphics.width+rand(Graphics.width/4)
strobe.src_rect.width=20+rand(40)
end
end
pbUpdateSceneMap
end while phase!=6
sprite.dispose
for strobe in strobes
strobe.dispose
end
strobes.clear
plane.dispose
viewport.dispose
return true
end
def Kernel.pbCut
if $DEBUG || $Trainer.badges[BADGEFORCUT]
movefinder=Kernel.pbCheckMove(:CUT)
if $DEBUG || movefinder
Kernel.pbMessage(_INTL("This tree looks like it can be cut down!\1"))
if Kernel.pbConfirmMessage(_INTL("Would you like to cut it?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} used Cut!",speciesname))
pbHiddenMoveAnimation(movefinder)
return true
end
else
Kernel.pbMessage(_INTL("This tree looks like it can be cut down."))
end
else
Kernel.pbMessage(_INTL("This tree looks like it can be cut down."))
end
return false
end
def Kernel.pbHeadbuttEffect(event)
a=((event.x*event.y+event.x*event.y)/5)%10
b=($Trainer.id&0xFFFF)%10
chance=1
if a==b
chance=8
elsif a>b && (a-b).abs<5
chance=5
elsif a<b && (a-b).abs>5
chance=5
end
if rand(10)>=chance
Kernel.pbMessage(_INTL("Nope. Nothing..."))
else
if !pbEncounter(chance==1 ? 7 : 8)
Kernel.pbMessage(_INTL("Nope. Nothing..."))
end
end
end
def Kernel.pbHeadbutt(event)
movefinder=Kernel.pbCheckMove(:HEADBUTT)
if $DEBUG || movefinder
if Kernel.pbConfirmMessage(_INTL("A Pokémon could be in this tree. Want to headbutt it?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} did a headbutt!",speciesname))
Kernel.pbHeadbuttEffect(event)
end
else
Kernel.pbMessage(_INTL("A Pokémon could be in this tree. Maybe a Pokémon could shake it."))
end
Input.update
return
end
def pbRockSmashRandomEncounter
if rand(100)<25
pbEncounter(EncounterTypes::RockSmash)
end
end
def Kernel.pbRockSmash
if $DEBUG || $Trainer.badges[BADGEFORROCKSMASH]
movefinder=Kernel.pbCheckMove(:ROCKSMASH)
if $DEBUG || movefinder
if Kernel.pbConfirmMessage(_INTL("This rock appears breakable. Would you like to use Rock Smash?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} used Rock Smash!",speciesname))
pbHiddenMoveAnimation(movefinder)
return true
end
else
Kernel.pbMessage(_INTL("It's a rugged rock, but a Pokémon may be able to smash it."))
end
else
Kernel.pbMessage(_INTL("It's a rugged rock, but a Pokémon may be able to smash it."))
end
return false
end
def Kernel.pbStrength
if $PokemonMap.strengthUsed
Kernel.pbMessage(_INTL("Strength made it possible to move boulders around."))
elsif $DEBUG || $Trainer.badges[BADGEFORSTRENGTH]
movefinder=Kernel.pbCheckMove(:STRENGTH)
if $DEBUG || movefinder
Kernel.pbMessage(_INTL("It's a big boulder, but a Pokémon may be able to push it aside."))
if Kernel.pbConfirmMessage(_INTL("Would you like to use Strength?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
pbHiddenMoveAnimation(movefinder)
Kernel.pbMessage(_INTL("{1} used Strength!\1",speciesname))
Kernel.pbMessage(_INTL("{1}'s Strength made it possible to move boulders around!",speciesname))
$PokemonMap.strengthUsed=true
return true
end
else
Kernel.pbMessage(_INTL("It's a big boulder, but a Pokémon may be able to push it aside."))
end
else
Kernel.pbMessage(_INTL("It's a big boulder, but a Pokémon may be able to push it aside."))
end
return false
end
def Kernel.pbSurf
if $game_player.pbHasDependentEvents?
return false
end
if $DEBUG || $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)
surfbgm=pbGetMetadata(0,MetadataSurfBGM)
if surfbgm
pbCueBGM(surfbgm,0.5)
end
pbStartSurfing()
return true
end
end
end
return false
end
def Kernel.pbLava
if $game_player.pbHasDependentEvents?
return false
end
if $DEBUG || $Trainer.badges[BADGEFORLAVA]
movefinder=Kernel.pbCheckMove(:LAVA)
if $DEBUG || movefinder
if Kernel.pbConfirmMessage(_INTL("You can surf on this lava... Would you like to surf?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} used Lava!",speciesname))
pbHiddenMoveAnimation(movefinder)
surfbgm=pbGetMetadata(0,MetadataSurfBGM)
if surfbgm
pbCueBGM(surfbgm,0.5)
end
pbStartSurfing()
return true
end
end
end
return false
end
def Kernel.pbSurfacing
return if !$PokemonGlobal.diving
divemap=nil
meta=pbLoadMetadata
for i in 0...meta.length
if meta[i] && meta[i][MetadataDiveMap]
if meta[i][MetadataDiveMap]==$game_map.map_id
divemap=i
break
end
end
end
return if !divemap
movefinder=Kernel.pbCheckMove(:DIVE)
if $DEBUG || (movefinder && $Trainer.badges[BADGEFORDIVE])
if Kernel.pbConfirmMessage(_INTL("Light is filtering down from above. Would you like to use Dive?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} used Dive.",speciesname))
pbHiddenMoveAnimation(movefinder)
pbFadeOutIn(99999){
$game_temp.player_new_map_id=divemap
$game_temp.player_new_x=$game_player.x
$game_temp.player_new_y=$game_player.y
$game_temp.player_new_direction=$game_player.direction
pbCancelVehicles
$PokemonGlobal.surfing=true
pbUpdateVehicle
$scene.transfer_player(false)
surfbgm=pbGetMetadata(0,MetadataSurfBGM)
if surfbgm
pbBGMPlay(surfbgm)
else
$game_map.autoplayAsCue
end
$game_map.refresh
}
return true
end
else
Kernel.pbConfirmMessage(_INTL("Light is filtering down from above. A Pokémon may be able to surface here."))
end
return false
end
def Kernel.pbAscendWaterfall(event=nil)
event=$game_player if !event
return if !event
return if event.direction!=8 # can't ascend if not facing up
oldthrough=event.through
oldmovespeed=event.move_speed
terrain=Kernel.pbFacingTerrainTag(nil,event)
return if terrain!=PBTerrain::Waterfall && terrain!=PBTerrain::WaterfallCrest
event.through=true
event.move_speed=2
loop do
event.move_up
terrain=pbGetTerrainTag(event)
break if terrain!=PBTerrain::Waterfall && terrain!=PBTerrain::WaterfallCrest
end
event.through=oldthrough
event.move_speed=oldmovespeed
end
def Kernel.pbDescendWaterfall(event=nil)
event=$game_player if !event
return if !event
return if event.direction!=2 # Can't descend if not facing down
oldthrough=event.through
oldmovespeed=event.move_speed
terrain=Kernel.pbFacingTerrainTag(nil,event)
return if terrain!=PBTerrain::Waterfall && terrain!=PBTerrain::WaterfallCrest
event.through=true
event.move_speed=2
loop do
event.move_down
terrain=pbGetTerrainTag(event)
break if terrain!=PBTerrain::Waterfall && terrain!=PBTerrain::WaterfallCrest
end
event.through=oldthrough
event.move_speed=oldmovespeed
end
def Kernel.pbSlideOnIce(event=nil)
event=$game_player if !event
return if !event
direction=event.direction
continuing=true
oldwalkanime=event.walk_anime
event.straighten
event.walk_anime=false
begin
break if !event.passable?(event.x,event.y,direction)
case direction
when 2
event.move_down
when 4
event.move_left
when 6
event.move_right
when 8
event.move_up
end
while event.moving?
Graphics.update
Input.update
pbUpdateSceneMap
end
end while pbGetTerrainTag(event)==PBTerrain::Ice
event.walk_anime=oldwalkanime
end
def Kernel.pbWaterfall
if $DEBUG || $Trainer.badges[BADGEFORWATERFALL]
movefinder=Kernel.pbCheckMove(:WATERFALL)
if $DEBUG || movefinder
if Kernel.pbConfirmMessage(_INTL("It's a large waterfall. Would you like to use Waterfall?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} used Waterfall.",speciesname))
pbHiddenMoveAnimation(movefinder)
pbAscendWaterfall
return true
end
else
Kernel.pbMessage(_INTL("A wall of water is crashing down with a mighty roar."))
end
else
Kernel.pbMessage(_INTL("A wall of water is crashing down with a mighty roar."))
end
return false
end
def Kernel.pbDive
divemap=pbGetMetadata($game_map.map_id,MetadataDiveMap)
return false if !divemap
if $DEBUG || $Trainer.badges[BADGEFORDIVE]
movefinder=Kernel.pbCheckMove(:DIVE)
if $DEBUG || movefinder
if Kernel.pbConfirmMessage(_INTL("The sea is deep here. Would you like to use Dive?"))
speciesname=!movefinder ? $Trainer.name : movefinder.name
Kernel.pbMessage(_INTL("{1} used Dive.",speciesname))
pbHiddenMoveAnimation(movefinder)
pbFadeOutIn(99999){
$game_temp.player_new_map_id=divemap
$game_temp.player_new_x=$game_player.x
$game_temp.player_new_y=$game_player.y
$game_temp.player_new_direction=$game_player.direction
pbCancelVehicles
$PokemonGlobal.diving=true
pbUpdateVehicle
$scene.transfer_player(false)
$game_map.autoplay
$game_map.refresh
}
return true
end
else
Kernel.pbMessage(_INTL("The sea is deep here. A Pokémon may be able to go underwater."))
end
else
Kernel.pbMessage(_INTL("The sea is deep here. A Pokémon may be able to go underwater."))
end
return false
end
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 pbIsWaterTag?(currentTag)&&!pbIsWaterTag?(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)
end
return true
end
return false
end
def pbEndLava(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 pbIsWaterTag?(currentTag)&&!pbIsWaterTag?(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)
end
return true
end
return false
end
HiddenMoveHandlers::CanUseMove.add(:FLY,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:CUT,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:HEADBUTT,proc{|move,pkmn|
facingEvent=$game_player.pbFacingEvent
if !facingEvent || facingEvent.name!="HeadbuttTree"
Kernel.pbMessage(_INTL("Can't use that here."))
return false
end
return true
})
HiddenMoveHandlers::CanUseMove.add(:SURF,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:STRENGTH,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:ROCKSMASH,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:FLASH,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:WATERFALL,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:DIVE,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:TELEPORT,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:DIG,proc{|move,pkmn|
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
})
HiddenMoveHandlers::CanUseMove.add(:SWEETSCENT,proc{|move,pkmn|
return true
})
HiddenMoveHandlers::UseMove.add(:FLY,proc{|move,pokemon|
if !$PokemonTemp.flydata
Kernel.pbMessage(_INTL("Can't use that here."))
end
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbFadeOutIn(99999){
$game_temp.player_new_map_id=$PokemonTemp.flydata[0]
$game_temp.player_new_x=$PokemonTemp.flydata[1]
$game_temp.player_new_y=$PokemonTemp.flydata[2]
$PokemonTemp.flydata=nil
$game_temp.player_new_direction=2
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
return true
})
HiddenMoveHandlers::UseMove.add(:CUT,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
facingEvent=$game_player.pbFacingEvent
if facingEvent
facingEvent.erase
$PokemonMap.addErasedEvent(facingEvent.id)
end
return true
})
HiddenMoveHandlers::UseMove.add(:SURF,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbStartSurfing()
return true
})
HiddenMoveHandlers::UseMove.add(:LAVA,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbStartSurfing()
return true
})
HiddenMoveHandlers::UseMove.add(:STRENGTH,proc{|move,pokemon|
pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!\1",pokemon.name,PBMoves.getName(move)))
Kernel.pbMessage(_INTL("{1}'s Strength made it possible to move boulders around!",pokemon.name))
$PokemonGlobal.strengthUsed=true
return true
})
HiddenMoveHandlers::UseMove.add(:ROCKSMASH,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
facingEvent=$game_player.pbFacingEvent
if facingEvent
facingEvent.erase
$PokemonMap.addErasedEvent(facingEvent.id)
end
return true
})
HiddenMoveHandlers::UseMove.add(:FLASH,proc{|move,pokemon|
darkness=$PokemonTemp.darknessSprite
return false if !darkness || darkness.disposed?
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
$PokemonGlobal.flashUsed=true
while darkness.radius<300
Graphics.update
Input.update
pbUpdateSceneMap
darkness.radius+=2
end
darkness.dispose
$PokemonTemp.darknessSprite=nil
return true
})
HiddenMoveHandlers::UseMove.add(:WATERFALL,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}.",pokemon.name,PBMoves.getName(move)))
end
pbAscendWaterfall
return true
})
HiddenMoveHandlers::UseMove.add(:DIVE,proc{|move,pokemon|
wasdiving=$PokemonGlobal.diving
if $PokemonGlobal.diving
divemap=nil
meta=pbLoadMetadata
for i in 0...meta.length
if meta[i] && meta[i][MetadataDiveMap]
if meta[i][MetadataDiveMap]==$game_map.map_id
divemap=i
break
end
end
end
else
divemap=pbGetMetadata($game_map.map_id,MetadataDiveMap)
end
return false if !divemap
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}.",pokemon.name,PBMoves.getName(move)))
end
pbFadeOutIn(99999){
$game_temp.player_new_map_id=divemap
$game_temp.player_new_x=$game_player.x
$game_temp.player_new_y=$game_player.y
$game_temp.player_new_direction=$game_player.direction
pbCancelVehicles
if wasdiving
$PokemonGlobal.surfing=true
else
$PokemonGlobal.diving=true
end
pbUpdateVehicle
$scene.transfer_player(false)
$game_map.autoplay
$game_map.refresh
}
return true
})
HiddenMoveHandlers::UseMove.add(:HEADBUTT,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
Kernel.pbHeadbuttEffect(event)
})
HiddenMoveHandlers::UseMove.add(:SWEETSCENT,proc{|move,pokemon|
if !pbHiddenMoveAnimation(pokemon)
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
end
pbSweetScent
return true
})
HiddenMoveHandlers::UseMove.add(:DIG,proc{|move,pokemon|
escape=pbGetMetadata($game_map.map_id,MetadataEscapePoint)
if escape
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
pbFadeOutIn(99999){
Kernel.pbCancelVehicles
$game_temp.player_new_map_id=escape[0]
$game_temp.player_new_x=escape[1]
$game_temp.player_new_y=escape[2]
$game_temp.player_new_direction=2
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
return true
end
return false
})
HiddenMoveHandlers::UseMove.add(:TELEPORT,proc{|move,pokemon|
healing=$PokemonGlobal.healingSpot
if !healing
healing=pbGetMetadata(0,MetadataHome)
end
if healing
Kernel.pbMessage(_INTL("{1} used {2}!",pokemon.name,PBMoves.getName(move)))
pbFadeOutIn(99999){
Kernel.pbCancelVehicles
$game_temp.player_new_map_id=healing[0]
$game_temp.player_new_x=healing[1]
$game_temp.player_new_y=healing[2]
$game_temp.player_new_direction=2
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
return true
end
return false
})
def Kernel.pbCanUseHiddenMove?(pkmn,move)
return HiddenMoveHandlers.triggerCanUseMove(move,pkmn)
end
def Kernel.pbUseHiddenMove(pokemon,move)
return HiddenMoveHandlers.triggerUseMove(move,pokemon)
end
def pbSweetScent
viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
viewport.z=99999
count=0
viewport.color.alpha-=10
begin
if viewport.color.alpha<128 && count==0
viewport.color.red=255
viewport.color.green=0
viewport.color.blue=0
viewport.color.alpha+=10
else
count+=1
if count>60
viewport.color.alpha-=10
end
end
Graphics.update
Input.update
pbUpdateSceneMap
end until viewport.color.alpha<=0
viewport.dispose
encounter=nil
enctype=nil
enctype=$PokemonEncounters.pbEncounterType
if enctype<0 ||
!$PokemonEncounters.isEncounterPossibleHere?() ||
!pbEncounter(enctype)
Kernel.pbMessage(_INTL("There appears to be nothing here..."))
end
end
def Kernel.pbHiddenMoveEvent
terrain=Kernel.pbFacingTerrainTag
if pbIsWaterTag?(terrain) &&
!$PokemonGlobal.surfing &&
!pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
Kernel.pbSurf
return
end
if terrain==PBTerrain::Waterfall
Kernel.pbWaterfall
return
end
if terrain==PBTerrain::WaterfallCrest
Kernel.pbMessage(_INTL("A wall of water is crashing down with a mighty roar."))
return
end
terrain=$game_player.terrain_tag
if terrain==PBTerrain::DeepWater
Kernel.pbDive
return
end
if $PokemonGlobal.diving
Kernel.pbSurfacing
return
end
facingEvent=$game_player.pbFacingEvent
if facingEvent
if facingEvent.name=="Boulder"
Kernel.pbStrength
return
end
end
end