class PokemonDataBox < SpriteWrapper
attr_reader :battler
attr_accessor :selected
attr_accessor :appearing
attr_reader :animatingHP
attr_reader :animatingEXP
def initialize(battler,doublebattle,viewport=nil)
super(viewport)
@explevel=0
@battler=battler
@spritebaseY=0
@selected=0
@frame=0
@showhp=false
@showexp=false
@appearing=false
@animatingHP=false
@currenthp=0
@endhp=0
@expflash=0
@statusCX=64
@statusY=28
@pokeball=BitmapCache.load_bitmap("Graphics/Pictures/pokeball.png")
if (@battler.index&1)==0 # if player's Pokemon
@spritebaseX=16
else
@spritebaseX=0
end
yoffset=(Graphics.height-320)
if doublebattle
case @battler.index
when 0
@databox=BitmapCache.load_bitmap("Graphics/Pictures/doublePlayerBox.png")
@spriteX=256
@spriteY=124+yoffset
when 1
@databox=BitmapCache.load_bitmap("Graphics/Pictures/doubleEnemyBox.png")
@spriteX=26
@spriteY=10+yoffset
@spritebaseX=0
@spritebaseY=0
when 2
@databox=BitmapCache.load_bitmap("Graphics/Pictures/doublePlayerBox.png")
@spriteX=280
@spriteY=174+yoffset
when 3
@databox=BitmapCache.load_bitmap("Graphics/Pictures/doubleEnemyBox.png")
@spriteX=2
@spriteY=60+yoffset
end
else
case @battler.index
when 0
@databox=BitmapCache.load_bitmap("Graphics/Pictures/singlePlayerBox.png")
@spriteX=254
@spriteY=148+yoffset
@showhp=true
@showexp=true
@statusCX=40
@statusY=44
when 1
@databox=BitmapCache.load_bitmap("Graphics/Pictures/singleEnemyBox.png")
@spriteX=26
@spriteY=32+yoffset
end
end
@statuses=BitmapCache.load_bitmap("Graphics/Pictures/boxstatuses.png")
@contents=Bitmap.new(@databox.width,@databox.height)
self.bitmap=@contents
self.visible=false
self.z=2
refreshExpLevel
refresh
end
def dispose
@statuses.dispose
@databox.dispose
@pokeball.dispose
@contents.dispose
super
end
def refreshExpLevel
if
[email protected]
@explevel=0
else
[email protected]
startexp=PBExperience.pbGetStartExperience(@battler.pokemon.level,growthrate)
endexp=PBExperience.pbGetStartExperience(@battler.pokemon.level+1,growthrate)
if startexp==endexp
@explevel=0
else
@explevel=(@battler.pokemon.exp-startexp)*128/(endexp-startexp)
end
end
end
def exp
return @animatingEXP ? @currentexp : @explevel
end
def hp
return @animatingHP ? @currenthp : @battler.hp
end
def animateHP(oldhp,newhp)
@currenthp=oldhp
@endhp=newhp
@animatingHP=true
end
def animateEXP(oldexp,newexp)
@currentexp=oldexp
@endexp=newexp
@animatingEXP=true
end
def appear
refreshExpLevel
refresh
self.visible=true
self.opacity=255
if (@battler.index&1)==0 # if player's Pokemon
self.x=@spriteX+320
else
self.x=@spriteX-320
end
self.y=@spriteY
@appearing=true
end
def refresh
self.bitmap.clear
return if
[email protected]
self.bitmap.blt(0,0,@databox,Rect.new(0,0,@databox.width,@databox.height))
pbSetSmallFont(self.bitmap)
hpstring=_ISPRINTF("{1: 2d}/{2: 2d}",self.hp,@battler.totalhp)
textpos=[]
base=PokeBattle_Scene::BOXTEXTBASECOLOR
shadow=PokeBattle_Scene::BOXTEXTSHADOWCOLOR
genderX=self.bitmap.text_size(@battler.name).width
genderX+=@spritebaseX+14
textpos.push([@battler.name,@spritebaseX+14,@spritebaseY+6,false,base,shadow])
if @battler.gender==0 # Male
textpos.push([_INTL("♂"),genderX,@spritebaseY+6,false,Color.new(8*8,25*8,31*8),shadow])
elsif @battler.gender==1 # Female
textpos.push([_INTL("♀"),genderX,@spritebaseY+6,false,Color.new(31*8,19*8,18*8),shadow])
end
textpos.push([_INTL("Lv{1}",@battler.level),@spritebaseX+170,@spritebaseY+6,true,base,shadow])
if @showhp
textpos.push([hpstring,@spritebaseX+170,@spritebaseY+40,true,base,shadow])
end
pbCopyBitmap(self.bitmap,@pokeball,@spritebaseX+5,@spritebaseY+25) if $Trainer.owned[battler.species]
pbDrawTextPositions(self.bitmap,textpos)
if @battler.status>0
self.bitmap.blt(@spritebaseX+14,@spritebaseY+@statusY,@statuses,
Rect.new(0,(@battler.status-1)*16,@statusCX,16))
end
[email protected]==0 ? 0 : (self.hp*96/@battler.totalhp)
hpgauge=1 if hpgauge==0 && self.hp>0
hpzone=0
hpzone=1 if self.hp<=(@battler.totalhp/2).floor
hpzone=2 if self.hp<=(@battler.totalhp/4).floor
hpcolors=[
PokeBattle_Scene::HPCOLORSHADOW1,
PokeBattle_Scene::HPCOLORBASE1,
PokeBattle_Scene::HPCOLORSHADOW2,
PokeBattle_Scene::HPCOLORBASE2,
PokeBattle_Scene::HPCOLORSHADOW3,
PokeBattle_Scene::HPCOLORBASE3
]
# fill with HP color
self.bitmap.fill_rect(@spritebaseX+78,@spritebaseY+34,hpgauge,2,hpcolors[hpzone*2])
self.bitmap.fill_rect(@spritebaseX+78,@spritebaseY+36,hpgauge,2,hpcolors[hpzone*2+1])
# fill with black
self.bitmap.fill_rect(@spritebaseX+78+hpgauge,@spritebaseY+34,96-hpgauge,2,PokeBattle_Scene::HPCOLORSHADOW4)
self.bitmap.fill_rect(@spritebaseX+78+hpgauge,@spritebaseY+36,96-hpgauge,2,PokeBattle_Scene::HPCOLORBASE4)
if @showexp
# fill with EXP color
self.bitmap.fill_rect(@spritebaseX+46,@spritebaseY+66,self.exp,4,PokeBattle_Scene::EXPCOLOR)
end
end
def update
super
@frame+=1
if @animatingHP
if @currenthp<@endhp
@currenthp+=1
elsif @currenthp>@endhp
@currenthp-=1
end
refresh
@animatingHP=false if @currenthp==@endhp
end
if @animatingEXP
if !@showexp
@currentexp=@endexp
elsif @currentexp<@endexp
@currentexp+=1
elsif @currentexp>@endexp
@currentexp-=1
end
refresh
if @currentexp==@endexp
if @currentexp==128
if @expflash==0
Audio.se_play("Audio/SE/expfull.wav")
self.flash(Color.new(64,200,248),8)
@expflash=8
else
@expflash-=1
if @expflash==0
@animatingEXP=false
refreshExpLevel
end
end
else
@animatingEXP=false
end
end
end
if @appearing
if (@battler.index&1)==0 # if player's Pokemon
self.x-=8
@appearing=false if self.x<=@spriteX
else
self.x+=8
@appearing=false if self.x>=@spriteX
end
self.y=@spriteY
return
end
if ((@frame/10).floor&1)==1 && @selected==1 # When choosing commands for this Pokemon
self.x=@spriteX
self.y=@spriteY+2
elsif ((@frame/5).floor&1)==1 && @selected==2 # When targeted or damaged
self.x=@spriteX
self.y=@spriteY+2
else
self.x=@spriteX
self.y=@spriteY
end
end
end