Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TRAINERSPRITESCALE = 2
- # used to scale the Pokemon bitmaps to 200%
- POKEMONSPRITESCALE = 2
- # used to scale the backsprite for battle perspective (200%)
- BACKSPRITESCALE = 2
- class DynamicPokemonSprite
- attr_accessor :shadow
- attr_accessor :sprite
- attr_accessor :showshadow
- attr_accessor :status
- attr_accessor :hidden
- attr_accessor :fainted
- attr_accessor :anim
- attr_accessor :charged
- attr_accessor :isShadow
- attr_reader :loaded
- attr_reader :selected
- attr_reader :isSub
- attr_reader :viewport
- attr_reader :pulse
- def initialize(doublebattle,index,viewport=nil)
- @viewport=viewport
- @metrics=load_data("Data/metrics.dat")
- @selected=0
- @frame=0
- @frame2=0
- @frame3=0
- @status=0
- @loaded=false
- @charged=false
- @index=index
- @doublebattle=doublebattle
- @showshadow=true
- @altitude=0
- @yposition=0
- @shadow=Sprite.new(@viewport)
- @sprite=Sprite.new(@viewport)
- back=(@index%2==0)
- @substitute=AnimatedBitmapWrapper.new("Graphics/Battlers/"+(back ? "substitute_back" : "substitute"),POKEMONSPRITESCALE)
- @overlay=Sprite.new(@viewport)
- @isSub=false
- @lock=false
- @pokemon=nil
- @still=false
- @hidden=false
- @fainted=false
- @anim=false
- @isShadow=false
- @fp = {}
- for i in 0...16
- @fp["#{i}"] = Sprite.new(@viewport)
- @fp["#{i}"].bitmap = pbBitmap("Graphics/Animations/ebShadow")
- @fp["#{i}"].ox = @fp["#{i}"].bitmap.width/4
- @fp["#{i}"].oy = @fp["#{i}"].bitmap.height/2
- @fp["#{i}"].src_rect.set(0,0,@fp["#{i}"].bitmap.width/2,@fp["#{i}"].bitmap.height)
- @fp["#{i}"].opacity = 0
- end
- for i in 0...16
- @fp["c#{i}"] = Sprite.new(@viewport)
- @fp["c#{i}"].bitmap = pbBitmap("Graphics/Animations/ebCharged")
- @fp["c#{i}"].ox = @fp["c#{i}"].bitmap.width/8
- @fp["c#{i}"].oy = @fp["c#{i}"].bitmap.height
- @fp["c#{i}"].src_rect.set(0,0,@fp["c#{i}"].bitmap.width/4,@fp["c#{i}"].bitmap.height)
- @fp["c#{i}"].opacity = 0
- end
- for j in 0...4
- @fp["r#{j}"] = Sprite.new(viewport)
- @fp["r#{j}"].bitmap = pbBitmap("Graphics/Animations/ebRipple")
- @fp["r#{j}"].ox = @fp["r#{j}"].bitmap.width/2
- @fp["r#{j}"].oy = @fp["r#{j}"].bitmap.height/2
- @fp["r#{j}"].zoom_x = 0
- @fp["r#{j}"].zoom_y = 0
- @fp["r#{j}"].param = 0
- end
- @pulse = 8
- @k = 1
- end
- def battleIndex; return @index; end
- def x; @sprite.x; end
- def y; @sprite.y; end
- def z; @sprite.z; end
- def ox; @sprite.ox; end
- def oy; @sprite.oy; end
- def zoom_x; @sprite.zoom_x; end
- def zoom_y; @sprite.zoom_y; end
- def visible; @sprite.visible; end
- def opacity; @sprite.opacity; end
- def width; @bitmap.width; end
- def height; @bitmap.height; end
- def tone; @sprite.tone; end
- def bitmap; @bitmap.bitmap; end
- def actualBitmap; @bitmap; end
- def disposed?; @sprite.disposed?; end
- def color; @sprite.color; end
- def src_rect; @sprite.src_rect; end
- def blend_type; @sprite.blend_type; end
- def angle; @sprite.angle; end
- def mirror; @sprite.mirror; end
- def src_rect; return @sprite.src_rect; end
- def src_rect=(val)
- @sprite.src_rect=val
- end
- def lock
- @lock=true
- end
- def bitmap=(val)
- @bitmap.bitmap=val
- end
- def x=(val)
- @sprite.x=val
- @shadow.x=val
- end
- def ox=(val)
- @sprite.ox=val
- self.formatShadow
- end
- def addOx(val)
- @sprite.ox+=val
- self.formatShadow
- end
- def oy=(val)
- @sprite.oy=val
- self.formatShadow
- end
- def addOy(val)
- @sprite.oy+=val
- self.formatShadow
- end
- def y=(val)
- @sprite.y=val
- @shadow.y=val
- end
- def z=(val)
- @shadow.z=(val==32) ? 31 : 10
- @sprite.z=val
- end
- def zoom_x=(val)
- @sprite.zoom_x=val
- self.formatShadow
- end
- def zoom_y=(val)
- @sprite.zoom_y=val
- self.formatShadow
- end
- def visible=(val)
- return if @hidden
- @sprite.visible=val
- if @fp
- for key in @fp.keys
- @fp[key].visible=val
- end
- end
- self.formatShadow
- end
- def opacity=(val)
- @sprite.opacity=val
- self.formatShadow
- end
- def tone=(val)
- @sprite.tone=val
- end
- def color=(val)
- @sprite.color=val
- if @fp
- for key in @fp.keys
- @fp[key].color=val
- end
- end
- end
- def blend_type=(val)
- @sprite.blend_type=val
- self.formatShadow
- end
- def angle=(val)
- @sprite.angle=(val)
- self.formatShadow
- end
- def mirror=(val)
- @sprite.mirror=(val)
- self.formatShadow
- end
- def dispose
- @sprite.dispose
- @shadow.dispose
- pbDisposeSpriteHash(@fp)
- end
- def selected=(val)
- @selected=val
- @sprite.visible=true if !@hidden
- end
- def toneAll(val)
- @sprite.tone.red+=val
- @sprite.tone.green+=val
- @sprite.tone.blue+=val
- end
- def setBitmap(file,shadow=false)
- self.resetParticles
- @showshadow = shadow
- @bitmap = AnimatedBitmapWrapper.new(file)
- @sprite.bitmap = @bitmap.bitmap.clone
- @shadow.bitmap = @bitmap.bitmap.clone
- @loaded = true
- self.formatShadow
- end
- def setPokemonBitmap(pokemon,back=false,species=nil)
- self.resetParticles
- return if !pokemon || pokemon.nil?
- @pokemon = pokemon
- @isShadow = true if @pokemon.isShadow?
- @altitude = @metrics[2][pokemon.species]
- if back
- @yposition = @metrics[0][pokemon.species]
- @altitude *= 0.5
- else
- @yposition = @metrics[1][pokemon.species]
- end
- scale = back ? BACKSPRITESCALE : POKEMONSPRITESCALE
- if !species.nil?
- @bitmap = pbLoadPokemonBitmapSpecies(pokemon,species,back,scale)
- else
- @bitmap = pbLoadPokemonBitmap(pokemon,back,scale)
- end
- @sprite.bitmap = @bitmap.bitmap.clone
- @shadow.bitmap = @bitmap.bitmap.clone
- @sprite.ox = @bitmap.width/2
- @sprite.oy = @bitmap.height
- @sprite.oy += @altitude
- @sprite.oy -= @yposition
- @sprite.oy -= pokemon.formOffsetY if pokemon.respond_to?(:formOffsetY)
- @fainted = false
- @loaded = true
- @hidden = false
- self.visible = true
- @pulse = 8
- @k = 1
- self.formatShadow
- end
- def resetParticles
- if @fp
- for key in @fp.keys
- @fp[key].visible = false
- end
- end
- @isShadow = false
- @charged = false
- end
- def refreshMetrics(metrics)
- @metrics = metrics
- @altitude = @metrics[2][@pokemon.species]
- if (@index%2==0)
- @yposition = @metrics[0][@pokemon.species]
- @altitude *= 0.5
- else
- @yposition = @metrics[1][@pokemon.species]
- end
- @sprite.ox = @bitmap.width/2
- @sprite.oy = @bitmap.height
- @sprite.oy += @altitude
- @sprite.oy -= @yposition
- @sprite.oy -= @pokemon.formOffsetY if @pokemon.respond_to?(:formOffsetY)
- end
- def setSubstitute
- @isSub = true
- @sprite.bitmap = @substitute.bitmap.clone
- @shadow.bitmap = @substitute.bitmap.clone
- @sprite.ox = @substitute.width/2
- @sprite.oy = @substitute.height
- self.formatShadow
- end
- def removeSubstitute
- @isSub = false
- @sprite.bitmap = @bitmap.bitmap.clone
- @shadow.bitmap = @bitmap.bitmap.clone
- @sprite.ox = @bitmap.width/2
- @sprite.oy = @bitmap.height
- @sprite.oy += @altitude
- @sprite.oy -= @yposition
- @sprite.oy -= @pokemon.formOffsetY if @pokemon && @pokemon.respond_to?(:formOffsetY)
- self.formatShadow
- end
- def still
- @still = true
- end
- def clear
- @sprite.bitmap.clear
- @bitmap.dispose
- end
- def formatShadow
- @shadow.zoom_x = @sprite.zoom_x*0.90
- @shadow.zoom_y = @sprite.zoom_y*0.30
- @shadow.ox = @sprite.ox - 6
- @shadow.oy = @sprite.oy - 6
- @shadow.opacity = @sprite.opacity*0.3
- @shadow.tone = Tone.new(-255,-255,-255,255)
- @shadow.visible = @sprite.visible
- @shadow.mirror = @sprite.mirror
- @shadow.angle = @sprite.angle
- @shadow.visible = false if !@showshadow
- end
- def update(angle=74)
- if @still
- @still = false
- return
- end
- return if @lock
- return if !@bitmap || @bitmap.disposed?
- if @isSub
- @substitute.update
- @sprite.bitmap=@substitute.bitmap.clone
- @shadow.bitmap=@substitute.bitmap.clone
- else
- @bitmap.update
- @sprite.bitmap=@bitmap.bitmap.clone
- @shadow.bitmap=@bitmap.bitmap.clone
- end
- @shadow.skew(angle)
- if !@anim && !@pulse.nil?
- @pulse += @k
- @k *= -1 if @pulse == 128 || @pulse == 8
- case @status
- when 0
- @sprite.color = Color.new(0,0,0,0)
- when 1 #PSN
- @sprite.color = Color.new(109,55,130,@pulse)
- when 2 #PAR
- @sprite.color = Color.new(204,152,44,@pulse)
- when 3 #FRZ
- @sprite.color = Color.new(56,160,193,@pulse)
- when 4 #BRN
- @sprite.color = Color.new(206,73,43,@pulse)
- end
- end
- @anim = false
- # PokΓ©mon sprite blinking when targeted or damaged
- @frame += 1
- @frame = 0 if @frame > 256
- if @selected==2 # When targeted or damaged
- @sprite.visible = (@frame%10<7) && !@hidden
- end
- self.formatShadow
- end
- def shadowUpdate
- return if !@loaded
- return if self.disposed? || @bitmap.disposed?
- for i in 0...16
- next if i > @frame2/4
- @fp["#{i}"].visible = @showshadow
- @fp["#{i}"].visible = false if @hidden
- @fp["#{i}"].visible = false if !@isShadow
- next if !@isShadow
- if @fp["#{i}"].opacity <= 0
- @fp["#{i}"].toggle = 2
- z = [0.5,0.6,0.7,0.8,0.9,1.0][rand(6)]
- @fp["#{i}"].param = z
- @fp["#{i}"].x = self.x - self.bitmap.width*self.zoom_x/2 + rand(self.bitmap.width)*self.zoom_x
- @fp["#{i}"].y = self.y - 64*self.zoom_y + rand(64)*self.zoom_y
- @fp["#{i}"].z = (rand(2)==0) ? self.z - 1 : self.z + 1
- @fp["#{i}"].speed = (rand(2)==0) ? +1 : -1
- @fp["#{i}"].src_rect.x = rand(2)*@fp["#{i}"].bitmap.width/2
- end
- @fp["#{i}"].zoom_x = @fp["#{i}"].param*self.zoom_x
- @fp["#{i}"].zoom_y = @fp["#{i}"].param*self.zoom_y
- @fp["#{i}"].param -= 0.01
- @fp["#{i}"].y -= 1
- @fp["#{i}"].opacity += 8*@fp["#{i}"].toggle
- @fp["#{i}"].toggle = -1 if @fp["#{i}"].opacity >= 255
- end
- @frame2 += 1 if @frame2 < 128
- end
- def chargedUpdate
- return if !@loaded
- return if self.disposed? || @bitmap.disposed?
- for i in 0...16
- next if i > @frame3/16
- @fp["c#{i}"].visible = @showshadow
- @fp["c#{i}"].visible = false if @hidden
- @fp["c#{i}"].visible = false if !@charged
- next if !@charged
- if @fp["c#{i}"].opacity <= 0
- x = @sprite.x - @sprite.ox + rand(@sprite.bitmap.width)
- y = @sprite.y - @sprite.oy*0.7 + rand(@sprite.bitmap.height*0.8)
- @fp["c#{i}"].x = x
- @fp["c#{i}"].y = y
- @fp["c#{i}"].z = (rand(2)==0) ? self.z - 1 : self.z + 1
- @fp["c#{i}"].src_rect.x = rand(4)*@fp["c#{i}"].bitmap.width/4
- @fp["c#{i}"].zoom_y = 0.6
- @fp["c#{i}"].opacity = 166 + rand(90)
- @fp["c#{i}"].mirror = (x < @sprite.x) ? false : true
- end
- @fp["c#{i}"].zoom_y += 0.1
- @fp["c#{i}"].opacity -= 16
- end
- for j in 0...4
- next if j > @frame3/32
- @fp["r#{j}"].visible = @showshadow
- @fp["r#{j}"].visible = false if @hidden
- @fp["r#{j}"].visible = false if !@charged
- if @fp["r#{j}"].opacity <= 0
- @fp["r#{j}"].opacity = 255
- @fp["r#{j}"].zoom_x = 0
- @fp["r#{j}"].zoom_y = 0
- @fp["r#{j}"].param = 0
- end
- @fp["r#{j}"].param += 0.01
- @fp["r#{j}"].zoom_x = @fp["r#{j}"].param*self.zoom_x
- @fp["r#{j}"].zoom_y = @fp["r#{j}"].param*self.zoom_x
- @fp["r#{j}"].x = self.x
- @fp["r#{j}"].y = self.y
- @fp["r#{j}"].opacity -= 2
- end
- @frame3 += 1 if @frame3 < 256
- end
- end
- class AnimatedBitmapWrapper
- attr_reader :width
- attr_reader :height
- attr_reader :totalFrames
- attr_reader :animationFrames
- attr_reader :currentIndex
- attr_accessor :scale
- def initialize(file,scale=2)
- raise "filename is nil" if file==nil
- raise ".gif files are not supported!" if File.extname(file)==".gif"
- @scale = scale
- @width = 0
- @height = 0
- @frame = 0
- @frames = 2
- @direction = +1
- @animationFinish = false
- @totalFrames = 0
- @currentIndex = 0
- @speed = 1
- # 0 - not moving at all
- # 1 - normal speed
- # 2 - medium speed
- # 3 - slow speed
- bmp = BitmapCache.load_bitmap(file)
- #bmp = Bitmap.new(file)
- @bitmapFile=Bitmap.new(bmp.width,bmp.height); @bitmapFile.blt(0,0,bmp,Rect.new(0,0,bmp.width,bmp.height))
- # initializes full Pokemon bitmap
- @bitmap=Bitmap.new(@bitmapFile.width,@bitmapFile.height)
- @bitmap.blt(0,0,@bitmapFile,Rect.new(0,0,@bitmapFile.width,@bitmapFile.height))
- @width=@bitmapFile.height*@scale
- @height=@bitmap.height*@scale
- @totalFrames=@bitmap.width/@bitmap.height
- @animationFrames=@totalFrames*@frames
- # calculates total number of frames
- @loop_points=[0,@totalFrames]
- # first value is start, second is end
- @actualBitmap=Bitmap.new(@width,@height)
- @actualBitmap.clear
- @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
- end
- alias initialize_elite initialize unless self.method_defined?(:initialize_elite)
- def length; @totalFrames; end
- def disposed?; @actualBitmap.disposed?; end
- def dispose; @actualBitmap.dispose; end
- def copy; @actualBitmap.clone; end
- def bitmap; @actualBitmap; end
- def bitmap=(val); @actualBitmap=val; end
- def each; end
- def alterBitmap(index); return @strip[index]; end
- def prepareStrip
- @strip=[]
- for i in 0...@totalFrames
- bitmap=Bitmap.new(@width,@height)
- bitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmapFile,Rect.new((@width/@scale)*i,0,@width/@scale,@height/@scale))
- @strip.push(bitmap)
- end
- end
- def compileStrip
- @bitmap.clear
- for i in 0...@strip.length
- @bitmap.stretch_blt(Rect.new((@width/@scale)*i,0,@width/@scale,@height/@scale),@strip[i],Rect.new(0,0,@width,@height))
- end
- end
- def reverse
- if @direction > 0
- @direction=-1
- elsif @direction < 0
- @direction=+1
- end
- end
- def setLoop(start, finish)
- @loop_points=[start,finish]
- end
- def setSpeed(value)
- @speed=value
- end
- def toFrame(frame)
- if frame.is_a?(String)
- if frame=="last"
- frame=@totalFrames-1
- else
- frame=0
- end
- end
- frame=@totalFrames if frame > @totalFrames
- frame=0 if frame < 0
- @currentIndex=frame
- @actualBitmap.clear
- @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
- end
- def play
- return if @currentIndex >= @loop_points[1]-1
- self.update
- end
- def finished?
- return (@currentIndex==@totalFrames-1)
- end
- def update
- return false if @actualBitmap.disposed?
- return false if @speed < 1
- case @speed
- # frame skip
- when 1
- @frames=2
- when 2
- @frames=4
- when 3
- @frames=5
- end
- @frame+=1
- if @frame >= @frames
- # processes animation speed
- @currentIndex+=@direction
- @currentIndex=@loop_points[0] if @currentIndex >=@loop_points[1]
- @currentIndex=@loop_points[1]-1 if @currentIndex < @loop_points[0]
- @frame=0
- end
- @actualBitmap.clear
- @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
- # updates the actual bitmap
- end
- alias update_elite update unless self.method_defined?(:update_elite)
- # returns bitmap to original state
- def deanimate
- @frame=0
- @currentIndex=0
- @actualBitmap.clear
- @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
- end
- end
- #===============================================================================
- # New Sprite class to utilize the animated bitmap wrappers
- #===============================================================================
- class BitmapWrapperSprite < Sprite
- def setBitmap(file,scale=POKEMONSPRITESCALE)
- @animatedBitmap = AnimatedBitmapWrapper.new(file,scale)
- self.bitmap = @animatedBitmap.bitmap.clone
- end
- def setSpeciesBitmap(species,female=false,form=0,shiny=false,shadow=false,back=false,egg=false)
- if species > 0
- pokemon = PokeBattle_Pokemon.new(species,5)
- @animatedBitmap = pbLoadPokemonBitmapSpecies(pokemon, species, back)
- else
- @animatedBitmap = AnimatedBitmapWrapper.new("Graphics/Battlers/000")
- end
- self.bitmap = @animatedBitmap.bitmap.clone
- end
- def play
- @animatedBitmap.play
- self.bitmap = @animatedBitmap.bitmap.clone
- end
- def finished?; return @animatedBitmap.finished?; end
- def animatedBitmap; return @animatedBitmap; end
- alias update_wrapper update unless self.method_defined?(:update_wrapper)
- def update
- update_wrapper
- return if @animatedBitmap.nil?
- @animatedBitmap.update
- self.bitmap = @animatedBitmap.bitmap.clone
- end
- end
- class AnimatedSpriteWrapper < BitmapWrapperSprite; end
- #===============================================================================
- # Aliases old PokemonBitmap generating functions and creates new ones,
- # utilizing the new BitmapWrapper
- #===============================================================================
- alias pbLoadPokemonBitmap_ebs pbLoadPokemonBitmap unless defined?(:pbLoadPokemonBitmap_ebs)
- def pbLoadPokemonBitmap(pokemon, back=false,scale=POKEMONSPRITESCALE)
- return pbLoadPokemonBitmapSpecies(pokemon,pokemon.species,back,scale)
- end
- # Note: Returns an AnimatedBitmap, not a Bitmap
- alias pbLoadPokemonBitmapSpecies_ebs pbLoadPokemonBitmapSpecies unless defined?(:pbLoadPokemonBitmapSpecies_ebs)
- def pbLoadPokemonBitmapSpecies(pokemon, species, back=false, scale=POKEMONSPRITESCALE)
- ret=nil
- pokemon = pokemon.pokemon if pokemon.respond_to?(:pokemon)
- if pokemon.isEgg?
- bitmapFileName=sprintf("Graphics/Battlers/Eggs/%s",getConstantName(PBSpecies,species)) rescue nil
- if !pbResolveBitmap(bitmapFileName)
- bitmapFileName=sprintf("Graphics/Battlers/Eggs/%03d",species)
- if !pbResolveBitmap(bitmapFileName)
- bitmapFileName=sprintf("Graphics/Battlers/Eggs/000")
- end
- end
- bitmapFileName=pbResolveBitmap(bitmapFileName)
- else
- bitmapFileName=pbCheckPokemonBitmapFiles([species,back,
- (pokemon.isFemale?),
- pokemon.isShiny?,
- (pokemon.form rescue 0),
- (pokemon.isShadow? rescue false)])
- end
- raise missingPokeSpriteError(pokemon,back) if bitmapFileName.nil?
- animatedBitmap=AnimatedBitmapWrapper.new(bitmapFileName,scale) if bitmapFileName
- ret=animatedBitmap if bitmapFileName
- # Full compatibility with the alterBitmap methods is maintained
- # but unless the alterBitmap method gets rewritten and sprite animations get
- # hardcoded in the system, the bitmap alterations will not function properly
- # as they will not account for the sprite animation itself
- # alterBitmap methods for static sprites will work just fine
- alterBitmap=(MultipleForms.getFunction(species,"alterBitmap") rescue nil) if !pokemon.isEgg? && animatedBitmap && animatedBitmap.totalFrames==1 # remove this totalFrames clause to allow for dynamic sprites too
- if bitmapFileName && alterBitmap
- animatedBitmap.prepareStrip
- for i in 0...animatedBitmap.totalFrames
- alterBitmap.call(pokemon,animatedBitmap.alterBitmap(i))
- end
- animatedBitmap.compileStrip
- ret=animatedBitmap
- end
- return ret
- end
- # Note: Returns an AnimatedBitmap, not a Bitmap
- def pbLoadSpeciesBitmap(species,female=false,form=0,shiny=false,shadow=false,back=false,egg=false,scale=POKEMONSPRITESCALE)
- ret = nil
- if egg
- bitmapFileName=sprintf("Graphics/Battlers/Eggs/%s",getConstantName(PBSpecies,species)) rescue nil
- if !pbResolveBitmap(bitmapFileName)
- bitmapFileName=sprintf("Graphics/Battlers/Eggs/%03d",species)
- if !pbResolveBitmap(bitmapFileName)
- bitmapFileName=sprintf("Graphics/Battlers/Eggs/000")
- end
- end
- bitmapFileName=pbResolveBitmap(bitmapFileName)
- else
- bitmapFileName = pbCheckPokemonBitmapFiles([species,back,female,shiny,form,shadow])
- end
- if bitmapFileName
- ret = AnimatedBitmapWrapper.new(bitmapFileName,scale)
- end
- return ret
- end
- # returns error message upon missing sprites
- def missingPokeSpriteError(pokemon,back)
- error_b = back ? "Back" : "Front"
- error_b += "Shiny" if pokemon.isShiny?
- error_b += "/Female/" if pokemon.isFemale?
- error_b += " shadow" if pokemon.isShadow?
- error_b += " form #{pokemon.form} " if pokemon.form > 0
- return "Woops, looks like you're missing the #{error_b} sprite for #{PBSpecies.getName(pokemon.species)}!"
- end
- # new methods of handing Pokemon sprite name references
- def pbCheckPokemonBitmapFiles(params)
- species = params[0]
- back = params[1]
- factors = []
- factors.push([5,params[5],false]) if params[5] && params[5]!=false # shadow
- factors.push([2,params[2],false]) if params[2] && params[2]!=false # gender
- factors.push([3,params[3],false]) if params[3] && params[3]!=false # shiny
- factors.push([4,params[4].to_s,""]) if params[4] && params[4].to_s!="" && params[4].to_s!="0" # form
- tshadow = false
- tgender = false
- tshiny = false
- tform = ""
- for i in 0...2**factors.length
- for j in 0...factors.length
- case factors[j][0]
- when 2 # gender
- tgender = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
- when 3 # shiny
- tshiny = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
- when 4 # form
- tform = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
- when 5 # shadow
- tshadow = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
- end
- end
- folder = "Graphics/Battlers/"
- if tshiny && back
- folder += "BackShiny/"
- elsif tshiny
- folder += "FrontShiny/"
- elsif back
- folder += "Back/"
- else
- folder += "Front/"
- end
- folder += "Female/" if tgender
- bitmapFileName = sprintf("#{folder}%s%s%s",getConstantName(PBSpecies,species),(tform!="" ? "_"+tform : ""),tshadow ? "_shadow" : "") rescue nil
- ret = pbResolveBitmap(bitmapFileName)
- return ret if ret
- bitmapFileName = sprintf("#{folder}%03d%s%s",species,(tform!="" ? "_"+tform : ""),tshadow ? "_shadow" : "")
- ret = pbResolveBitmap(bitmapFileName)
- return ret if ret
- end
- return nil
- end
- def pbPokemonBitmapFile(species, shiny, back=false)
- folder = "Graphics/Battlers/"
- if shiny && back
- folder += "BackShiny/"
- elsif shiny
- folder += "FrontShiny/"
- elsif back
- folder += "Back/"
- else
- folder += "Front/"
- end
- name = sprintf("#{folder}%s",getConstantName(PBSpecies,species)) rescue nil
- ret = pbResolveBitmap(name)
- return ret if ret
- name = sprintf("#{folder}%03d",species)
- return pbResolveBitmap(name)
- end
Add Comment
Please, Sign In to add comment