class PokemonTradeScene
def pbRunPictures(pictures,sprites)
loop do
for i in 0...pictures.length
pictures[i].update
end
for i in 0...sprites.length
if sprites[i].is_a?(IconSprite)
setPictureIconSprite(sprites[i],pictures[i])
else
setPictureSprite(sprites[i],pictures[i])
end
end
Graphics.update
Input.update
running=false
for i in 0...pictures.length
running=true if pictures[i].running?
end
break if !running
end
end
def pbStartScreen(pokemon,pokemon2,trader1,trader2)
@sprites={}
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@pokemon=pokemon
@pokemon2=pokemon2
@trader1=trader1
@trader2=trader2
addBackgroundOrColoredPlane(@sprites,"background","tradebg.png",
Color.new(248,248,248),@viewport)
rsprite1=Sprite.new(@viewport)
rsprite1.bitmap=pbLoadPokemonBitmap(@pokemon,false)
rsprite1.ox=rsprite1.bitmap.width/2
rsprite1.oy=rsprite1.bitmap.height/2
rsprite1.x=Graphics.width/2
rsprite1.y=(Graphics.height-96)*2/3
@sprites["rsprite1"]=rsprite1
rsprite1=Sprite.new(@viewport)
rsprite1.bitmap=pbLoadPokemonBitmap(@pokemon2,false)
rsprite1.ox=rsprite1.bitmap.width/2
rsprite1.oy=rsprite1.bitmap.height/2
rsprite1.x=Graphics.width/2
rsprite1.y=(Graphics.height-96)*2/3
rsprite1.visible=false
@sprites["rsprite2"]=rsprite1
@sprites["msgwindow"]=Kernel.pbCreateMessageWindow(@viewport)
pbFadeInAndShow(@sprites)
end
def pbScene1
spriteBall=IconSprite.new(0,0,@viewport)
pictureBall=PictureEx.new(0)
picturePoke=PictureEx.new(0)
# Starting position of ball
pictureBall.moveVisible(1,true)
pictureBall.moveName(1,"Graphics/Pictures/ball00_0.png")
pictureBall.moveOrigin(1,PictureOrigin::Center)
pictureBall.moveXY(0,1,Graphics.width/2,48)
# Starting position of sprite
picturePoke.moveVisible(1,true)
picturePoke.moveOrigin(1,PictureOrigin::Center)
rsprite1=@sprites["rsprite1"]
rsprite1.ox=0
rsprite1.oy=0
picturePoke.moveXY(0,1,rsprite1.x,rsprite1.y)
# Change sprite color
delay=picturePoke.totalDuration+4
picturePoke.moveColor(10,delay,Color.new(31*8,22*8,30*8,255))
# Recall
delay=picturePoke.totalDuration
picturePoke.moveSE(delay,"Audio/SE/recall.wav")
pictureBall.moveName(delay,"Graphics/Pictures/ball00_1.png")
pictureBall.moveName(delay+4,"Graphics/Pictures/ball00_2.png")
# Move sprite to ball
picturePoke.moveZoom(15,delay,0)
picturePoke.moveXY(15,delay,Graphics.width/2,48)
picturePoke.moveSE(delay+10,"Audio/SE/jumptoball.wav")
picturePoke.moveVisible(delay+15,false)
pictureBall.moveName(picturePoke.totalDuration+2,"Graphics/Pictures/ball00_0.png")
delay=picturePoke.totalDuration+20
pictureBall.moveXY(12,delay,Graphics.width/2,-32)
pbRunPictures(
[picturePoke,pictureBall],
[@sprites["rsprite1"],spriteBall]
)
spriteBall.dispose
end
def pbScene2
spriteBall=IconSprite.new(0,0,@viewport)
pictureBall=PictureEx.new(0)
picturePoke=PictureEx.new(0)
# Starting position of ball
pictureBall.moveVisible(1,true)
pictureBall.moveName(1,"Graphics/Pictures/ball00_0.png")
pictureBall.moveOrigin(1,PictureOrigin::Center)
pictureBall.moveXY(0,1,Graphics.width/2,-32)
# Starting position of sprite
picturePoke.moveVisible(1,false)
picturePoke.moveOrigin(1,PictureOrigin::Center)
picturePoke.moveZoom(0,1,0)
picturePoke.moveColor(0,1,Color.new(31*8,22*8,30*8,255))
# Dropping ball
y=Graphics.height-96-16
delay=picturePoke.totalDuration+4
pictureBall.moveXY(15,delay,Graphics.width/2,y)
pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop.wav")
pictureBall.moveXY(8,pictureBall.totalDuration+2,Graphics.width/2,y-60)
pictureBall.moveXY(7,pictureBall.totalDuration+2,Graphics.width/2,y)
pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop.wav")
pictureBall.moveXY(6,pictureBall.totalDuration+2,Graphics.width/2,y-40)
pictureBall.moveXY(5,pictureBall.totalDuration+2,Graphics.width/2,y)
pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop.wav")
pictureBall.moveXY(4,pictureBall.totalDuration+2,Graphics.width/2,y-20)
pictureBall.moveXY(3,pictureBall.totalDuration+2,Graphics.width/2,y)
pictureBall.moveSE(pictureBall.totalDuration,"Audio/SE/balldrop.wav")
picturePoke.moveXY(0,pictureBall.totalDuration,Graphics.width/2,y)
delay=pictureBall.totalDuration+18
y=(Graphics.height-96)*2/3
picturePoke.moveSE(delay,"Audio/SE/recall.wav")
picturePoke.moveSE(delay,
sprintf("Audio/SE/%03dCry.wav",@pokemon2.species))
pictureBall.moveName(delay,"Graphics/Pictures/ball00_1.png")
pictureBall.moveName(delay+4,"Graphics/Pictures/ball00_2.png")
pictureBall.moveVisible(delay+10,false)
picturePoke.moveVisible(delay,true)
picturePoke.moveZoom(15,delay,100)
picturePoke.moveXY(15,delay,Graphics.width/2,y)
delay=picturePoke.totalDuration
picturePoke.moveColor(10,delay,Color.new(31*8,22*8,30*8,0))
pbRunPictures(
[picturePoke,pictureBall],
[@sprites["rsprite2"],spriteBall]
)
spriteBall.dispose
end
def pbEndScreen
Kernel.pbDisposeMessageWindow(@sprites["msgwindow"])
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@viewport.dispose
newspecies=pbTradeCheckEvolution(@pokemon2)
if newspecies>0
evo=PokemonEvolutionScene.new
evo.pbStartScreen(@pokemon2,newspecies)
evo.pbEvolution(false)
evo.pbEndScreen
end
end
def pbTrade
$game_system.bgm_stop
sefile=sprintf("Audio/SE/%03dCry.wav",@pokemon.species)
Audio.se_play(sefile)
speciesname1=PBSpecies.getName(@pokemon.species)
speciesname2=PBSpecies.getName(@pokemon2.species)
Kernel.pbDisplayMessageFancy(@sprites["msgwindow"],
_INTL("{1}\r\nID: {2} OT: {3}",@pokemon.name,
(@pokemon.trainerID&0xFFFF), @pokemon.ot),-1,100)
Audio.se_play("Audio/SE/Choose.wav")
pbScene1
Kernel.pbDisplayMessageFancy(@sprites["msgwindow"],
_INTL("For {1}'s {2},\r\n{3} sends {4}.",@trader1,speciesname1,@trader2,speciesname2))
Kernel.pbDisplayMessageFancy(@sprites["msgwindow"],
_INTL("{1} bids farewell to {2}.",@trader2,speciesname2))
pbScene2
Kernel.pbDisplayMessageFancy(@sprites["msgwindow"],
_INTL("{1}\r\nID: {2} OT: {3}",@pokemon2.name,
(@pokemon2.trainerID&0xFFFF), @pokemon2.ot))
Kernel.pbDisplayMessageFancy(@sprites["msgwindow"],
_INTL("Take good care of {1}.",speciesname2))
end
end
def pbStartTrade(pokemonIndex,species,nickname,trainerName)
myPokemon=$Trainer.party[pokemonIndex]
opponent=PokeBattle_Trainer.new(trainerName,0)
opponent.setForeignID($Trainer)
yourPokemon=PokeBattle_Pokemon.new(species,myPokemon.level,opponent)
yourPokemon.name=nickname
pbFadeOutInWithMusic(99999){
evo=PokemonTradeScene.new
evo.pbStartScreen(myPokemon,yourPokemon,$Trainer.name,opponent.name)
evo.pbTrade
evo.pbEndScreen
}
$Trainer.party[pokemonIndex]=yourPokemon
end
def pbMiniCheckEvolutionTrade(pokemon,evonib,level,poke)
case evonib
when 5
return poke
when 6 # Evolves if traded
return poke if pokemon.item==level
end
return -1
end
def pbTradeCheckEvolution(pokemon)
return pbCheckEvolutionEx(pokemon){|pokemon,evonib,level,poke|
next pbMiniCheckEvolutionTrade(pokemon,evonib,level,poke)
}
end