#################################################################################
## Shows the "Form" page of the Pokédex entry screen.
#################################################################################
class PokedexFormScene
def pbStartScene(species)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@species=species
@gender=$Trainer.formlastseen[species][0]
@form=$Trainer.formlastseen[species][1]
@available=pbGetAvailable # [name, gender, form]
@sprites={}
@sprites["background"]=IconSprite.new(0,0,@viewport)
@sprites["background"].setBitmap(_INTL("Graphics/Pictures/pokedexForm"))
@sprites["info"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
@sprites["front"]=PokemonSprite.new(@viewport)
@sprites["back"]=PokemonSprite.new(@viewport)
@sprites["icon"]=PokemonSpeciesIconSprite.new(@species,@viewport)
@sprites["icon"].gender=@gender
@sprites["icon"].form=@form
@sprites["icon"].x=52
@sprites["icon"].y=290
pbUpdate
return true
end
def pbUpdate
@sprites["info"].bitmap.clear
pbSetSystemFont(@sprites["info"].bitmap)
name=""
for i in @available
if i[1]==@gender && i[2]==@form
name=i[0]
break
end
end
text=[
[_INTL("{1}",PBSpecies.getName(@species)),
(Graphics.width+72)/2,Graphics.height-86,2,
Color.new(88,88,80),Color.new(168,184,184)],
[_INTL("{1}",name),
(Graphics.width+72)/2,Graphics.height-54,2,
Color.new(88,88,80),Color.new(168,184,184)],
]
pbDrawTextPositions(@sprites["info"].bitmap,text)
frontBitmap=pbCheckPokemonBitmapFiles([@species,false,(@gender==1),false,@form,false])
if frontBitmap
frontSprite=AnimatedBitmap.new(frontBitmap)
@sprites["front"].bitmap=frontSprite.bitmap
end
backBitmap=pbCheckPokemonBitmapFiles([@species,true,(@gender==1),false,@form,false])
if backBitmap
backSprite=AnimatedBitmap.new(backBitmap)
@sprites["back"].bitmap=backSprite.bitmap
end
metrics=load_data("Data/metrics.dat")
backMetric=metrics[0][@species]
pbPositionPokemonSprite(@sprites["front"],74,96)
pbPositionPokemonSprite(@sprites["back"],310,98+backMetric*2)
@sprites["icon"].update
end
def pbGetAvailable
available=[] # [name, gender, form]
dexdata=pbOpenDexData
pbDexDataOffset(dexdata,@species,18)
genderbyte=dexdata.fgetb
dexdata.close
formnames=pbGetMessage(MessageTypes::FormNames,@species)
if !formnames || formnames==""
formnames=[""]
else
formnames=strsplit(formnames,/,/)
end
@gender=0 if genderbyte==0 || genderbyte==255 # Always male or genderless
@gender=1 if genderbyte==254 # Always female
if formnames && formnames[0]!=""
for j in 0..1
if $Trainer.formseen[@species][j][0] || ALWAYSSHOWALLFORMS # That gender/form has been seen
if pbResolveBitmap(sprintf("Graphics/Battlers/%03df",@species))
available.push([_INTL("{1} Male",formnames[0]),j,0]) if j==0
available.push([_INTL("{1} Female",formnames[0]),j,0]) if j==1
else
gendertopush=(genderbyte==254) ? 1 : 0
available.push([formnames[0],gendertopush,0])
break
end
end
end
else
if $Trainer.formseen[@species][0][0] || ALWAYSSHOWALLFORMS # Male/form 0 has been seen
if genderbyte!=254 && genderbyte!=255 # Not always female & not genderless
available.push([_INTL("Male"),0,0])
end
end
if $Trainer.formseen[@species][1][0] || ALWAYSSHOWALLFORMS # Female/form 0 has been seen
if genderbyte!=0 && genderbyte!=255 # Not always male & not genderless
available.push([_INTL("Female"),1,0])
end
end
if $Trainer.formseen[@species][0][0] || ALWAYSSHOWALLFORMS # Genderless/form 0 has been seen
if genderbyte==255 # Genderless
if formnames && formnames.length>1
available.push([_INTL("One Form"),0,0])
else
available.push([_INTL("Genderless"),0,0])
end
end
end
end
for i in 1...formnames.length
for j in 0..1
if $Trainer.formseen[@species][j]
|| ALWAYSSHOWALLFORMS # That gender/form has been seen
# if pbResolveBitmap(sprintf("Graphics/Battlers/%03df_%d",@species,i))
available.push([_INTL("{1} Male",formnames),j,i]) if j==0
available.push([_INTL("{1} Female",formnames),j,i]) if j==1
else
available.push([formnames,j,i])
break
end
end
end
end
return available
end
def pbGetCommands
commands=[]
for i in @available
commands.push(i[0])
end
return commands
end
def pbChooseForm
oldgender=@gender
oldform=@form
commands=pbGetCommands
using(cmdwindow=Window_CommandPokemon.new(commands)) {
cmdwindow.height=128 if cmdwindow.height>128
[email protected]+1
pbBottomRight(cmdwindow)
for i in [email protected]
if @available[1]==@gender && @available[2]==@form
cmdwindow.index=i
break
end
end
loop do
Graphics.update
Input.update
cmdwindow.update
@gender=@sprites["icon"].gender=@available[cmdwindow.index][1]
@form@sprites["icon"].form=@available[cmdwindow.index][2]
pbUpdate
if Input.trigger?(Input::B)
pbPlayCancelSE()
@gender=@sprites["icon"].gender=oldgender
@form=@sprites["icon"].form=oldform
break
end
if Input.trigger?(Input::C)
pbPlayDecisionSE()
break
end
end
}
end
def pbControls(listlimits)
Graphics.transition
ret=0
loop do
Graphics.update
Input.update
pbUpdate
if Input.trigger?(Input::C)
pbChooseForm
elsif Input.trigger?(Input::LEFT)
ret=4
break
elsif Input.trigger?(Input::UP) && listlimits&1==0 # If not at top of list ret=8
break
elsif Input.trigger?(Input::DOWN) && listlimits&2==0 # If not at end oflist
ret=2
break
elsif Input.trigger?(Input::B)
ret=1
pbPlayCancelSE()
pbFadeOutAndHide(@sprites)
break
end
end
$Trainer.formlastseen[@species][0]=@gender
$Trainer.formlastseen[@species][1]=@form
return ret
end
def pbEndScene
pbDisposeSpriteHash(@sprites)
@viewport.dispose
end
end
class PokedexForm
def initialize(scene)
@scene=scene
end
def pbStartScreen(species,listlimits)
@scene.pbStartScene(species)
[email protected](listlimits)
@scene.pbEndScene
return ret
end
end