double abilities splash

This commit is contained in:
infinitefusion
2023-05-27 12:37:08 -04:00
parent 39f9bc5472
commit 1182afbea3
10 changed files with 227 additions and 233 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -330,9 +330,7 @@ module GameData
secondary_ability_index = pkmn.ability_index == 0 ? 1 : 0 secondary_ability_index = pkmn.ability_index == 0 ? 1 : 0
pkmn.ability2_index = secondary_ability_index pkmn.ability2_index = secondary_ability_index
pkmn.ability2 = pkmn.getAbilityList[secondary_ability_index][0] pkmn.ability2 = pkmn.getAbilityList[secondary_ability_index][0]
#print _INTL("Primary: {1}, Secondary: {2}",pkmn.ability.id, pkmn.ability2.id)
print _INTL("Primary: {1}, Secondary: {2}",pkmn.ability.id, pkmn.ability2.id)
end end
pkmn.gender = pkmn_data[:gender] || ((trainer.male?) ? 0 : 1) pkmn.gender = pkmn_data[:gender] || ((trainer.male?) ? 0 : 1)
@@ -228,14 +228,21 @@ end
# Makes a Pokémon's ability bar appear # Makes a Pokémon's ability bar appear
#=============================================================================== #===============================================================================
class AbilitySplashAppearAnimation < PokeBattle_Animation class AbilitySplashAppearAnimation < PokeBattle_Animation
def initialize(sprites,viewport,side) def initialize(sprites,viewport,side,secondAbility=false)
@secondAbility=secondAbility
@side = side @side = side
super(sprites,viewport) super(sprites,viewport)
end end
def createProcesses def createProcesses
return if !@sprites["abilityBar_#{@side}"] if @secondAbility
bar = addSprite(@sprites["abilityBar_#{@side}"]) return if !@sprites["ability2Bar_#{@side}"]
bar = addSprite(@sprites["ability2Bar_#{@side}"])
else
return if !@sprites["abilityBar_#{@side}"]
bar = addSprite(@sprites["abilityBar_#{@side}"])
end
bar.setVisible(0,true) bar.setVisible(0,true)
dir = (@side==0) ? 1 : -1 dir = (@side==0) ? 1 : -1
bar.moveDelta(0,8,dir*Graphics.width/2,0) bar.moveDelta(0,8,dir*Graphics.width/2,0)
@@ -2,13 +2,13 @@
# Data box for regular battles # Data box for regular battles
#=============================================================================== #===============================================================================
class PokemonDataBox < SpriteWrapper class PokemonDataBox < SpriteWrapper
attr_reader :battler attr_reader :battler
attr_accessor :selected attr_accessor :selected
attr_reader :animatingHP attr_reader :animatingHP
attr_reader :animatingExp attr_reader :animatingExp
# Time in seconds to fully fill the Exp bar (from empty). # Time in seconds to fully fill the Exp bar (from empty).
EXP_BAR_FILL_TIME = 1.75 EXP_BAR_FILL_TIME = 1.75
# Maximum time in seconds to make a change to the HP bar. # Maximum time in seconds to make a change to the HP bar.
HP_BAR_CHANGE_TIME = 1.0 HP_BAR_CHANGE_TIME = 1.0
STATUS_ICON_HEIGHT = 16 STATUS_ICON_HEIGHT = 16
@@ -18,48 +18,48 @@ class PokemonDataBox < SpriteWrapper
# MALE_SHADOW_COLOR = NAME_SHADOW_COLOR # MALE_SHADOW_COLOR = NAME_SHADOW_COLOR
# FEMALE_BASE_COLOR = Color.new(248,88,40) # FEMALE_BASE_COLOR = Color.new(248,88,40)
# FEMALE_SHADOW_COLOR = NAME_SHADOW_COLOR # FEMALE_SHADOW_COLOR = NAME_SHADOW_COLOR
NAME_BASE_COLOR = Color.new(255, 255, 255) NAME_BASE_COLOR = Color.new(255,255,255)
NAME_SHADOW_COLOR = Color.new(32, 32, 32) NAME_SHADOW_COLOR = Color.new(32,32,32)
MALE_BASE_COLOR = Color.new(48, 96, 216) MALE_BASE_COLOR = Color.new(48,96,216)
MALE_SHADOW_COLOR = NAME_SHADOW_COLOR MALE_SHADOW_COLOR = NAME_SHADOW_COLOR
FEMALE_BASE_COLOR = Color.new(248, 88, 40) FEMALE_BASE_COLOR = Color.new(248,88,40)
FEMALE_SHADOW_COLOR = NAME_SHADOW_COLOR FEMALE_SHADOW_COLOR = NAME_SHADOW_COLOR
def initialize(battler, sideSize, viewport = nil)
def initialize(battler,sideSize,viewport=nil)
super(viewport) super(viewport)
@battler = battler @battler = battler
@sprites = {} @sprites = {}
@spriteX = 0 @spriteX = 0
@spriteY = 0 @spriteY = 0
@spriteBaseX = 0 @spriteBaseX = 0
@selected = 0 @selected = 0
@frame = 0 @frame = 0
@showHP = false # Specifically, show the HP numbers @showHP = false # Specifically, show the HP numbers
@animatingHP = false @animatingHP = false
@showExp = false # Specifically, show the Exp bar @showExp = false # Specifically, show the Exp bar
@animatingExp = false @animatingExp = false
@expFlash = 0 @expFlash = 0
initializeDataBoxGraphic(sideSize) initializeDataBoxGraphic(sideSize)
initializeOtherGraphics(viewport) initializeOtherGraphics(viewport)
refresh refresh
end end
def initializeDataBoxGraphic(sideSize) def initializeDataBoxGraphic(sideSize)
onPlayerSide = ((@battler.index % 2) == 0) onPlayerSide = ((@battler.index%2)==0)
# Get the data box graphic and set whether the HP numbers/Exp bar are shown # Get the data box graphic and set whether the HP numbers/Exp bar are shown
if sideSize == 1 # One Pokémon on side, use the regular dara box BG if sideSize==1 # One Pokémon on side, use the regular dara box BG
bgFilename = ["Graphics/Pictures/Battle/databox_normal", bgFilename = ["Graphics/Pictures/Battle/databox_normal",
"Graphics/Pictures/Battle/databox_normal_foe"][@battler.index % 2] "Graphics/Pictures/Battle/databox_normal_foe"][@battler.index%2]
if onPlayerSide if onPlayerSide
@showHP = true @showHP = true
@showExp = true @showExp = true
end end
else else # Multiple Pokémon on side, use the thin dara box BG
# Multiple Pokémon on side, use the thin dara box BG
bgFilename = ["Graphics/Pictures/Battle/databox_thin", bgFilename = ["Graphics/Pictures/Battle/databox_thin",
"Graphics/Pictures/Battle/databox_thin_foe"][@battler.index % 2] "Graphics/Pictures/Battle/databox_thin_foe"][@battler.index%2]
end end
@databoxBitmap = AnimatedBitmap.new(bgFilename) @databoxBitmap = AnimatedBitmap.new(bgFilename)
# Determine the co-ordinates of the data box and the left edge padding width # Determine the co-ordinates of the data box and the left edge padding width
if onPlayerSide if onPlayerSide
@spriteX = Graphics.width - 244 @spriteX = Graphics.width - 244
@@ -72,37 +72,37 @@ class PokemonDataBox < SpriteWrapper
end end
case sideSize case sideSize
when 2 when 2
@spriteX += [-12, 12, 0, 0][@battler.index] @spriteX += [-12, 12, 0, 0][@battler.index]
@spriteY += [-20, -34, 34, 20][@battler.index] @spriteY += [-20, -34, 34, 20][@battler.index]
when 3 when 3
@spriteX += [-12, 12, -6, 6, 0, 0][@battler.index] @spriteX += [-12, 12, -6, 6, 0, 0][@battler.index]
@spriteY += [-42, -46, 4, 0, 50, 46][@battler.index] @spriteY += [-42, -46, 4, 0, 50, 46][@battler.index]
end end
end end
def initializeOtherGraphics(viewport) def initializeOtherGraphics(viewport)
# Create other bitmaps # Create other bitmaps
@numbersBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/icon_numbers")) @numbersBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/icon_numbers"))
@hpBarBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/overlay_hp")) @hpBarBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/overlay_hp"))
@expBarBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/overlay_exp")) @expBarBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/overlay_exp"))
# Create sprite to draw HP numbers on # Create sprite to draw HP numbers on
@hpNumbers = BitmapSprite.new(124, 16, viewport) @hpNumbers = BitmapSprite.new(124,16,viewport)
pbSetSmallFont(@hpNumbers.bitmap) pbSetSmallFont(@hpNumbers.bitmap)
@sprites["hpNumbers"] = @hpNumbers @sprites["hpNumbers"] = @hpNumbers
# Create sprite wrapper that displays HP bar # Create sprite wrapper that displays HP bar
@hpBar = SpriteWrapper.new(viewport) @hpBar = SpriteWrapper.new(viewport)
@hpBar.bitmap = @hpBarBitmap.bitmap @hpBar.bitmap = @hpBarBitmap.bitmap
@hpBar.src_rect.height = @hpBarBitmap.height / 3 @hpBar.src_rect.height = @hpBarBitmap.height/3
@sprites["hpBar"] = @hpBar @sprites["hpBar"] = @hpBar
# Create sprite wrapper that displays Exp bar # Create sprite wrapper that displays Exp bar
@expBar = SpriteWrapper.new(viewport) @expBar = SpriteWrapper.new(viewport)
@expBar.bitmap = @expBarBitmap.bitmap @expBar.bitmap = @expBarBitmap.bitmap
@sprites["expBar"] = @expBar @sprites["expBar"] = @expBar
# Create sprite wrapper that displays everything except the above # Create sprite wrapper that displays everything except the above
@contents = BitmapWrapper.new(@databoxBitmap.width, @databoxBitmap.height) @contents = BitmapWrapper.new(@databoxBitmap.width,@databoxBitmap.height)
self.bitmap = @contents self.bitmap = @contents
self.visible = false self.visible = false
self.z = 150 + ((@battler.index) / 2) * 5 self.z = 150+((@battler.index)/2)*5
pbSetSystemFont(self.bitmap) pbSetSystemFont(self.bitmap)
end end
@@ -118,23 +118,23 @@ class PokemonDataBox < SpriteWrapper
def x=(value) def x=(value)
super super
@hpBar.x = value + @spriteBaseX + 12 #102 @hpBar.x = value+@spriteBaseX+12#102
@expBar.x = value + @spriteBaseX + 24 @expBar.x = value+@spriteBaseX+24
@hpNumbers.x = value + @spriteBaseX + 80 @hpNumbers.x = value+@spriteBaseX+80
end end
def y=(value) def y=(value)
super super
@hpBar.y = value + 40 @hpBar.y = value+40
@expBar.y = value + 64 @expBar.y = value+64
@hpNumbers.y = value + 52 @hpNumbers.y = value+52
end end
def z=(value) def z=(value)
super super
@hpBar.z = value + 1 @hpBar.z = value+1
@expBar.z = value + 1 @expBar.z = value+1
@hpNumbers.z = value + 2 @hpNumbers.z = value+2
end end
def opacity=(value) def opacity=(value)
@@ -169,42 +169,42 @@ class PokemonDataBox < SpriteWrapper
end end
def exp_fraction def exp_fraction
return (@animatingExp) ? @currentExp.to_f / @rangeExp : @battler.pokemon.exp_fraction return (@animatingExp) ? @currentExp.to_f/@rangeExp : @battler.pokemon.exp_fraction
end end
def animateHP(oldHP, newHP, rangeHP) def animateHP(oldHP,newHP,rangeHP)
@currentHP = oldHP @currentHP = oldHP
@endHP = newHP @endHP = newHP
@rangeHP = rangeHP @rangeHP = rangeHP
# NOTE: A change in HP takes the same amount of time to animate, no matter # NOTE: A change in HP takes the same amount of time to animate, no matter
# how big a change it is. # how big a change it is.
@hpIncPerFrame = (newHP - oldHP).abs / (HP_BAR_CHANGE_TIME * Graphics.frame_rate) @hpIncPerFrame = (newHP-oldHP).abs/(HP_BAR_CHANGE_TIME*Graphics.frame_rate)
# minInc is the smallest amount that HP is allowed to change per frame. # minInc is the smallest amount that HP is allowed to change per frame.
# This avoids a tiny change in HP still taking HP_BAR_CHANGE_TIME seconds. # This avoids a tiny change in HP still taking HP_BAR_CHANGE_TIME seconds.
minInc = (rangeHP * 4) / (@hpBarBitmap.width * HP_BAR_CHANGE_TIME * Graphics.frame_rate) minInc = (rangeHP*4)/(@hpBarBitmap.width*HP_BAR_CHANGE_TIME*Graphics.frame_rate)
@hpIncPerFrame = minInc if @hpIncPerFrame < minInc @hpIncPerFrame = minInc if @hpIncPerFrame<minInc
@animatingHP = true @animatingHP = true
end end
def animateExp(oldExp, newExp, rangeExp) def animateExp(oldExp,newExp,rangeExp)
@currentExp = oldExp @currentExp = oldExp
@endExp = newExp @endExp = newExp
@rangeExp = rangeExp @rangeExp = rangeExp
# NOTE: Filling the Exp bar from empty to full takes EXP_BAR_FILL_TIME # NOTE: Filling the Exp bar from empty to full takes EXP_BAR_FILL_TIME
# seconds no matter what. Filling half of it takes half as long, etc. # seconds no matter what. Filling half of it takes half as long, etc.
@expIncPerFrame = rangeExp / (EXP_BAR_FILL_TIME * Graphics.frame_rate) @expIncPerFrame = rangeExp/(EXP_BAR_FILL_TIME*Graphics.frame_rate)
@animatingExp = true @animatingExp = true
pbSEPlay("Pkmn exp gain") if @showExp pbSEPlay("Pkmn exp gain") if @showExp
end end
def pbDrawNumber(number, btmp, startX, startY, align = 0) def pbDrawNumber(number,btmp,startX,startY,align=0)
# -1 means draw the / character # -1 means draw the / character
n = (number == -1) ? [10] : number.to_i.digits.reverse n = (number == -1) ? [10] : number.to_i.digits.reverse
charWidth = @numbersBitmap.width / 11 charWidth = @numbersBitmap.width/11
charHeight = @numbersBitmap.height charHeight = @numbersBitmap.height
startX -= charWidth * n.length if align == 1 startX -= charWidth*n.length if align==1
n.each do |i| n.each do |i|
btmp.blt(startX, startY, @numbersBitmap.bitmap, Rect.new(i * charWidth, 0, charWidth, charHeight)) btmp.blt(startX,startY,@numbersBitmap.bitmap,Rect.new(i*charWidth,0,charWidth,charHeight))
startX += charWidth startX += charWidth
end end
end end
@@ -215,55 +215,55 @@ class PokemonDataBox < SpriteWrapper
textPos = [] textPos = []
imagePos = [] imagePos = []
# Draw background panel # Draw background panel
self.bitmap.blt(0, 0, @databoxBitmap.bitmap, Rect.new(0, 0, @databoxBitmap.width, @databoxBitmap.height)) self.bitmap.blt(0,0,@databoxBitmap.bitmap,Rect.new(0,0,@databoxBitmap.width,@databoxBitmap.height))
# Draw Pokémon's name # Draw Pokémon's name
nameWidth = self.bitmap.text_size(@battler.name).width nameWidth = self.bitmap.text_size(@battler.name).width
nameOffset = 0 nameOffset = 0
nameOffset = nameWidth - 116 if nameWidth > 116 nameOffset = nameWidth-116 if nameWidth>116
textPos.push([@battler.name, @spriteBaseX + 8 - nameOffset, 0, false, NAME_BASE_COLOR, NAME_SHADOW_COLOR]) textPos.push([@battler.name,@spriteBaseX+8-nameOffset,0,false,NAME_BASE_COLOR,NAME_SHADOW_COLOR])
# Draw Pokémon's gender symbol # Draw Pokémon's gender symbol
case @battler.displayGender case @battler.displayGender
when 0 # Male when 0 # Male
textPos.push([_INTL(""), @spriteBaseX + 126, 0, false, MALE_BASE_COLOR, MALE_SHADOW_COLOR]) textPos.push([_INTL(""),@spriteBaseX+126,0,false,MALE_BASE_COLOR,MALE_SHADOW_COLOR])
when 1 # Female when 1 # Female
textPos.push([_INTL(""), @spriteBaseX + 126, 0, false, FEMALE_BASE_COLOR, FEMALE_SHADOW_COLOR]) textPos.push([_INTL(""),@spriteBaseX+126,0,false,FEMALE_BASE_COLOR,FEMALE_SHADOW_COLOR])
end end
pbDrawTextPositions(self.bitmap, textPos) pbDrawTextPositions(self.bitmap,textPos)
# Draw Pokémon's level # Draw Pokémon's level
imagePos.push(["Graphics/Pictures/Battle/overlay_lv", @spriteBaseX + 140, 16]) if !$game_switches[SWITCH_NO_LEVELS_MODE] imagePos.push(["Graphics/Pictures/Battle/overlay_lv",@spriteBaseX+140,16]) if !$game_switches[SWITCH_NO_LEVELS_MODE]
pbDrawNumber(@battler.level, self.bitmap, @spriteBaseX + 162, 16) if !$game_switches[SWITCH_NO_LEVELS_MODE] pbDrawNumber(@battler.level,self.bitmap,@spriteBaseX+162,16) if !$game_switches[SWITCH_NO_LEVELS_MODE]
# Draw shiny icon # Draw shiny icon
if @battler.shiny? if @battler.shiny?
shinyX = (@battler.opposes?(0)) ? 206 : -6 # Foe's/player's shinyX = (@battler.opposes?(0)) ? 206 : -6 # Foe's/player's
pokeRadarShiny = !@battler.pokemon.debugShiny? && !@battler.pokemon.naturalShiny? pokeRadarShiny= !@battler.pokemon.debugShiny? && !@battler.pokemon.naturalShiny?
addShinyStarsToGraphicsArray(imagePos, @spriteBaseX + shinyX, 35, @battler.pokemon.bodyShiny?, @battler.pokemon.headShiny?, @battler.pokemon.debugShiny?, pokeRadarShiny) addShinyStarsToGraphicsArray(imagePos,@spriteBaseX+shinyX,35, @battler.pokemon.bodyShiny?,@battler.pokemon.headShiny?,@battler.pokemon.debugShiny?, pokeRadarShiny)
end end
# Draw Mega Evolution/Primal Reversion icon # Draw Mega Evolution/Primal Reversion icon
if @battler.mega? if @battler.mega?
imagePos.push(["Graphics/Pictures/Battle/icon_mega", @spriteBaseX + 8, 34]) imagePos.push(["Graphics/Pictures/Battle/icon_mega",@spriteBaseX+8,34])
elsif @battler.primal? elsif @battler.primal?
primalX = (@battler.opposes?) ? 208 : -28 # Foe's/player's primalX = (@battler.opposes?) ? 208 : -28 # Foe's/player's
if @battler.isSpecies?(:KYOGRE) if @battler.isSpecies?(:KYOGRE)
imagePos.push(["Graphics/Pictures/Battle/icon_primal_Kyogre", @spriteBaseX + primalX, 4]) imagePos.push(["Graphics/Pictures/Battle/icon_primal_Kyogre",@spriteBaseX+primalX,4])
elsif @battler.isSpecies?(:GROUDON) elsif @battler.isSpecies?(:GROUDON)
imagePos.push(["Graphics/Pictures/Battle/icon_primal_Groudon", @spriteBaseX + primalX, 4]) imagePos.push(["Graphics/Pictures/Battle/icon_primal_Groudon",@spriteBaseX+primalX,4])
end end
end end
# Draw owned icon (foe Pokémon only) # Draw owned icon (foe Pokémon only)
if @battler.owned? && @battler.opposes?(0) if @battler.owned? && @battler.opposes?(0)
imagePos.push(["Graphics/Pictures/Battle/icon_own", @spriteBaseX - 8, 42]) imagePos.push(["Graphics/Pictures/Battle/icon_own",@spriteBaseX-8,42])
end end
# Draw status icon # Draw status icon
if @battler.status != :NONE if @battler.status != :NONE
s = GameData::Status.get(@battler.status).id_number s = GameData::Status.get(@battler.status).id_number
if s == :POISON && @battler.statusCount > 0 # Badly poisoned if s == :POISON && @battler.statusCount > 0 # Badly poisoned
s = GameData::Status::DATA.keys.length / 2 s = GameData::Status::DATA.keys.length / 2
end end
imagePos.push(["Graphics/Pictures/Battle/icon_statuses", @spriteBaseX + 24, 56, imagePos.push(["Graphics/Pictures/Battle/icon_statuses",@spriteBaseX+24,56,
0, (s - 1) * STATUS_ICON_HEIGHT, -1, STATUS_ICON_HEIGHT]) 0,(s-1)*STATUS_ICON_HEIGHT,-1,STATUS_ICON_HEIGHT])
end end
pbDrawImagePositions(self.bitmap, imagePos) pbDrawImagePositions(self.bitmap,imagePos)
refreshHP refreshHP
refreshExp refreshExp
end end
@@ -273,24 +273,24 @@ class PokemonDataBox < SpriteWrapper
return if !@battler.pokemon return if !@battler.pokemon
# Show HP numbers # Show HP numbers
if @showHP if @showHP
pbDrawNumber(self.hp, @hpNumbers.bitmap, 54, 2, 1) pbDrawNumber(self.hp,@hpNumbers.bitmap,54,2,1)
pbDrawNumber(-1, @hpNumbers.bitmap, 54, 2) # / char pbDrawNumber(-1,@hpNumbers.bitmap,54,2) # / char
pbDrawNumber(@battler.totalhp, @hpNumbers.bitmap, 70, 2) pbDrawNumber(@battler.totalhp,@hpNumbers.bitmap,70,2)
end end
# Resize HP bar # Resize HP bar
w = 0 w = 0
if self.hp > 0 if self.hp>0
w = @hpBarBitmap.width.to_f * self.hp / @battler.totalhp w = @hpBarBitmap.width.to_f*self.hp/@battler.totalhp
w = 1 if w < 1 w = 1 if w<1
# NOTE: The line below snaps the bar's width to the nearest 2 pixels, to # NOTE: The line below snaps the bar's width to the nearest 2 pixels, to
# fit in with the rest of the graphics which are doubled in size. # fit in with the rest of the graphics which are doubled in size.
w = ((w / 2.0).round) * 2 w = ((w/2.0).round)*2
end end
@hpBar.src_rect.width = w @hpBar.src_rect.width = w
hpColor = 0 # Green bar hpColor = 0 # Green bar
hpColor = 1 if self.hp <= @battler.totalhp / 2 # Yellow bar hpColor = 1 if self.hp<=@battler.totalhp/2 # Yellow bar
hpColor = 2 if self.hp <= @battler.totalhp / 4 # Red bar hpColor = 2 if self.hp<=@battler.totalhp/4 # Red bar
@hpBar.src_rect.y = hpColor * @hpBarBitmap.height / 3 @hpBar.src_rect.y = hpColor*@hpBarBitmap.height/3
end end
def refreshExp def refreshExp
@@ -299,54 +299,54 @@ class PokemonDataBox < SpriteWrapper
w = exp_fraction * @expBarBitmap.width w = exp_fraction * @expBarBitmap.width
# NOTE: The line below snaps the bar's width to the nearest 2 pixels, to # NOTE: The line below snaps the bar's width to the nearest 2 pixels, to
# fit in with the rest of the graphics which are doubled in size. # fit in with the rest of the graphics which are doubled in size.
w = ((w / 2).round) * 2 w = ((w/2).round)*2
@expBar.src_rect.width = w @expBar.src_rect.width = w
end end
def updateHPAnimation def updateHPAnimation
return if !@animatingHP return if !@animatingHP
if @currentHP < @endHP # Gaining HP if @currentHP<@endHP # Gaining HP
@currentHP += @hpIncPerFrame @currentHP += @hpIncPerFrame
@currentHP = @endHP if @currentHP >= @endHP @currentHP = @endHP if @currentHP>=@endHP
elsif @currentHP > @endHP # Losing HP elsif @currentHP>@endHP # Losing HP
@currentHP -= @hpIncPerFrame @currentHP -= @hpIncPerFrame
@currentHP = @endHP if @currentHP <= @endHP @currentHP = @endHP if @currentHP<=@endHP
end end
# Refresh the HP bar/numbers # Refresh the HP bar/numbers
refreshHP refreshHP
@animatingHP = false if @currentHP == @endHP @animatingHP = false if @currentHP==@endHP
end end
def updateExpAnimation def updateExpAnimation
return if !@animatingExp return if !@animatingExp
if !@showExp # Not showing the Exp bar, no need to waste time animating it if !@showExp # Not showing the Exp bar, no need to waste time animating it
@currentExp = @endExp @currentExp = @endExp
@animatingExp = false @animatingExp = false
return return
end end
if @currentExp < @endExp # Gaining Exp if @currentExp<@endExp # Gaining Exp
@currentExp += @expIncPerFrame @currentExp += @expIncPerFrame
@currentExp = @endExp if @currentExp >= @endExp @currentExp = @endExp if @currentExp>=@endExp
elsif @currentExp > @endExp # Losing Exp elsif @currentExp>@endExp # Losing Exp
@currentExp -= @expIncPerFrame @currentExp -= @expIncPerFrame
@currentExp = @endExp if @currentExp <= @endExp @currentExp = @endExp if @currentExp<=@endExp
end end
# Refresh the Exp bar # Refresh the Exp bar
refreshExp refreshExp
return if @currentExp != @endExp # Exp bar still has more to animate return if @currentExp!=@endExp # Exp bar still has more to animate
# Exp bar is completely filled, level up with a flash and sound effect # Exp bar is completely filled, level up with a flash and sound effect
if @currentExp >= @rangeExp if @currentExp>=@rangeExp
if @expFlash == 0 if @expFlash==0
pbSEStop pbSEStop
@expFlash = Graphics.frame_rate / 5 @expFlash = Graphics.frame_rate/5
pbSEPlay("Pkmn exp full") pbSEPlay("Pkmn exp full")
self.flash(Color.new(64, 200, 248, 192), @expFlash) self.flash(Color.new(64,200,248,192),@expFlash)
for i in @sprites for i in @sprites
i[1].flash(Color.new(64, 200, 248, 192), @expFlash) if !i[1].disposed? i[1].flash(Color.new(64,200,248,192),@expFlash) if !i[1].disposed?
end end
else else
@expFlash -= 1 @expFlash -= 1
@animatingExp = false if @expFlash == 0 @animatingExp = false if @expFlash==0
end end
else else
pbSEStop pbSEStop
@@ -355,23 +355,21 @@ class PokemonDataBox < SpriteWrapper
end end
end end
QUARTER_ANIM_PERIOD = Graphics.frame_rate * 3 / 20 QUARTER_ANIM_PERIOD = Graphics.frame_rate*3/20
def updatePositions(frameCounter) def updatePositions(frameCounter)
self.x = @spriteX self.x = @spriteX
self.y = @spriteY self.y = @spriteY
# Data box bobbing while Pokémon is selected # Data box bobbing while Pokémon is selected
if @selected == 1 || @selected == 2 # Choosing commands/targeted or damaged if @selected==1 || @selected==2 # Choosing commands/targeted or damaged
case (frameCounter / QUARTER_ANIM_PERIOD).floor case (frameCounter/QUARTER_ANIM_PERIOD).floor
when 1 then when 1 then self.y = @spriteY-2
self.y = @spriteY - 2 when 3 then self.y = @spriteY+2
when 3 then
self.y = @spriteY + 2
end end
end end
end end
def update(frameCounter = 0) def update(frameCounter=0)
super() super()
# Animate HP bar # Animate HP bar
updateHPAnimation updateHPAnimation
@@ -383,33 +381,36 @@ class PokemonDataBox < SpriteWrapper
end end
end end
#=============================================================================== #===============================================================================
# Splash bar to announce a triggered ability # Splash bar to announce a triggered ability
#=============================================================================== #===============================================================================
class AbilitySplashBar < SpriteWrapper class AbilitySplashBar < SpriteWrapper
attr_reader :battler attr_reader :battler
TEXT_BASE_COLOR = Color.new(0, 0, 0) TEXT_BASE_COLOR = Color.new(0,0,0)
TEXT_SHADOW_COLOR = Color.new(248, 248, 248) TEXT_SHADOW_COLOR = Color.new(248,248,248)
def initialize(side, viewport = nil) def initialize(side,viewport=nil, secondAbility=false)
super(viewport) super(viewport)
@side = side @secondAbility=secondAbility
@side = side
@battler = nil @battler = nil
# Create sprite wrapper that displays background graphic # Create sprite wrapper that displays background graphic
@bgBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/ability_bar")) @bgBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/ability_bar"))
@bgSprite = SpriteWrapper.new(viewport) @bgSprite = SpriteWrapper.new(viewport)
@bgSprite.bitmap = @bgBitmap.bitmap @bgSprite.bitmap = @bgBitmap.bitmap
@bgSprite.src_rect.y = (side == 0) ? 0 : @bgBitmap.height / 2 @bgSprite.src_rect.y = (side==0) ? 0 : @bgBitmap.height/2
@bgSprite.src_rect.height = @bgBitmap.height / 2 @bgSprite.src_rect.height = @bgBitmap.height/2
# Create bitmap that displays the text # Create bitmap that displays the text
@contents = BitmapWrapper.new(@bgBitmap.width, @bgBitmap.height / 2) @contents = BitmapWrapper.new(@bgBitmap.width,@bgBitmap.height/2)
self.bitmap = @contents self.bitmap = @contents
pbSetSystemFont(self.bitmap) pbSetSystemFont(self.bitmap)
# Position the bar # Position the bar
self.x = (side == 0) ? -Graphics.width / 2 : Graphics.width self.x = (side==0) ? -Graphics.width/2 : Graphics.width
self.y = (side == 0) ? 180 : 80 self.y = (side==0) ? 180 : 80
self.z = 120 self.z = 120
self.visible = false self.visible = false
end end
@@ -432,7 +433,7 @@ class AbilitySplashBar < SpriteWrapper
def z=(value) def z=(value)
super super
@bgSprite.z = value - 1 @bgSprite.z = value-1
end end
def opacity=(value) def opacity=(value)
@@ -455,23 +456,23 @@ class AbilitySplashBar < SpriteWrapper
refresh refresh
end end
def secondAbility=(value)
@secondAbility = value
end
def refresh def refresh
self.bitmap.clear self.bitmap.clear
return if !@battler return if !@battler
textPos = [] textPos = []
textX = (@side == 0) ? 10 : self.bitmap.width - 8 textX = (@side==0) ? 10 : self.bitmap.width-8
# Draw Pokémon's name # Draw Pokémon's name
textPos.push([_INTL("{1}'s", @battler.name), textX, -4, @side == 1, textPos.push([_INTL("{1}'s",@battler.name),textX,-4,@side==1,
TEXT_BASE_COLOR, TEXT_SHADOW_COLOR, true]) TEXT_BASE_COLOR,TEXT_SHADOW_COLOR,true]) if !@secondAbility
# Draw Pokémon's ability # Draw Pokémon's ability
text = @battler.abilityName abilityName = @secondAbility ? @battler.ability2Name : @battler.abilityName
if $game_switches[SWITCH_DOUBLE_ABILITIES] #return if abilityName ==""
text = _INTL("{1},{2}", @battler.abilityName, @battler.ability2Name) textPos.push([abilityName,textX,26,@side==1,
end TEXT_BASE_COLOR,TEXT_SHADOW_COLOR,true])
pbDrawTextPositions(self.bitmap,textPos)
textPos.push([text, textX, 26, @side == 1,
TEXT_BASE_COLOR, TEXT_SHADOW_COLOR, true])
pbDrawTextPositions(self.bitmap, textPos)
end end
def update def update
@@ -480,33 +481,35 @@ class AbilitySplashBar < SpriteWrapper
end end
end end
#=============================================================================== #===============================================================================
# Pokémon sprite (used in battle) # Pokémon sprite (used in battle)
#=============================================================================== #===============================================================================
class PokemonBattlerSprite < RPG::Sprite class PokemonBattlerSprite < RPG::Sprite
attr_reader :pkmn attr_reader :pkmn
attr_accessor :index attr_accessor :index
attr_accessor :selected attr_accessor :selected
attr_reader :sideSize attr_reader :sideSize
def initialize(viewport, sideSize, index, battleAnimations) def initialize(viewport,sideSize,index,battleAnimations)
super(viewport) super(viewport)
@pkmn = nil @pkmn = nil
@sideSize = sideSize @sideSize = sideSize
@index = index @index = index
@battleAnimations = battleAnimations @battleAnimations = battleAnimations
# @selected: 0 = not selected, 1 = choosing action bobbing for this Pokémon, # @selected: 0 = not selected, 1 = choosing action bobbing for this Pokémon,
# 2 = flashing when targeted # 2 = flashing when targeted
@selected = 0 @selected = 0
@frame = 0 @frame = 0
@updating = false @updating = false
@spriteX = 0 # Actual x coordinate @spriteX = 0 # Actual x coordinate
@spriteY = 0 # Actual y coordinate @spriteY = 0 # Actual y coordinate
@spriteXExtra = 0 # Offset due to "bobbing" animation @spriteXExtra = 0 # Offset due to "bobbing" animation
@spriteYExtra = 0 # Offset due to "bobbing" animation @spriteYExtra = 0 # Offset due to "bobbing" animation
@_iconBitmap = nil @_iconBitmap = nil
self.visible = false self.visible = false
@back = false @back=false
end end
def dispose def dispose
@@ -516,66 +519,56 @@ class PokemonBattlerSprite < RPG::Sprite
super super
end end
def x def x; return @spriteX; end
return @spriteX; def y; return @spriteY; end
end
def y
return @spriteY;
end
def x=(value) def x=(value)
@spriteX = value @spriteX = value
self.mirror = true if @back self.mirror=true if @back
super(value + @spriteXExtra) super(value+@spriteXExtra)
end end
def y=(value) def y=(value)
@spriteY = value @spriteY = value
self.mirror = true if @back self.mirror=true if @back
super(value + @spriteYExtra) super(value+@spriteYExtra)
end end
def width def width; return (self.bitmap) ? self.bitmap.width : 0; end
return (self.bitmap) ? self.bitmap.width : 0; def height; return (self.bitmap) ? self.bitmap.height : 0; end
end
def height
return (self.bitmap) ? self.bitmap.height : 0;
end
def visible=(value) def visible=(value)
@spriteVisible = value if !@updating # For selection/targeting flashing @spriteVisible = value if !@updating # For selection/targeting flashing
super super
end end
# Set sprite's origin to bottom middle # Set sprite's origin to bottom middle
def pbSetOrigin def pbSetOrigin
return if !@_iconBitmap return if !@_iconBitmap
self.mirror = true if @back self.mirror=true if @back
self.ox = @_iconBitmap.width / 2 self.ox = @_iconBitmap.width/2
self.oy = @_iconBitmap.height self.oy = @_iconBitmap.height
end end
def pbSetPosition def pbSetPosition
return if !@_iconBitmap return if !@_iconBitmap
pbSetOrigin pbSetOrigin
if (@index % 2) == 0 if (@index%2)==0
self.z = 50 + 5 * @index / 2 self.z = 50+5*@index/2
else else
self.z = 50 - 5 * (@index + 1) / 2 self.z = 50-5*(@index+1)/2
end end
# Set original position # Set original position
p = PokeBattle_SceneConstants.pbBattlerPosition(@index, @sideSize) p = PokeBattle_SceneConstants.pbBattlerPosition(@index,@sideSize)
@spriteX = p[0] @spriteX = p[0]
@spriteY = p[1] @spriteY = p[1]
# Apply metrics # Apply metrics
@pkmn.species_data.apply_metrics_to_sprite(self, @index) @pkmn.species_data.apply_metrics_to_sprite(self, @index)
end end
def setPokemonBitmap(pkmn, back = false) def setPokemonBitmap(pkmn,back=false)
@back = back @back = back
self.mirror = true if @back self.mirror=true if @back
@pkmn = pkmn @pkmn = pkmn
@_iconBitmap.dispose if @_iconBitmap @_iconBitmap.dispose if @_iconBitmap
@_iconBitmap = GameData::Species.sprite_bitmap_from_pokemon(@pkmn, back) @_iconBitmap = GameData::Species.sprite_bitmap_from_pokemon(@pkmn, back)
@@ -593,14 +586,14 @@ class PokemonBattlerSprite < RPG::Sprite
# this is just playing the Pokémon's cry, but you can expand on it. The # this is just playing the Pokémon's cry, but you can expand on it. The
# recommendation is to create a PictureEx animation and push it into # recommendation is to create a PictureEx animation and push it into
# the @battleAnimations array. # the @battleAnimations array.
def pbPlayIntroAnimation(pictureEx = nil) def pbPlayIntroAnimation(pictureEx=nil)
@pkmn.play_cry if @pkmn @pkmn.play_cry if @pkmn
end end
QUARTER_ANIM_PERIOD = Graphics.frame_rate * 3 / 20 QUARTER_ANIM_PERIOD = Graphics.frame_rate*3/20
SIXTH_ANIM_PERIOD = Graphics.frame_rate * 2 / 20 SIXTH_ANIM_PERIOD = Graphics.frame_rate*2/20
def update(frameCounter = 0) def update(frameCounter=0)
return if !@_iconBitmap return if !@_iconBitmap
@updating = true @updating = true
# Update bitmap # Update bitmap
@@ -608,43 +601,41 @@ class PokemonBattlerSprite < RPG::Sprite
self.bitmap = @_iconBitmap.bitmap self.bitmap = @_iconBitmap.bitmap
# Pokémon sprite bobbing while Pokémon is selected # Pokémon sprite bobbing while Pokémon is selected
@spriteYExtra = 0 @spriteYExtra = 0
if @selected == 1 # When choosing commands for this Pokémon if @selected==1 # When choosing commands for this Pokémon
case (frameCounter / QUARTER_ANIM_PERIOD).floor case (frameCounter/QUARTER_ANIM_PERIOD).floor
when 1 then when 1 then @spriteYExtra = 2
@spriteYExtra = 2 when 3 then @spriteYExtra = -2
when 3 then
@spriteYExtra = -2
end end
end end
self.x = self.x self.x = self.x
self.y = self.y self.y = self.y
self.visible = @spriteVisible self.visible = @spriteVisible
# Pokémon sprite blinking when targeted # Pokémon sprite blinking when targeted
if @selected == 2 && @spriteVisible if @selected==2 && @spriteVisible
case (frameCounter / SIXTH_ANIM_PERIOD).floor case (frameCounter/SIXTH_ANIM_PERIOD).floor
when 2, 5 then when 2, 5 then self.visible = false
self.visible = false else self.visible = true
else
self.visible = true
end end
end end
@updating = false @updating = false
end end
end end
#=============================================================================== #===============================================================================
# Shadow sprite for Pokémon (used in battle) # Shadow sprite for Pokémon (used in battle)
#=============================================================================== #===============================================================================
class PokemonBattlerShadowSprite < RPG::Sprite class PokemonBattlerShadowSprite < RPG::Sprite
attr_reader :pkmn attr_reader :pkmn
attr_accessor :index attr_accessor :index
attr_accessor :selected attr_accessor :selected
def initialize(viewport, sideSize, index) def initialize(viewport,sideSize,index)
super(viewport) super(viewport)
@pkmn = nil @pkmn = nil
@sideSize = sideSize @sideSize = sideSize
@index = index @index = index
@_iconBitmap = nil @_iconBitmap = nil
self.visible = false self.visible = false
end end
@@ -656,19 +647,14 @@ class PokemonBattlerShadowSprite < RPG::Sprite
super super
end end
def width def width; return (self.bitmap) ? self.bitmap.width : 0; end
return (self.bitmap) ? self.bitmap.width : 0; def height; return (self.bitmap) ? self.bitmap.height : 0; end
end
def height
return (self.bitmap) ? self.bitmap.height : 0;
end
# Set sprite's origin to centre # Set sprite's origin to centre
def pbSetOrigin def pbSetOrigin
return if !@_iconBitmap return if !@_iconBitmap
self.ox = @_iconBitmap.width / 2 self.ox = @_iconBitmap.width/2
self.oy = @_iconBitmap.height / 2 self.oy = @_iconBitmap.height/2
end end
def pbSetPosition def pbSetPosition
@@ -676,7 +662,7 @@ class PokemonBattlerShadowSprite < RPG::Sprite
pbSetOrigin pbSetOrigin
self.z = 3 self.z = 3
# Set original position # Set original position
p = PokeBattle_SceneConstants.pbBattlerPosition(@index, @sideSize) p = PokeBattle_SceneConstants.pbBattlerPosition(@index,@sideSize)
self.x = p[0] self.x = p[0]
self.y = p[1] self.y = p[1]
# Apply metrics # Apply metrics
@@ -691,7 +677,7 @@ class PokemonBattlerShadowSprite < RPG::Sprite
pbSetPosition pbSetPosition
end end
def update(frameCounter = 0) def update(frameCounter=0)
return if !@_iconBitmap return if !@_iconBitmap
# Update bitmap # Update bitmap
@_iconBitmap.update @_iconBitmap.update
@@ -61,6 +61,8 @@ class PokeBattle_Scene
# Ability splash bars # Ability splash bars
if PokeBattle_SceneConstants::USE_ABILITY_SPLASH if PokeBattle_SceneConstants::USE_ABILITY_SPLASH
@sprites["abilityBar_#{side}"] = AbilitySplashBar.new(side,@viewport) @sprites["abilityBar_#{side}"] = AbilitySplashBar.new(side,@viewport)
@sprites["ability2Bar_#{side}"] = AbilitySplashBar.new(side,@viewport,true) if $game_switches[SWITCH_DOUBLE_ABILITIES]
@sprites["ability2Bar_#{side}"].y = @sprites["ability2Bar_#{side}"].y+30
end end
end end
# Player's and partner trainer's back sprite # Player's and partner trainer's back sprite
@@ -173,7 +173,7 @@ class PokeBattle_Scene
#============================================================================= #=============================================================================
# Ability splash bar animations # Ability splash bar animations
#============================================================================= #=============================================================================
def pbShowAbilitySplash(battler,ability_name=nil) def pbShowAbilitySplash(battler)
return if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH return if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH
side = battler.index%2 side = battler.index%2
pbHideAbilitySplash(battler) if @sprites["abilityBar_#{side}"].visible pbHideAbilitySplash(battler) if @sprites["abilityBar_#{side}"].visible
@@ -188,6 +188,7 @@ class PokeBattle_Scene
end end
def pbHideAbilitySplash(battler) def pbHideAbilitySplash(battler)
return if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH return if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH
side = battler.index%2 side = battler.index%2
Binary file not shown.