EVs and IVs visible in V17

Morningdew

Novice
Member
Joined
Jul 8, 2017
Posts
26

Fhauno

Rookie
Member
Joined
Oct 21, 2017
Posts
2
Hey friend, I was able to edit the original Essentials V17 script to show the EVs and IVs of the Pokémon. Although I have succeeded, I can not give any support to the script, I just modified it as needed. So I'm going to pass you the original Essentials script, with the changes I've made to have an "extra" page showing what you're asking for.

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)
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z = 99999
@party = party
@partyindex = partyindex
@pokemon = @party[@partyindex]
@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"].x = 14
@sprites["pokeicon"].y = 52
@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"].x = 14
@sprites["pokeicon"].y = 52
@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.isEgg?
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,0,0,-1,-1])
# 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,0,0,-1,-1])
end
# Show shininess star
if @pokemon.isShiny?
imagepos.push([sprintf("Graphics/Pictures/shiny"),2,134,0,0,-1,-1])
end
# Draw all images
pbDrawImagePositions(overlay,imagepos)
textpos = []
# Write various bits of text
pagename = [_INTL("INFO"),
_INTL("TRAINER MEMO"),
_INTL("SKILLS"),
_INTL("EV's & IV's"),
_INTL("MOVES"),
_INTL("RIBBONS")][page-1]
textpos = [
[pagename,26,16,0,base,shadow],
[@pokemon.name,46,62,0,base,shadow],
[@pokemon.level.to_s,26,93,0,Color.new(64,64,64),Color.new(176,176,176)],
[_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
# Write the gender symbol
if @pokemon.isMale?
textpos.push([_INTL("♂"),178,62,0,Color.new(24,112,216),Color.new(136,168,208)])
elsif @pokemon.isFemale?
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
when 6; drawPageSix
end
end
def drawPageOne
overlay = @sprites["overlay"].bitmap
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
dexNumBase = (@pokemon.isShiny?) ? Color.new(248,56,32) : Color.new(64,64,64)
dexNumShadow = (@pokemon.isShiny?) ? Color.new(224,152,144) : Color.new(176,176,176)
# If a Shadow Pokémon, draw the heart gauge area and bar
if (@pokemon.isShadow? rescue false)
shadowfract = @pokemon.heartgauge*1.0/PokeBattle_Pokemon::HEARTGAUGESIZE
imagepos = [
["Graphics/Pictures/Summary/overlay_shadow",224,240,0,0,-1,-1],
["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 DEXINDEXOFFSETS.include?(-1)
else
dexnum = 0
for i in 0...$PokemonGlobal.pokedexUnlocked.length-1
if $PokemonGlobal.pokedexUnlocked
num = pbGetRegionalNumber(i,@pokemon.species)
if num>0
dexnum = num
dexnumshift = true if DEXINDEXOFFSETS.include?(i)
break
end
end
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)
growthrate = @pokemon.growthrate
startexp = PBExperience.pbGetStartExperience(@pokemon.level,growthrate)
endexp = PBExperience.pbGetStartExperience(@pokemon.level+1,growthrate)
if (@pokemon.isShadow? rescue false)
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
textpos.push([_INTL("Exp. Points"),238,240,0,base,shadow])
textpos.push([pbCommaNumber(@pokemon.exp),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([pbCommaNumber(endexp-@pokemon.exp),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 @pokemon.type1==@pokemon.type2
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
pbDrawImagePositions(overlay,[
["Graphics/Pictures/Summary/overlay_exp",362,372,0,0,(@pokemon.exp-startexp)*128/(endexp-startexp),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)
pbSetSystemFont(overlay)
# 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,0,0,-1,-1])
# 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"),62,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(184,184,160),Color.new(208,208,200)])
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,82,292)
end
def drawPageTwo
overlay = @sprites["overlay"].bitmap
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
memo = ""
# Write nature
shownature = !(@pokemon.isShadow? && @pokemon.heartStage<=3 rescue false)
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==@pokemon.iv[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*5+@pokemon.iv[bestiv]%5]
memo += sprintf("<c3=404040,B0B0B0>%s\n",characteristic)
end
# Write all text
drawFormattedTextEx(overlay,232,78,268,memo)
end

def drawRating
overlay=@sprites["overlay"].bitmap
#overlay.clear
imagepos=[]
stars=[] # Array of each star depending on IVs
for i in 0..5
if @pokemon.iv >= 21 # Best star above 21 IVs
stars.push(3)
elsif @pokemon.iv >= 11 # Okay star between 11-20 IVs
stars.push(2)
elsif @pokemon.iv >= 1 # Bad star between 1-10 IVs
stars.push(1)
elsif @pokemon.iv == 0 # Worst star at 0 IVs
stars.push(0)
end
end
# Draw stars
path="Graphics/Pictures/Summary/summaryRating"
imagepos.push([path,472,76,stars[0]*32,0,32,-1])
imagepos.push([path,472,120,stars[1]*32,0,32,-1])
imagepos.push([path,472,120+32,stars[2]*32,0,32,-1])
imagepos.push([path,472,120+32*2,stars[4]*32,0,32,-1])
imagepos.push([path,472,120+32*3,stars[5]*32,0,32,-1])
imagepos.push([path,472,120+32*4,stars[3]*32,0,32,-1])
pbDrawImagePositions(overlay,imagepos)
end

def drawPageThree
overlay = @sprites["overlay"].bitmap
drawRating
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 = []
for i in 0...5; statshadows = shadow; end
if !(@pokemon.isShadow? && @pokemon.heartStage<=3 rescue false)
natup = (@pokemon.nature/5).floor
natdn = (@pokemon.nature%5).floor
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,shadow],
[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[0]],
[sprintf("%d",@pokemon.attack),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Defense"),248,152,0,base,statshadows[1]],
[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[3]],
[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[4]],
[sprintf("%d",@pokemon.spdef),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Speed"),248,248,0,base,statshadows[2]],
[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
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,@pokemon.hp*96/@pokemon.totalhp,6]
]
pbDrawImagePositions(overlay,imagepos)
end
end
def drawPageFour
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 = []
for i in 0...5; statshadows = shadow; end
if !(@pokemon.isShadow? && @pokemon.heartStage<=3 rescue false)
natup = (@pokemon.nature/5).floor
natdn = (@pokemon.nature%5).floor
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,shadow],
[sprintf("%d/%d",@pokemon.ev[0],@pokemon.iv[0]),456,76,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Attack"),248,120,0,base,statshadows[1]],
[sprintf("%d/%d",@pokemon.ev[1],@pokemon.iv[1]),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Defense"),248,152,0,base,statshadows[2]],
[sprintf("%d/%d",@pokemon.ev[2],@pokemon.iv[2]),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Atk"),248,184,0,base,statshadows[4]],
[sprintf("%d/%d",@pokemon.ev[4],@pokemon.iv[4]),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Def"),248,216,0,base,statshadows[5]],
[sprintf("%d/%d",@pokemon.ev[5],@pokemon.iv[5]),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Speed"),248,248,0,base,statshadows[3]],
[sprintf("%d/%d",@pokemon.ev[3],@pokemon.iv[3]),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
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,@pokemon.hp*96/@pokemon.totalhp,6]
]
pbDrawImagePositions(overlay,imagepos)
end
end

def drawPageFive
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 0...@pokemon.moves.length
move=@pokemon.moves
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
pbSetSystemFont(overlay)
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 = PBMoveData.new(moveid)
basedamage = movedata.basedamage
type = movedata.type
category = movedata.category
accuracy = movedata.accuracy
move = moveid
textpos = []
# 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
pbSetSystemFont(overlay)
# 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
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)
# 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 @pokemon.type1==@pokemon.type2
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 drawPageSix
overlay = @sprites["overlay"].bitmap
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
@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 !@pokemon.ribbons
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(6)
# Set various values
overlay = @sprites["overlay"].bitmap
pbSetSystemFont(overlay)
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,0,0,-1,-1]
]
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].isEgg?)
@partyindex = newindex
break
end
end
end
def pbGoToNext
newindex = @partyindex
while newindex<@party.length-1
newindex += 1
if @party[newindex] && (@page==1 || !@party[newindex].isEgg?)
@partyindex = newindex
break
end
end
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)
pbPlayCancelSE
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 !(@pokemon.isShadow? rescue false)
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>=@pokemon.numMoves
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>=@pokemon.numMoves
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)
pbPlayCancelSE
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)
pbPlayCancelSE
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
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")
commands[cmdMark = commands.length] = _INTL("Mark")
commands[commands.length] = _INTL("Cancel")
command = pbShowCommands(commands)
if cmdGiveItem>=0 && command==cmdGiveItem
item = 0
pbFadeOutIn(99999){
scene = PokemonBag_Scene.new
screen = PokemonBagScreen.new(scene,$PokemonBag)
item = screen.pbChooseItemScreen(Proc.new{|item| pbCanHoldItem?(item) })
}
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(99999){
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
pbPlayCancelSE
break
elsif Input.trigger?(Input::C)
pbPlayDecisionSE
break
elsif Input.trigger?(Input::UP)
selmove -= 1
selmove = maxmove if selmove<0
if selmove<4 && selmove>=@pokemon.numMoves
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>=@pokemon.numMoves
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)
pbPlayCancelSE
break
elsif Input.trigger?(Input::C)
pbPlayDecisionSE
if @page==5
pbMoveSelection
dorefresh = true
elsif @page==6
pbRibbonSelection
dorefresh = true
else
dorefresh = pbOptions
end
elsif Input.trigger?(Input::UP) && @partyindex>0
oldindex = @partyindex
pbGoToPrevious
if @partyindex!=oldindex
@pokemon = @party[@partyindex]
@sprites["pokemon"].setPokemonBitmap(@pokemon)
@sprites["itemicon"].item = @pokemon.item
pbSEStop; pbPlayCry(@pokemon)
@ribbonOffset = 0
dorefresh = true
end
elsif Input.trigger?(Input::DOWN) && @partyindex<@party.length-1
oldindex = @partyindex
pbGoToNext
if @partyindex!=oldindex
@pokemon = @party[@partyindex]
@sprites["pokemon"].setPokemonBitmap(@pokemon)
@sprites["itemicon"].item = @pokemon.item
pbSEStop; pbPlayCry(@pokemon)
@ribbonOffset = 0
dorefresh = true
end
elsif Input.trigger?(Input::LEFT) && !@pokemon.isEgg?
oldpage = @page
@page -= 1
@page = 1 if @page<1
@page = 6 if @page>6
if @page!=oldpage # Move to next page
pbPlayCursorSE
@ribbonOffset = 0
dorefresh = true
end
elsif Input.trigger?(Input::RIGHT) && !@pokemon.isEgg?
oldpage = @page
@page += 1
@page = 1 if @page<1
@page = 6 if @page>6
if @page!=oldpage # Move to next page
pbPlayCursorSE
@ribbonOffset = 0
dorefresh = true
end
end
if dorefresh
drawPage(@page)
end
end
return @partyindex
end
end

class PokemonSummaryScreen
def initialize(scene)
@scene = scene
end
def pbStartScreen(party,partyindex)
@scene.pbStartScene(party,partyindex)
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
Kernel.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)
Kernel.pbMessage(message){ @scene.pbUpdate }
loop do
ret = @scene.pbChooseMoveToForget(0)
if ret<0
Kernel.pbMessage(_INTL("You must choose a move!")){ @scene.pbUpdate }
else
break
end
end
@scene.pbEndScene
return ret
end
end

Just replace the PScree_Summary script, deleting everything that is in the original and pasting what I commented within the quote.


Then you need to have the graphics in the "Essentials / Graphics / Pictures / Summary" folder
Note that now the summary has 6 pages, the edition I made in the original script was to show the EVs and IVs on page "3", so you should change the images "bg_4" and "bg_5" respectively to "bg_5" and bg_6. "Last but not least is to add the image of the summary where the EVs and IVs will appear and if you need to change the positioning of the texts, just edit the part(in "def drawPageFour"):

textpos = [
[_INTL("HP"),292,76,2,base,shadow],
[sprintf("%d/%d",@pokemon.ev[0],@pokemon.iv[0]),456,76,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Attack"),248,120,0,base,statshadows[1]],
[sprintf("%d/%d",@pokemon.ev[1],@pokemon.iv[1]),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Defense"),248,152,0,base,statshadows[2]],
[sprintf("%d/%d",@pokemon.ev[2],@pokemon.iv[2]),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Atk"),248,184,0,base,statshadows[4]],
[sprintf("%d/%d",@pokemon.ev[4],@pokemon.iv[4]),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Def"),248,216,0,base,statshadows[5]],
[sprintf("%d/%d",@pokemon.ev[5],@pokemon.iv[5]),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Speed"),248,248,0,base,statshadows[3]],
[sprintf("%d/%d",@pokemon.ev[3],@pokemon.iv[3]),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)],
]

Enjoy!
 
Last edited:

Uax

Novice
Member
Joined
Jan 10, 2018
Posts
14
It's working... I'm actually using it. You just need to add the draw-method of the new page and then modify some settings as explained above.

Here is a snippet for you.. this is the method that draw the page to see the ev of a pokemon..
##############################

def drawPageSeven
overlay = @sprites["overlay"].bitmap
base = Color.new(248,248,248)
shadow = Color.new(104,104,104)
statshadows = []
for i in 0...5; statshadows = shadow; end
textpos = [
[_INTL("HP EV"),292,76,2,base,shadow],
[sprintf("%d/255",@pokemon.ev[0]),456,76,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Attack EV"),248,120,0,base,statshadows[1]],
[sprintf("%d/255",@pokemon.ev[1]),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Defense EV"),248,152,0,base,statshadows[2]],
[sprintf("%d/255",@pokemon.ev[2]),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Atk EV"),248,184,0,base,statshadows[4]],
[sprintf("%d/255",@pokemon.ev[4]),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Sp. Def EV"),248,216,0,base,statshadows[5]],
[sprintf("%d/255",@pokemon.ev[5]),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
[_INTL("Speed EV"),248,248,0,base,statshadows[3]],
[sprintf("%d/255",@pokemon.ev[3]),456,248,1,Color.new(64,64,64),Color.new(176,176,176)],
]
# Draw all text
pbDrawTextPositions(overlay,textpos)
text = "Training values"
drawTextEx(overlay,224,316,282,2,text,Color.new(64,64,64),Color.new(176,176,176))
if @pokemon.hp>0
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,@pokemon.hp*96/@pokemon.totalhp,6]
]
pbDrawImagePositions(overlay,imagepos)
end
end
 

deamon1999

Rookie
Member
Joined
Jan 20, 2018
Posts
2
I tried that but when I play the game and get into the summary menu, after I try to access the fourth page I get this error:

Message: undefined method `[]' for (104.000000, 104.000000, 104.000000, 255.000000):Color
PScreen_Summary:682:in `drawPageFour'
PScreen_Summary:330:in `drawPage'
PScreen_Summary:1336:in `pbScene'
PScreen_Summary:1271:in `loop'
PScreen_Summary:1338:in `pbScene'
PScreen_Summary:1349:in `pbStartScreen'
PScreen_Party:626:in `pbSummary'
PScreen_Party:1192:in `pbPokemonScreen'
PScreen_Party:1089:in `loop'
PScreen_Party:1289:in `pbPokemonScreen'

I got similar errors from the page two and three but I managed to deal with those by using the original script.

Do you have any idea how can this be fixed?
 

MillaLya

The Seagaroo
Member
Joined
Mar 11, 2018
Posts
6
I tried that but when I play the game and get into the summary menu, after I try to access the fourth page I get this error:

Message: undefined method `[]' for (104.000000, 104.000000, 104.000000, 255.000000):Color
PScreen_Summary:682:in `drawPageFour'
PScreen_Summary:330:in `drawPage'
PScreen_Summary:1336:in `pbScene'
PScreen_Summary:1271:in `loop'
PScreen_Summary:1338:in `pbScene'
PScreen_Summary:1349:in `pbStartScreen'
PScreen_Party:626:in `pbSummary'
PScreen_Party:1192:in `pbPokemonScreen'
PScreen_Party:1089:in `loop'
PScreen_Party:1289:in `pbPokemonScreen'

I got similar errors from the page two and three but I managed to deal with those by using the original script.

Do you have any idea how can this be fixed?

Use the following code to draw page four would not lead to errors:
Code:
def drawPageFour
	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 = []
	for i in 0...5; statshadows[i] = shadow; end
	if !(@pokemon.isShadow? && @pokemon.heartStage<=3 rescue false)
	  natup = (@pokemon.nature/5).floor
	  natdn = (@pokemon.nature%5).floor
	  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,shadow],
	[sprintf("%d/%d",@pokemon.ev[0],@pokemon.iv[0]),456,76,1,Color.new(64,64,64),Color.new(176,176,176)],
	[_INTL("Attack"),248,120,0,base,statshadows[1]],
	[sprintf("%d/%d",@pokemon.ev[1],@pokemon.iv[1]),456,120,1,Color.new(64,64,64),Color.new(176,176,176)],
	[_INTL("Defense"),248,152,0,base,statshadows[2]],
	[sprintf("%d/%d",@pokemon.ev[2],@pokemon.iv[2]),456,152,1,Color.new(64,64,64),Color.new(176,176,176)],
	[_INTL("Sp. Atk"),248,184,0,base,statshadows[4]],
	[sprintf("%d/%d",@pokemon.ev[4],@pokemon.iv[4]),456,184,1,Color.new(64,64,64),Color.new(176,176,176)],
	[_INTL("Sp. Def"),248,216,0,base,statshadows[5]],
	[sprintf("%d/%d",@pokemon.ev[5],@pokemon.iv[5]),456,216,1,Color.new(64,64,64),Color.new(176,176,176)],
	[_INTL("Speed"),248,248,0,base,statshadows[3]],
	[sprintf("%d/%d",@pokemon.ev[3],@pokemon.iv[3]),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
	  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,@pokemon.hp*96/@pokemon.totalhp,6]
	  ]
	  pbDrawImagePositions(overlay,imagepos)
	  end
	end

The error is probably because you pasted directly the code by Fhauno, and the method contains a line that the system cannot recognize:
for i in 0...5; statshadows[] = shadow; end
It's fixed simply by adding an "i" between the square brackets. That's how the stuff is done in the code for page three.
 
Top