class MoveSelectionSprite < SpriteWrapper
attr_reader :preselected
attr_reader :index
def initialize(viewport=nil,fifthmove=false)
super(viewport)
@movesel = AnimatedBitmap.new("Graphics/Pictures/Summary/cursor_move")
@frame = 0
@index = 0
@fifthmove = fifthmove
@preselected = false
@updating = false
refresh
end
def dispose
@movesel.dispose
super
end
def index=(value)
@index = value
refresh
end
def preselected=(value)
@preselected = value
refresh
end
def refresh
w = @movesel.width
h = @movesel.height/2
self.x = 240
self.y = 92+(self.index*64)
self.y -= 76 if @fifthmove
self.y += 20 if @fifthmove && self.index==4
self.bitmap = @movesel.bitmap
if self.preselected
self.src_rect.set(0,h,w,h)
else
self.src_rect.set(0,0,w,h)
end
end
def update
@updating = true
super
@movesel.update
@updating = false
refresh
end
end
class RibbonSelectionSprite < MoveSelectionSprite
def initialize(viewport=nil)
super(viewport)
@movesel = AnimatedBitmap.new("Graphics/Pictures/Summary/cursor_ribbon")
@frame = 0
@index = 0
@preselected = false
@updating = false
@spriteVisible = true
refresh
end
def visible=(value)
super
@spriteVisible = value if !@updating
end
def refresh
w = @movesel.width
h = @movesel.height/2
self.x = 228+(self.index%4)*68
self.y = 76+((self.index/4).floor*68)
self.bitmap = @movesel.bitmap
if self.preselected
self.src_rect.set(0,h,w,h)
else
self.src_rect.set(0,0,w,h)
end
end
def update
@updating = true
super
self.visible = @spriteVisible && @index>=0 && @index<12
@movesel.update
@updating = false
refresh
end
end
class PokemonSummary_Scene
def pbUpdate
pbUpdateSpriteHash(@sprites)
end
def pbStartScene(party,partyindex,inbattle=false)
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z = 99999
@party = party
@partyindex = partyindex
@pokemon = @party[@partyindex]
@inbattle = inbattle
@page = 1
@typebitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
@markingbitmap = AnimatedBitmap.new("Graphics/Pictures/Summary/markings")
@sprites = {}
@sprites["background"] = IconSprite.new(0,0,@viewport)
@sprites["pokemon"] = PokemonSprite.new(@viewport)
@sprites["pokemon"].setOffset(PictureOrigin::Center)
@sprites["pokemon"].x = 104
@sprites["pokemon"].y = 206
@sprites["pokemon"].setPokemonBitmap(@pokemon)
@sprites["pokeicon"] = PokemonIconSprite.new(@pokemon,@viewport)
@sprites["pokeicon"].setOffset(PictureOrigin::Center)
@sprites["pokeicon"].x = 46
@sprites["pokeicon"].y = 92
@sprites["pokeicon"].visible = false
@sprites["itemicon"] = ItemIconSprite.new(30,320,@pokemon.item,@viewport)
@sprites["itemicon"].blankzero = true
@sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
pbSetSystemFont(@sprites["overlay"].bitmap)
@sprites["movepresel"] = MoveSelectionSprite.new(@viewport)
@sprites["movepresel"].visible = false
@sprites["movepresel"].preselected = true
@sprites["movesel"] = MoveSelectionSprite.new(@viewport)
@sprites["movesel"].visible = false
@sprites["ribbonpresel"] = RibbonSelectionSprite.new(@viewport)
@sprites["ribbonpresel"].visible = false
@sprites["ribbonpresel"].preselected = true
@sprites["ribbonsel"] = RibbonSelectionSprite.new(@viewport)
@sprites["ribbonsel"].visible = false
@sprites["uparrow"] = AnimatedSprite.new("Graphics/Pictures/uparrow",8,28,40,2,@viewport)
@sprites["uparrow"].x = 350
@sprites["uparrow"].y = 56
@sprites["uparrow"].play
@sprites["uparrow"].visible = false
@sprites["downarrow"] = AnimatedSprite.new("Graphics/Pictures/downarrow",8,28,40,2,@viewport)
@sprites["downarrow"].x = 350
@sprites["downarrow"].y = 260
@sprites["downarrow"].play
@sprites["downarrow"].visible = false
@sprites["markingbg"] = IconSprite.new(260,88,@viewport)
@sprites["markingbg"].setBitmap("Graphics/Pictures/Summary/overlay_marking")
@sprites["markingbg"].visible = false
@sprites["markingoverlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
@sprites["markingoverlay"].visible = false
pbSetSystemFont(@sprites["markingoverlay"].bitmap)
@sprites["markingsel"] = IconSprite.new(0,0,@viewport)
@sprites["markingsel"].setBitmap("Graphics/Pictures/Summary/cursor_marking")
@sprites["markingsel"].src_rect.height = @sprites["markingsel"].bitmap.height/2
@sprites["markingsel"].visible = false
@sprites["messagebox"] = Window_AdvancedTextPokemon.new("")
@sprites["messagebox"].viewport = @viewport
@sprites["messagebox"].visible = false
@sprites["messagebox"].letterbyletter = true
pbBottomLeftLines(@sprites["messagebox"],2)
drawPage(@page)
pbFadeInAndShow(@sprites) { pbUpdate }
end
def pbStartForgetScene(party,partyindex,moveToLearn)
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z = 99999
@party = party
@partyindex = partyindex
@pokemon = @party[@partyindex]
@page = 4
@typebitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
@sprites = {}
@sprites["background"] = IconSprite.new(0,0,@viewport)
@sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
pbSetSystemFont(@sprites["overlay"].bitmap)
@sprites["pokeicon"] = PokemonIconSprite.new(@pokemon,@viewport)
@sprites["pokeicon"].setOffset(PictureOrigin::Center)
@sprites["pokeicon"].x = 46
@sprites["pokeicon"].y = 92
@sprites["movesel"] = MoveSelectionSprite.new(@viewport,moveToLearn>0)
@sprites["movesel"].visible = false
@sprites["movesel"].visible = true
@sprites["movesel"].index = 0
drawSelectedMove(moveToLearn,@pokemon.moves[0].id)
pbFadeInAndShow(@sprites)
end
def pbEndScene
pbFadeOutAndHide(@sprites) { pbUpdate }
pbDisposeSpriteHash(@sprites)
@typebitmap.dispose
@markingbitmap.dispose if @markingbitmap
@viewport.dispose
end
def pbDisplay(text)
@sprites["messagebox"].text = text
@sprites["messagebox"].visible = true
pbPlayDecisionSE()
loop do
Graphics.update
Input.update
pbUpdate
if @sprites["messagebox"].busy?
if Input.trigger?(Input::C)
pbPlayDecisionSE() if @sprites["messagebox"].pausing?
@sprites["messagebox"].resume
end
elsif Input.trigger?(Input::C) || Input.trigger?(Input::B)
break
end
end
@sprites["messagebox"].visible = false
end
def pbConfirm(text)
ret = -1
@sprites["messagebox"].text = text
@sprites["messagebox"].visible = true
using(cmdwindow = Window_CommandPokemon.new([_INTL("Yes"),_INTL("No")])) {
cmdwindow.z = @viewport.z+1
cmdwindow.visible = false
pbBottomRight(cmdwindow)
cmdwindow.y -= @sprites["messagebox"].height
loop do
Graphics.update
Input.update
cmdwindow.visible = true if !@sprites["messagebox"].busy?
cmdwindow.update
pbUpdate
if !@sprites["messagebox"].busy?
if Input.trigger?(Input::B)
ret = false
break
elsif Input.trigger?(Input::C) && @sprites["messagebox"].resume
ret = (cmdwindow.index==0)
break
end
end
end
}
@sprites["messagebox"].visible = false
return ret
end
def pbShowCommands(commands,index=0)
ret = -1
using(cmdwindow = Window_CommandPokemon.new(commands)) {
cmdwindow.z = @viewport.z+1
cmdwindow.index = index
pbBottomRight(cmdwindow)
loop do
Graphics.update
Input.update
cmdwindow.update
pbUpdate
if Input.trigger?(Input::B)
pbPlayCancelSE
ret = -1
break
elsif Input.trigger?(Input::C)
pbPlayDecisionSE
ret = cmdwindow.index
break
end
end
}
return ret
end
def drawMarkings(bitmap,x,y)
markings = @pokemon.markings
markrect = Rect.new(0,0,16,16)
for i in 0...6
markrect.x = i*16
markrect.y = (markings&(1<<i)!=0) ? 16 : 0
bitmap.blt(x+i*16,y,@markingbitmap.bitmap,markrect)
end
end
def drawPage(page)
if @pokemon.egg?
drawPageOneEgg; return
end
@sprites["itemicon"].item = @pokemon.item
overlay = @sprites["overlay"].bitmap
overlay.clear
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
# Set background image
@sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_#{page}")
imagepos=[]
# Show the Poké Ball containing the Pokémon
ballimage = sprintf("Graphics/Pictures/Summary/icon_ball_%02d",@pokemon.ballused)
imagepos.push([ballimage,14,60])
# Show status/fainted/Pokérus infected icon
status = -1
status = 6 if @pokemon.pokerusStage==1
status = @pokemon.status-1 if @pokemon.status>0
status = 5 if @pokemon.hp==0
if status>=0
imagepos.push(["Graphics/Pictures/statuses",124,100,0,16*status,44,16])
end
# Show Pokérus cured icon
if @pokemon.pokerusStage==2
imagepos.push([sprintf("Graphics/Pictures/Summary/icon_pokerus"),176,100])
end
# Show shininess star
if @pokemon.shiny?
#===========================================================================
# Dynamax - Displays Dynamax Levels and G-Max Factor
#===========================================================================
pbDisplayGMaxFactor if defined?(@pokemon.dynamax?)
pbDisplayDynamaxMeter if defined?(@pokemon.dynamax?)
#===========================================================================
imagepos.push([sprintf("Graphics/Pictures/shiny"),2,134])
end
# Draw all images
pbDrawImagePositions(overlay,imagepos)
# Write various bits of text
pagename = [_INTL("INFO"),
_INTL("TRAINER MEMO"),
_INTL("SKILLS"),
_INTL("MOVES"),
_INTL("RIBBONS")][page-1]
textpos = [
[pagename,26,16,0,base,shadow],
[@pokemon.name,46,62,0,base,shadow],
[@pokemon.level.to_s,46,92,0,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Item"),66,318,0,base,shadow]
]
#===========================================================================
# Dynamax - For Dynamax Level display
#===========================================================================
if defined?(@pokemon.dynamax?)
textpos[3][0]="" if @page==3 && @pokemon.dynamaxAble?
end
#===========================================================================
# Write the held item's name
if @pokemon.hasItem?
textpos.push([PBItems.getName(@pokemon.item),16,352,0,Color.new(64,64,64),Color.new(176,176,176)])
else
textpos.push([_INTL("None"),16,352,0,Color.new(192,200,208),Color.new(208,216,224)])
end
# Write the gender symbol
if @pokemon.male?
textpos.push([_INTL("♂"),178,62,0,Color.new(24,112,216),Color.new(136,168,208)])
elsif @pokemon.female?
textpos.push([_INTL("♀"),178,62,0,Color.new(248,56,32),Color.new(224,152,144)])
end
# Draw all text
pbDrawTextPositions(overlay,textpos)
# Draw the Pokémon's markings
drawMarkings(overlay,84,292)
# Draw page-specific information
case page
when 1; drawPageOne
when 2; drawPageTwo
when 3; drawPageThree
when 4; drawPageFour
when 5; drawPageFive
end
end
def drawPageOne
overlay = @sprites["overlay"].bitmap
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
dexNumBase = (@pokemon.shiny?) ? Color.new(248,56,32) : Color.new(64,64,64)
dexNumShadow = (@pokemon.shiny?) ? Color.new(224,152,144) : Color.new(176,176,176)
# If a Shadow Pokémon, draw the heart gauge area and bar
if @pokemon.shadowPokemon?
shadowfract = @pokemon.heartgauge*1.0/PokeBattle_Pokemon::HEARTGAUGESIZE
imagepos = [
["Graphics/Pictures/Summary/overlay_shadow",224,240],
["Graphics/Pictures/Summary/overlay_shadowbar",242,280,0,0,(shadowfract*248).floor,-1]
]
pbDrawImagePositions(overlay,imagepos)
end
# Write various bits of text
textpos = [
[_INTL("Dex No."),238,80,0,base,shadow],
[_INTL("Species"),238,112,0,base,shadow],
[PBSpecies.getName(@pokemon.species),435,112,2,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Type"),238,144,0,base,shadow],
[_INTL("OT"),238,176,0,base,shadow],
[_INTL("ID No."),238,208,0,base,shadow],
]
# Write the Regional/National Dex number
dexnum = @pokemon.species
dexnumshift = false
if $PokemonGlobal.pokedexUnlocked[$PokemonGlobal.pokedexUnlocked.length-1]
dexnumshift = true if DEXES_WITH_OFFSETS.include?(-1)
else
dexnum = 0
for i in 0...$PokemonGlobal.pokedexUnlocked.length-1
next if !$PokemonGlobal.pokedexUnlocked
num = pbGetRegionalNumber(i,@pokemon.species)
next if num<=0
dexnum = num
dexnumshift = true if DEXES_WITH_OFFSETS.include?(i)
break
end
end
if dexnum<=0
textpos.push(["???",435,80,2,dexNumBase,dexNumShadow])
else
dexnum -= 1 if dexnumshift
textpos.push([sprintf("%03d",dexnum),435,80,2,dexNumBase,dexNumShadow])
end
# Write Original Trainer's name and ID number
if @pokemon.ot==""
textpos.push([_INTL("RENTAL"),435,176,2,Color.new(64,64,64),Color.new(176,176,176)])
textpos.push(["?????",435,208,2,Color.new(64,64,64),Color.new(176,176,176)])
else
ownerbase = Color.new(64,64,64)
ownershadow = Color.new(176,176,176)
case @pokemon.otgender
when 0; ownerbase = Color.new(24,112,216); ownershadow = Color.new(136,168,208)
when 1; ownerbase = Color.new(248,56,32); ownershadow = Color.new(224,152,144)
end
textpos.push([@pokemon.ot,435,176,2,ownerbase,ownershadow])
textpos.push([sprintf("%05d",@pokemon.publicID),435,208,2,Color.new(64,64,64),Color.new(176,176,176)])
end
# Write Exp text OR heart gauge message (if a Shadow Pokémon)
if @pokemon.shadowPokemon?
textpos.push([_INTL("Heart Gauge"),238,240,0,base,shadow])
heartmessage = [_INTL("The door to its heart is open! Undo the final lock!"),
_INTL("The door to its heart is almost fully open."),
_INTL("The door to its heart is nearly open."),
_INTL("The door to its heart is opening wider."),
_INTL("The door to its heart is opening up."),
_INTL("The door to its heart is tightly shut.")][@pokemon.heartStage]
memo = sprintf("<c3=404040,B0B0B0>%s\n",heartmessage)
drawFormattedTextEx(overlay,234,304,264,memo)
else
endexp = PBExperience.pbGetStartExperience(@pokemon.level+1,@pokemon.growthrate)
textpos.push([_INTL("Exp. Points"),238,240,0,base,shadow])
textpos.push([@pokemon.exp.to_s_formatted,488,272,1,Color.new(64,64,64),Color.new(176,176,176)])
textpos.push([_INTL("To Next Lv."),238,304,0,base,shadow])
textpos.push([([email protected]).to_s_formatted,488,336,1,Color.new(64,64,64),Color.new(176,176,176)])
end
# Draw all text
pbDrawTextPositions(overlay,textpos)
# Draw Pokémon type(s)
type1rect = Rect.new(0,@pokemon.type1*28,64,28)
type2rect = Rect.new(0,@pokemon.type2*28,64,28)
if @[email protected]
overlay.blt(402,146,@typebitmap.bitmap,type1rect)
else
overlay.blt(370,146,@typebitmap.bitmap,type1rect)
overlay.blt(436,146,@typebitmap.bitmap,type2rect)
end
# Draw Exp bar
if @pokemon.level<PBExperience.maxLevel
w = @pokemon.expFraction*128
w = ((w/2).round)*2
pbDrawImagePositions(overlay,[
["Graphics/Pictures/Summary/overlay_exp",362,372,0,0,w,6]
])
end
end
def drawPageOneEgg
@sprites["itemicon"].item = @pokemon.item
overlay = @sprites["overlay"].bitmap
overlay.clear
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
# Set background image
@sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_egg")
imagepos = []
# Show the Poké Ball containing the Pokémon
ballimage = sprintf("Graphics/Pictures/Summary/icon_ball_%02d",@pokemon.ballused)
imagepos.push([ballimage,14,60])
# Draw all images
pbDrawImagePositions(overlay,imagepos)
# Write various bits of text
textpos = [
[_INTL("TRAINER MEMO"),26,16,0,base,shadow],
[@pokemon.name,46,62,0,base,shadow],
[_INTL("Item"),66,318,0,base,shadow]
]
# Write the held item's name
if @pokemon.hasItem?
textpos.push([PBItems.getName(@pokemon.item),16,352,0,Color.new(64,64,64),Color.new(176,176,176)])
else
textpos.push([_INTL("None"),16,352,0,Color.new(192,200,208),Color.new(208,216,224)])
end
# Draw all text
pbDrawTextPositions(overlay,textpos)
memo = ""
# Write date received
if @pokemon.timeReceived
date = @pokemon.timeReceived.day
month = pbGetMonthName(@pokemon.timeReceived.mon)
year = @pokemon.timeReceived.year
memo += _INTL("<c3=404040,B0B0B0>{1} {2}, {3}\n",date,month,year)
end
# Write map name egg was received on
mapname = pbGetMapNameFromId(@pokemon.obtainMap)
if (@pokemon.obtainText rescue false) && @pokemon.obtainText!=""
mapname = @pokemon.obtainText
end
if mapname && mapname!=""
memo += _INTL("<c3=404040,B0B0B0>A mysterious Pokémon Egg received from <c3=F83820,E09890>{1}<c3=404040,B0B0B0>.\n",mapname)
else
memo += _INTL("<c3=404040,B0B0B0>A mysterious Pokémon Egg.\n",mapname)
end
memo += "\n" # Empty line
# Write Egg Watch blurb
memo += _INTL("<c3=404040,B0B0B0>"The Egg Watch"\n")
eggstate = _INTL("It looks like this Egg will take a long time to hatch.")
eggstate = _INTL("What will hatch from this? It doesn't seem close to hatching.") if @pokemon.eggsteps<10200
eggstate = _INTL("It appears to move occasionally. It may be close to hatching.") if @pokemon.eggsteps<2550
eggstate = _INTL("Sounds can be heard coming from inside! It will hatch soon!") if @pokemon.eggsteps<1275
memo += sprintf("<c3=404040,B0B0B0>%s\n",eggstate)
# Draw all text
drawFormattedTextEx(overlay,232,78,268,memo)
# Draw the Pokémon's markings
drawMarkings(overlay,84,292)
end
def drawPageTwo
overlay = @sprites["overlay"].bitmap
memo = ""
# Write nature
showNature = [email protected]? || @pokemon.heartStage>3
if showNature
natureName = PBNatures.getName(@pokemon.nature)
memo += _INTL("<c3=F83820,E09890>{1}<c3=404040,B0B0B0> nature.\n",natureName)
end
# Write date received
if @pokemon.timeReceived
date = @pokemon.timeReceived.day
month = pbGetMonthName(@pokemon.timeReceived.mon)
year = @pokemon.timeReceived.year
memo += _INTL("<c3=404040,B0B0B0>{1} {2}, {3}\n",date,month,year)
end
# Write map name Pokémon was received on
mapname = pbGetMapNameFromId(@pokemon.obtainMap)
if (@pokemon.obtainText rescue false) && @pokemon.obtainText!=""
mapname = @pokemon.obtainText
end
mapname = _INTL("Faraway place") if !mapname || mapname==""
memo += sprintf("<c3=F83820,E09890>%s\n",mapname)
# Write how Pokémon was obtained
mettext = [_INTL("Met at Lv. {1}.",@pokemon.obtainLevel),
_INTL("Egg received."),
_INTL("Traded at Lv. {1}.",@pokemon.obtainLevel),
"",
_INTL("Had a fateful encounter at Lv. {1}.",@pokemon.obtainLevel)
][@pokemon.obtainMode]
memo += sprintf("<c3=404040,B0B0B0>%s\n",mettext) if mettext && mettext!=""
# If Pokémon was hatched, write when and where it hatched
if @pokemon.obtainMode==1
if @pokemon.timeEggHatched
date = @pokemon.timeEggHatched.day
month = pbGetMonthName(@pokemon.timeEggHatched.mon)
year = @pokemon.timeEggHatched.year
memo += _INTL("<c3=404040,B0B0B0>{1} {2}, {3}\n",date,month,year)
end
mapname = pbGetMapNameFromId(@pokemon.hatchedMap)
mapname = _INTL("Faraway place") if !mapname || mapname==""
memo += sprintf("<c3=F83820,E09890>%s\n",mapname)
memo += _INTL("<c3=404040,B0B0B0>Egg hatched.\n")
else
memo += "\n" # Empty line
end
# Write characteristic
if showNature
bestiv = 0
tiebreaker = @pokemon.personalID%6
for i in 0...6
if @pokemon.iv[email protected][bestiv]
bestiv = i if i>=tiebreaker && bestiv<tiebreaker
elsif @pokemon.iv>@pokemon.iv[bestiv]
bestiv = i
end
end
characteristic = [_INTL("Loves to eat."),
_INTL("Often dozes off."),
_INTL("Often scatters things."),
_INTL("Scatters things often."),
_INTL("Likes to relax."),
_INTL("Proud of its power."),
_INTL("Likes to thrash about."),
_INTL("A little quick tempered."),
_INTL("Likes to fight."),
_INTL("Quick tempered."),
_INTL("Sturdy body."),
_INTL("Capable of taking hits."),
_INTL("Highly persistent."),
_INTL("Good endurance."),
_INTL("Good perseverance."),
_INTL("Likes to run."),
_INTL("Alert to sounds."),
_INTL("Impetuous and silly."),
_INTL("Somewhat of a clown."),
_INTL("Quick to flee."),
_INTL("Highly curious."),
_INTL("Mischievous."),
_INTL("Thoroughly cunning."),
_INTL("Often lost in thought."),
_INTL("Very finicky."),
_INTL("Strong willed."),
_INTL("Somewhat vain."),
_INTL("Strongly defiant."),
_INTL("Hates to lose."),
_INTL("Somewhat stubborn.")
][bestiv*[email protected][bestiv]%5]
memo += sprintf("<c3=404040,B0B0B0>%s\n",characteristic)
end
# Write all text
drawFormattedTextEx(overlay,232,78,268,memo)
end
def drawPageThree
overlay = @sprites["overlay"].bitmap
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
# Determine which stats are boosted and lowered by the Pokémon's nature
statshadows = []
PBStats.eachStat { |s| statshadows = shadow }
if [email protected]? || @pokemon.heartStage>3
natup = PBNatures.getStatRaised(@pokemon.calcNature)
natdn = PBNatures.getStatLowered(@pokemon.calcNature)
statshadows[natup] = Color.new(136,96,72) if natup!=natdn
statshadows[natdn] = Color.new(64,120,152) if natup!=natdn
end
# Write various bits of text
textpos = [
[_INTL("HP"),292,76,2,base,statshadows[PBStats::HP]],
[sprintf("%d/%d",@pokemon.hp,@pokemon.totalhp),462,76,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Attack"),248,120,0,base,statshadows[PBStats::ATTACK]],
[sprintf("%d",@pokemon.attack),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Defense"),248,152,0,base,statshadows[PBStats::DEFENSE]],
[sprintf("%d",@pokemon.defense),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Atk"),248,184,0,base,statshadows[PBStats::SPATK]],
[sprintf("%d",@pokemon.spatk),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Def"),248,216,0,base,statshadows[PBStats::SPDEF]],
[sprintf("%d",@pokemon.spdef),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Speed"),248,248,0,base,statshadows[PBStats::SPEED]],
[sprintf("%d",@pokemon.speed),456,248,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Ability"),224,284,0,base,shadow],
[PBAbilities.getName(@pokemon.ability),362,284,0,Color.new(64,64,64),Color.new(176,176,176)],
]
# Draw all text
pbDrawTextPositions(overlay,textpos)
# Draw ability description
abilitydesc = pbGetMessage(MessageTypes::AbilityDescs,@pokemon.ability)
drawTextEx(overlay,224,316,282,2,abilitydesc,Color.new(64,64,64),Color.new(176,176,176))
# Draw HP bar
if @pokemon.hp>0
w = @pokemon.hp*96*1.0/@pokemon.totalhp
w = 1 if w<1
w = ((w/2).round)*2
hpzone = 0
hpzone = 1 if @pokemon.hp<=(@pokemon.totalhp/2).floor
hpzone = 2 if @pokemon.hp<=(@pokemon.totalhp/4).floor
imagepos = [
["Graphics/Pictures/Summary/overlay_hp",360,110,0,hpzone*6,w,6]
]
pbDrawImagePositions(overlay,imagepos)
end
end
def drawPageFour
overlay = @sprites["overlay"].bitmap
moveBase = Color.new(64,64,64)
moveShadow = Color.new(176,176,176)
ppBase = [moveBase, # More than 1/2 of total PP
Color.new(248,192,0), # 1/2 of total PP or less
Color.new(248,136,32), # 1/4 of total PP or less
Color.new(248,72,72)] # Zero PP
ppShadow = [moveShadow, # More than 1/2 of total PP
Color.new(144,104,0), # 1/2 of total PP or less
Color.new(144,72,24), # 1/4 of total PP or less
Color.new(136,48,48)] # Zero PP
@sprites["pokemon"].visible = true
@sprites["pokeicon"].visible = false
@sprites["itemicon"].visible = true
textpos = []
imagepos = []
# Write move names, types and PP amounts for each known move
yPos = 98
for i in [email protected]
[email protected]
if move.id>0
imagepos.push(["Graphics/Pictures/types",248,yPos+2,0,move.type*28,64,28])
textpos.push([PBMoves.getName(move.id),316,yPos,0,moveBase,moveShadow])
if move.totalpp>0
textpos.push([_INTL("PP"),342,yPos+32,0,moveBase,moveShadow])
ppfraction = 0
if move.pp==0; ppfraction = 3
elsif move.pp*4<=move.totalpp; ppfraction = 2
elsif move.pp*2<=move.totalpp; ppfraction = 1
end
textpos.push([sprintf("%d/%d",move.pp,move.totalpp),460,yPos+32,1,ppBase[ppfraction],ppShadow[ppfraction]])
end
else
textpos.push(["-",316,yPos,0,moveBase,moveShadow])
textpos.push(["--",442,yPos+32,1,moveBase,moveShadow])
end
yPos += 64
end
# Draw all text and images
pbDrawTextPositions(overlay,textpos)
pbDrawImagePositions(overlay,imagepos)
end
def drawSelectedMove(moveToLearn,moveid)
# Draw all of page four, except selected move's details
drawMoveSelection(moveToLearn)
# Set various values
overlay = @sprites["overlay"].bitmap
base = Color.new(64,64,64)
shadow = Color.new(176,176,176)
@sprites["pokemon"].visible = false if @sprites["pokemon"]
@sprites["pokeicon"].pokemon = @pokemon
@sprites["pokeicon"].visible = true
@sprites["itemicon"].visible = false if @sprites["itemicon"]
# Get data for selected move
moveData = pbGetMoveData(moveid)
basedamage = moveData[MOVE_BASE_DAMAGE]
category = moveData[MOVE_CATEGORY]
accuracy = moveData[MOVE_ACCURACY]
#===========================================================================
# Dynamax - Displays Max Move data.
#===========================================================================
maxMoveData = pbGetMaxMoveData(moveToLearn,moveid)
if maxMoveData
basedamage = maxMoveData[0]
accuracy = maxMoveData[1]
moveid = maxMoveData[2]
end
#===========================================================================
# Write power and accuracy values for selected move
if basedamage==0 # Status move
textpos.push(["---",216,154,1,base,shadow])
elsif basedamage==1 # Variable power move
textpos.push(["???",216,154,1,base,shadow])
else
textpos.push([sprintf("%d",basedamage),216,154,1,base,shadow])
end
if accuracy==0
textpos.push(["---",216,186,1,base,shadow])
else
textpos.push([sprintf("%d%",accuracy),216+overlay.text_size("%").width,186,1,base,shadow])
end
# Draw all text
pbDrawTextPositions(overlay,textpos)
# Draw selected move's damage category icon
imagepos = [["Graphics/Pictures/category",166,124,0,category*28,64,28]]
pbDrawImagePositions(overlay,imagepos)
# Draw selected move's description
drawTextEx(overlay,4,218,230,5,
pbGetMessage(MessageTypes::MoveDescriptions,moveid),base,shadow)
end
def drawMoveSelection(moveToLearn)
overlay = @sprites["overlay"].bitmap
overlay.clear
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
moveBase = Color.new(64,64,64)
moveShadow = Color.new(176,176,176)
ppBase = [moveBase, # More than 1/2 of total PP
Color.new(248,192,0), # 1/2 of total PP or less
Color.new(248,136,32), # 1/4 of total PP or less
Color.new(248,72,72)] # Zero PP
ppShadow = [moveShadow, # More than 1/2 of total PP
Color.new(144,104,0), # 1/2 of total PP or less
Color.new(144,72,24), # 1/4 of total PP or less
Color.new(136,48,48)] # Zero PP
# Set background image
if moveToLearn!=0
@sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_learnmove")
else
@sprites["background"].setBitmap("Graphics/Pictures/Summary/bg_movedetail")
end
# Write various bits of text
textpos = [
[_INTL("MOVES"),26,16,0,base,shadow],
[_INTL("CATEGORY"),20,122,0,base,shadow],
[_INTL("POWER"),20,154,0,base,shadow],
[_INTL("ACCURACY"),20,186,0,base,shadow]
]
imagepos = []
# Write move names, types and PP amounts for each known move
yPos = 98
yPos -= 76 if moveToLearn!=0
for i in 0...5
move = @pokemon.moves
if i==4
move = PBMove.new(moveToLearn) if moveToLearn!=0
yPos += 20
end
if move && move.id>0
#=======================================================================
# Dynamax - Draws Max Move names and types.
#=======================================================================
movelist = drawDynamaxMoveSel(move,yPos,moveBase,moveShadow,moveToLearn)
imagepos.push(movelist[0])
textpos.push(movelist[1])
#=======================================================================
if move.totalpp>0
textpos.push([_INTL("PP"),342,yPos+32,0,moveBase,moveShadow])
ppfraction = 0
if move.pp==0; ppfraction = 3
elsif move.pp*4<=move.totalpp; ppfraction = 2
elsif move.pp*2<=move.totalpp; ppfraction = 1
end
textpos.push([sprintf("%d/%d",move.pp,move.totalpp),460,yPos+32,1,ppBase[ppfraction],ppShadow[ppfraction]])
end
else
textpos.push(["-",316,yPos,0,moveBase,moveShadow])
textpos.push(["--",442,yPos+32,1,moveBase,moveShadow])
end
yPos += 64
end
# Draw all text and images
pbDrawTextPositions(overlay,textpos)
pbDrawImagePositions(overlay,imagepos)
# Draw Pokémon's type icon(s)
type1rect = Rect.new(0,@pokemon.type1*28,64,28)
type2rect = Rect.new(0,@pokemon.type2*28,64,28)
if @[email protected]
overlay.blt(130,78,@typebitmap.bitmap,type1rect)
else
overlay.blt(96,78,@typebitmap.bitmap,type1rect)
overlay.blt(166,78,@typebitmap.bitmap,type2rect)
end
end
def drawPageFive
overlay = @sprites["overlay"].bitmap
@sprites["uparrow"].visible = false
@sprites["downarrow"].visible = false
# Write various bits of text
textpos = [
[_INTL("No. of Ribbons:"),234,332,0,Color.new(64,64,64),Color.new(176,176,176)],
[@pokemon.ribbonCount.to_s,450,332,1,Color.new(64,64,64),Color.new(176,176,176)],
]
# Draw all text
pbDrawTextPositions(overlay,textpos)
# Show all ribbons
imagepos = []
coord = 0
if @pokemon.ribbons
for i in @ribbonOffset*4...@ribbonOffset*4+12
break if [email protected]
ribn = @pokemon.ribbons-1
imagepos.push(["Graphics/Pictures/ribbons",230+68*(coord%4),78+68*(coord/4).floor,
64*(ribn%8),64*(ribn/8).floor,64,64])
coord += 1
break if coord>=12
end
end
# Draw all images
pbDrawImagePositions(overlay,imagepos)
end
def drawSelectedRibbon(ribbonid)
# Draw all of page five
drawPage(5)
# Set various values
overlay = @sprites["overlay"].bitmap
base = Color.new(64,64,64)
shadow = Color.new(176,176,176)
nameBase = Color.new(248,248,248)
nameShadow = Color.new(104,104,104)
# Get data for selected ribbon
name = ribbonid ? PBRibbons.getName(ribbonid) : ""
desc = ribbonid ? PBRibbons.getDescription(ribbonid) : ""
# Draw the description box
imagepos = [
["Graphics/Pictures/Summary/overlay_ribbon",8,280]
]
pbDrawImagePositions(overlay,imagepos)
# Draw name of selected ribbon
textpos = [
[name,18,286,0,nameBase,nameShadow]
]
pbDrawTextPositions(overlay,textpos)
# Draw selected ribbon's description
drawTextEx(overlay,18,318,480,2,desc,base,shadow)
end
def pbGoToPrevious
newindex = @partyindex
while newindex>0
newindex -= 1
if @party[newindex] && (@page==1 || !@party[newindex].egg?)
@partyindex = newindex
break
end
end
end
def pbGoToNext
newindex = @partyindex
while newindex<@party.length-1
newindex += 1
if @party[newindex] && (@page==1 || !@party[newindex].egg?)
@partyindex = newindex
break
end
end
end
def pbChangePokemon
@pokemon = @party[@partyindex]
@sprites["pokemon"].setPokemonBitmap(@pokemon)
@sprites["itemicon"].item = @pokemon.item
pbSEStop
pbPlayCry(@pokemon)
end
def pbMoveSelection
@sprites["movesel"].visible = true
@sprites["movesel"].index = 0
selmove = 0
oldselmove = 0
switching = false
drawSelectedMove(0,@pokemon.moves[selmove].id)
loop do
Graphics.update
Input.update
pbUpdate
if @sprites["movepresel"].index==@sprites["movesel"].index
@sprites["movepresel"].z = @sprites["movesel"].z+1
else
@sprites["movepresel"].z = @sprites["movesel"].z
end
if Input.trigger?(Input::B)
(switching) ? pbPlayCancelSE : pbPlayCloseMenuSE
break if !switching
@sprites["movepresel"].visible = false
switching = false
elsif Input.trigger?(Input::C)
pbPlayDecisionSE
if selmove==4
break if !switching
@sprites["movepresel"].visible = false
switching = false
else
if [email protected]?
if !switching
@sprites["movepresel"].index = selmove
@sprites["movepresel"].visible = true
oldselmove = selmove
switching = true
else
tmpmove = @pokemon.moves[oldselmove]
@pokemon.moves[oldselmove] = @pokemon.moves[selmove]
@pokemon.moves[selmove] = tmpmove
@sprites["movepresel"].visible = false
switching = false
drawSelectedMove(0,@pokemon.moves[selmove].id)
end
end
end
elsif Input.trigger?(Input::UP)
selmove -= 1
if selmove<4 && selmove>[email protected]
selmove = @pokemon.numMoves-1
end
selmove = 0 if selmove>=4
selmove = @pokemon.numMoves-1 if selmove<0
@sprites["movesel"].index = selmove
newmove = @pokemon.moves[selmove].id
pbPlayCursorSE
drawSelectedMove(0,newmove)
elsif Input.trigger?(Input::DOWN)
selmove += 1
selmove = 0 if selmove<4 && selmove>[email protected]
selmove = 0 if selmove>=4
selmove = 4 if selmove<0
@sprites["movesel"].index = selmove
newmove = @pokemon.moves[selmove].id
pbPlayCursorSE
drawSelectedMove(0,newmove)
end
end
@sprites["movesel"].visible=false
end
def pbRibbonSelection
@sprites["ribbonsel"].visible = true
@sprites["ribbonsel"].index = 0
selribbon = @ribbonOffset*4
oldselribbon = selribbon
switching = false
numRibbons = @pokemon.ribbons.length
numRows = [((numRibbons+3)/4).floor,3].max
drawSelectedRibbon(@pokemon.ribbons[selribbon])
loop do
@sprites["uparrow"].visible = (@ribbonOffset>0)
@sprites["downarrow"].visible = (@ribbonOffset<numRows-3)
Graphics.update
Input.update
pbUpdate
if @sprites["ribbonpresel"].index==@sprites["ribbonsel"].index
@sprites["ribbonpresel"].z = @sprites["ribbonsel"].z+1
else
@sprites["ribbonpresel"].z = @sprites["ribbonsel"].z
end
hasMovedCursor = false
if Input.trigger?(Input::B)
(switching) ? pbPlayCancelSE : pbPlayCloseMenuSE
break if !switching
@sprites["ribbonpresel"].visible = false
switching = false
elsif Input.trigger?(Input::C)
if !switching
if @pokemon.ribbons[selribbon]
pbPlayDecisionSE
@sprites["ribbonpresel"].index = selribbon-@ribbonOffset*4
oldselribbon = selribbon
@sprites["ribbonpresel"].visible = true
switching = true
end
else
pbPlayDecisionSE
tmpribbon = @pokemon.ribbons[oldselribbon]
@pokemon.ribbons[oldselribbon] = @pokemon.ribbons[selribbon]
@pokemon.ribbons[selribbon] = tmpribbon
if @pokemon.ribbons[oldselribbon] || @pokemon.ribbons[selribbon]
@pokemon.ribbons.compact!
if selribbon>=numRibbons
selribbon = numRibbons-1
hasMovedCursor = true
end
end
@sprites["ribbonpresel"].visible = false
switching = false
drawSelectedRibbon(@pokemon.ribbons[selribbon])
end
elsif Input.trigger?(Input::UP)
selribbon -= 4
selribbon += numRows*4 if selribbon<0
hasMovedCursor = true
pbPlayCursorSE
elsif Input.trigger?(Input::DOWN)
selribbon += 4
selribbon -= numRows*4 if selribbon>=numRows*4
hasMovedCursor = true
pbPlayCursorSE
elsif Input.trigger?(Input::LEFT)
selribbon -= 1
selribbon += 4 if selribbon%4==3
hasMovedCursor = true
pbPlayCursorSE
elsif Input.trigger?(Input::RIGHT)
selribbon += 1
selribbon -= 4 if selribbon%4==0
hasMovedCursor = true
pbPlayCursorSE
end
if hasMovedCursor
@ribbonOffset = (selribbon/4).floor if selribbon<@ribbonOffset*4
@ribbonOffset = (selribbon/4).floor-2 if selribbon>=(@ribbonOffset+3)*4
@ribbonOffset = 0 if @ribbonOffset<0
@ribbonOffset = numRows-3 if @ribbonOffset>numRows-3
@sprites["ribbonsel"].index = selribbon-@ribbonOffset*4
@sprites["ribbonpresel"].index = oldselribbon-@ribbonOffset*4
drawSelectedRibbon(@pokemon.ribbons[selribbon])
end
end
@sprites["ribbonsel"].visible = false
end
def pbMarking(pokemon)
@sprites["markingbg"].visible = true
@sprites["markingoverlay"].visible = true
@sprites["markingsel"].visible = true
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
ret = pokemon.markings
markings = pokemon.markings
index = 0
redraw = true
markrect = Rect.new(0,0,16,16)
loop do
# Redraw the markings and text
if redraw
@sprites["markingoverlay"].bitmap.clear
for i in 0...6
markrect.x = i*16
markrect.y = (markings&(1<<i)!=0) ? 16 : 0
@sprites["markingoverlay"].bitmap.blt(300+58*(i%3),154+50*(i/3),@markingbitmap.bitmap,markrect)
end
textpos = [
[_INTL("Mark {1}",pokemon.name),366,96,2,base,shadow],
[_INTL("OK"),366,248,2,base,shadow],
[_INTL("Cancel"),366,298,2,base,shadow]
]
pbDrawTextPositions(@sprites["markingoverlay"].bitmap,textpos)
redraw = false
end
# Reposition the cursor
@sprites["markingsel"].x = 284+58*(index%3)
@sprites["markingsel"].y = 144+50*(index/3)
if index==6 # OK
@sprites["markingsel"].x = 284
@sprites["markingsel"].y = 244
@sprites["markingsel"].src_rect.y = @sprites["markingsel"].bitmap.height/2
elsif index==7 # Cancel
@sprites["markingsel"].x = 284
@sprites["markingsel"].y = 294
@sprites["markingsel"].src_rect.y = @sprites["markingsel"].bitmap.height/2
else
@sprites["markingsel"].src_rect.y = 0
end
Graphics.update
Input.update
pbUpdate
if Input.trigger?(Input::B)
pbPlayCloseMenuSE
break
elsif Input.trigger?(Input::C)
pbPlayDecisionSE
if index==6 # OK
ret = markings
break
elsif index==7 # Cancel
break
else
mask = (1<<index)
if (markings&mask)==0
markings |= mask
else
markings &= ~mask
end
redraw = true
end
elsif Input.trigger?(Input::UP)
if index==7; index = 6
elsif index==6; index = 4
elsif index<3; index = 7
else; index -= 3
end
pbPlayCursorSE
elsif Input.trigger?(Input::DOWN)
if index==7; index = 1
elsif index==6; index = 7
elsif index>=3; index = 6
else; index += 3
end
pbPlayCursorSE
elsif Input.trigger?(Input::LEFT)
if index<6
index -= 1
index += 3 if index%3==2
pbPlayCursorSE
end
elsif Input.trigger?(Input::RIGHT)
if index<6
index += 1
index -= 3 if index%3==0
pbPlayCursorSE
end
end
end
@sprites["markingbg"].visible = false
@sprites["markingoverlay"].visible = false
@sprites["markingsel"].visible = false
if pokemon.markings!=ret
pokemon.markings = ret
return true
end
return false
end
def pbOptions
dorefresh = false
commands = []
cmdGiveItem = -1
cmdTakeItem = -1
cmdPokedex = -1
cmdMark = -1
if [email protected]?
commands[cmdGiveItem = commands.length] = _INTL("Give item")
commands[cmdTakeItem = commands.length] = _INTL("Take item") if @pokemon.hasItem?
commands[cmdPokedex = commands.length] = _INTL("View Pokédex") if $Trainer.pokedex
end
commands[cmdMark = commands.length] = _INTL("Mark")
commands[commands.length] = _INTL("Cancel")
command = pbShowCommands(commands)
if cmdGiveItem>=0 && command==cmdGiveItem
item = 0
pbFadeOutIn {
scene = PokemonBag_Scene.new
screen = PokemonBagScreen.new(scene,$PokemonBag)
item = screen.pbChooseItemScreen(Proc.new { |itm| pbCanHoldItem?(itm) })
}
if item>0
dorefresh = pbGiveItemToPokemon(item,@pokemon,self,@partyindex)
end
elsif cmdTakeItem>=0 && command==cmdTakeItem
dorefresh = pbTakeItemFromPokemon(@pokemon,self)
elsif cmdPokedex>=0 && command==cmdPokedex
pbUpdateLastSeenForm(@pokemon)
pbFadeOutIn {
scene = PokemonPokedexInfo_Scene.new
screen = PokemonPokedexInfoScreen.new(scene)
screen.pbStartSceneSingle(@pokemon.species)
}
dorefresh = true
elsif cmdMark>=0 && command==cmdMark
dorefresh = pbMarking(@pokemon)
end
return dorefresh
end
def pbChooseMoveToForget(moveToLearn)
selmove = 0
maxmove = (moveToLearn>0) ? 4 : 3
loop do
Graphics.update
Input.update
pbUpdate
if Input.trigger?(Input::B)
selmove = 4
pbPlayCloseMenuSE if moveToLearn>0
break
elsif Input.trigger?(Input::C)
pbPlayDecisionSE
break
elsif Input.trigger?(Input::UP)
selmove -= 1
selmove = maxmove if selmove<0
if selmove<4 && selmove>[email protected]
selmove = @pokemon.numMoves-1
end
@sprites["movesel"].index = selmove
newmove = (selmove==4) ? moveToLearn : @pokemon.moves[selmove].id
drawSelectedMove(moveToLearn,newmove)
elsif Input.trigger?(Input::DOWN)
selmove += 1
selmove = 0 if selmove>maxmove
if selmove<4 && selmove>[email protected]
selmove = (moveToLearn>0) ? maxmove : 0
end
@sprites["movesel"].index = selmove
newmove = (selmove==4) ? moveToLearn : @pokemon.moves[selmove].id
drawSelectedMove(moveToLearn,newmove)
end
end
return (selmove==4) ? -1 : selmove
end
def pbScene
pbPlayCry(@pokemon)
loop do
Graphics.update
Input.update
pbUpdate
dorefresh = false
if Input.trigger?(Input::A)
pbSEStop
pbPlayCry(@pokemon)
elsif Input.trigger?(Input::B)
pbPlayCloseMenuSE
break
elsif Input.trigger?(Input::C)
if @page==4
pbPlayDecisionSE
pbMoveSelection
dorefresh = true
elsif @page==5
pbPlayDecisionSE
pbRibbonSelection
dorefresh = true
elsif !@inbattle
pbPlayDecisionSE
dorefresh = pbOptions
end
elsif Input.trigger?(Input::UP) && @partyindex>0
oldindex = @partyindex
pbGoToPrevious
if @partyindex!=oldindex
pbChangePokemon
@ribbonOffset = 0
dorefresh = true
end
elsif Input.trigger?(Input::DOWN) && @partyindex<@party.length-1
oldindex = @partyindex
pbGoToNext
if @partyindex!=oldindex
pbChangePokemon
@ribbonOffset = 0
dorefresh = true
end
elsif Input.trigger?(Input::LEFT) && [email protected]?
oldpage = @page
@page -= 1
@page = 1 if @page<1
@page = 5 if @page>5
if @page!=oldpage # Move to next page
pbSEPlay("GUI summary change page")
@ribbonOffset = 0
dorefresh = true
end
elsif Input.trigger?(Input::RIGHT) && [email protected]?
oldpage = @page
@page += 1
@page = 1 if @page<1
@page = 5 if @page>5
if @page!=oldpage # Move to next page
pbSEPlay("GUI summary change page")
@ribbonOffset = 0
dorefresh = true
end
end
if dorefresh
drawPage(@page)
end
end
return @partyindex
end
end
class PokemonSummaryScreen
def initialize(scene,inbattle=false)
@scene = scene
@inbattle = inbattle
end
def pbStartScreen(party,partyindex)
@scene.pbStartScene(party,partyindex,@inbattle)
ret = @scene.pbScene
@scene.pbEndScene
return ret
end
def pbStartForgetScreen(party,partyindex,moveToLearn)
ret = -1
@scene.pbStartForgetScene(party,partyindex,moveToLearn)
loop do
ret = @scene.pbChooseMoveToForget(moveToLearn)
if ret>=0 && moveToLearn!=0 && pbIsHiddenMove?(party[partyindex].moves[ret].id) && !$DEBUG
pbMessage(_INTL("HM moves can't be forgotten now.")) { @scene.pbUpdate }
else
break
end
end
@scene.pbEndScene
return ret
end
def pbStartChooseMoveScreen(party,partyindex,message)
ret = -1
@scene.pbStartForgetScene(party,partyindex,0)
pbMessage(message) { @scene.pbUpdate }
loop do
ret = @scene.pbChooseMoveToForget(0)
if ret<0
pbMessage(_INTL("You must choose a move!")) { @scene.pbUpdate }
else
break
end
end
@scene.pbEndScene
return ret
end
end