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.

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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.