mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-01-21 13:45:59 +00:00
fusion icons
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
# Pokémon sprite (used out of battle)
|
||||
#===============================================================================
|
||||
class PokemonSprite < SpriteWrapper
|
||||
def initialize(viewport=nil)
|
||||
def initialize(viewport = nil)
|
||||
super(viewport)
|
||||
@_iconbitmap = nil
|
||||
end
|
||||
@@ -20,7 +20,7 @@ class PokemonSprite < SpriteWrapper
|
||||
self.bitmap = nil
|
||||
end
|
||||
|
||||
def setOffset(offset=PictureOrigin::Center)
|
||||
def setOffset(offset = PictureOrigin::Center)
|
||||
@offset = offset
|
||||
changeOrigin
|
||||
end
|
||||
@@ -32,7 +32,7 @@ class PokemonSprite < SpriteWrapper
|
||||
when PictureOrigin::TopLeft, PictureOrigin::Left, PictureOrigin::BottomLeft
|
||||
self.ox = 0
|
||||
when PictureOrigin::Top, PictureOrigin::Center, PictureOrigin::Bottom
|
||||
self.ox = self.bitmap.width/2
|
||||
self.ox = self.bitmap.width / 2
|
||||
when PictureOrigin::TopRight, PictureOrigin::Right, PictureOrigin::BottomRight
|
||||
self.ox = self.bitmap.width
|
||||
end
|
||||
@@ -40,29 +40,29 @@ class PokemonSprite < SpriteWrapper
|
||||
when PictureOrigin::TopLeft, PictureOrigin::Top, PictureOrigin::TopRight
|
||||
self.oy = 0
|
||||
when PictureOrigin::Left, PictureOrigin::Center, PictureOrigin::Right
|
||||
self.oy = self.bitmap.height/2
|
||||
self.oy = self.bitmap.height / 2
|
||||
when PictureOrigin::BottomLeft, PictureOrigin::Bottom, PictureOrigin::BottomRight
|
||||
self.oy = self.bitmap.height
|
||||
end
|
||||
end
|
||||
|
||||
def setPokemonBitmap(pokemon,back=false)
|
||||
def setPokemonBitmap(pokemon, back = false)
|
||||
@_iconbitmap.dispose if @_iconbitmap
|
||||
@_iconbitmap = (pokemon) ? GameData::Species.sprite_bitmap_from_pokemon(pokemon, back) : nil
|
||||
self.bitmap = (@_iconbitmap) ? @_iconbitmap.bitmap : nil
|
||||
self.color = Color.new(0,0,0,0)
|
||||
self.color = Color.new(0, 0, 0, 0)
|
||||
changeOrigin
|
||||
end
|
||||
|
||||
def setPokemonBitmapFromId(id,back=false)
|
||||
def setPokemonBitmapFromId(id, back = false)
|
||||
@_iconbitmap.dispose if @_iconbitmap
|
||||
@_iconbitmap = GameData::Species.sprite_bitmap_from_pokemon_id(id, back)
|
||||
@_iconbitmap = GameData::Species.sprite_bitmap_from_pokemon_id(id, back)
|
||||
self.bitmap = (@_iconbitmap) ? @_iconbitmap.bitmap : nil
|
||||
self.color = Color.new(0,0,0,0)
|
||||
self.color = Color.new(0, 0, 0, 0)
|
||||
changeOrigin
|
||||
end
|
||||
|
||||
def setPokemonBitmapSpecies(pokemon,species,back=false)
|
||||
def setPokemonBitmapSpecies(pokemon, species, back = false)
|
||||
@_iconbitmap.dispose if @_iconbitmap
|
||||
@_iconbitmap = (pokemon) ? GameData::Species.sprite_bitmap_from_pokemon(pokemon, back, species) : nil
|
||||
self.bitmap = (@_iconbitmap) ? @_iconbitmap.bitmap : nil
|
||||
@@ -85,28 +85,26 @@ class PokemonSprite < SpriteWrapper
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# Pokémon icon (for defined Pokémon)
|
||||
#===============================================================================
|
||||
class PokemonIconSprite < SpriteWrapper
|
||||
attr_accessor :selected
|
||||
attr_accessor :active
|
||||
attr_reader :pokemon
|
||||
attr_reader :pokemon
|
||||
|
||||
def initialize(pokemon,viewport=nil)
|
||||
def initialize(pokemon, viewport = nil)
|
||||
super(viewport)
|
||||
@selected = false
|
||||
@active = false
|
||||
@numFrames = 0
|
||||
@selected = false
|
||||
@active = false
|
||||
@numFrames = 0
|
||||
@currentFrame = 0
|
||||
@counter = 0
|
||||
self.pokemon = pokemon
|
||||
@logical_x = 0 # Actual x coordinate
|
||||
@logical_y = 0 # Actual y coordinate
|
||||
@adjusted_x = 0 # Offset due to "jumping" animation in party screen
|
||||
@adjusted_y = 0 # Offset due to "jumping" animation in party screen
|
||||
@counter = 0
|
||||
self.pokemon = pokemon
|
||||
@logical_x = 0 # Actual x coordinate
|
||||
@logical_y = 0 # Actual y coordinate
|
||||
@adjusted_x = 0 # Offset due to "jumping" animation in party screen
|
||||
@adjusted_y = 0 # Offset due to "jumping" animation in party screen
|
||||
end
|
||||
|
||||
def dispose
|
||||
@@ -114,17 +112,22 @@ class PokemonIconSprite < SpriteWrapper
|
||||
super
|
||||
end
|
||||
|
||||
def x; return @logical_x; end
|
||||
def y; return @logical_y; end
|
||||
def x
|
||||
return @logical_x;
|
||||
end
|
||||
|
||||
def y
|
||||
return @logical_y;
|
||||
end
|
||||
|
||||
def x=(value)
|
||||
@logical_x = value
|
||||
super(@logical_x+@adjusted_x)
|
||||
super(@logical_x + @adjusted_x)
|
||||
end
|
||||
|
||||
def y=(value)
|
||||
@logical_y = value
|
||||
super(@logical_y+@adjusted_y)
|
||||
super(@logical_y + @adjusted_y)
|
||||
end
|
||||
|
||||
def pokemon=(value)
|
||||
@@ -137,16 +140,50 @@ class PokemonIconSprite < SpriteWrapper
|
||||
@counter = 0
|
||||
return
|
||||
end
|
||||
@animBitmap = AnimatedBitmap.new(GameData::Species.icon_filename_from_pokemon(value))
|
||||
if useRegularIcon(@pokemon.species) || @pokemon.egg?
|
||||
@animBitmap = AnimatedBitmap.new(GameData::Species.icon_filename_from_pokemon(value))
|
||||
else
|
||||
@animBitmap = createFusionIcon()
|
||||
end
|
||||
self.bitmap = @animBitmap.bitmap
|
||||
self.src_rect.width = @animBitmap.height
|
||||
self.src_rect.width = @animBitmap.height
|
||||
self.src_rect.height = @animBitmap.height
|
||||
@numFrames = @animBitmap.width/@animBitmap.height
|
||||
@currentFrame = 0 if @currentFrame>=@numFrames
|
||||
@numFrames = @animBitmap.width / @animBitmap.height
|
||||
@currentFrame = 0 if @currentFrame >= @numFrames
|
||||
changeOrigin
|
||||
end
|
||||
|
||||
def setOffset(offset=PictureOrigin::Center)
|
||||
def useRegularIcon(species)
|
||||
dexNum = getDexNumberFromSpecies(species)
|
||||
return true if dexNum <= Settings::NB_POKEMON
|
||||
return false if $game_variables == nil
|
||||
return true if $game_variables[220] != 0
|
||||
bitmapFileName = sprintf("Graphics/Icons/icon%03d", dexNum)
|
||||
return true if pbResolveBitmap(bitmapFileName)
|
||||
return false
|
||||
end
|
||||
|
||||
SPRITE_OFFSET = 10
|
||||
def createFusionIcon()
|
||||
bodyPoke_number = getBodyID(pokemon.species)
|
||||
headPoke_number = getHeadID(pokemon.species, bodyPoke_number)
|
||||
|
||||
bodyPoke = GameData::Species.get(bodyPoke_number).species
|
||||
headPoke = GameData::Species.get(headPoke_number).species
|
||||
|
||||
icon1 = AnimatedBitmap.new(GameData::Species.icon_filename(headPoke))
|
||||
icon2 = AnimatedBitmap.new(GameData::Species.icon_filename(bodyPoke))
|
||||
|
||||
for i in 0..icon1.width-1
|
||||
for j in ((icon1.height / 2) + Settings::FUSION_ICON_SPRITE_OFFSET)..icon1.height-1
|
||||
temp = icon2.bitmap.get_pixel(i, j)
|
||||
icon1.bitmap.set_pixel(i, j, temp)
|
||||
end
|
||||
end
|
||||
return icon1
|
||||
end
|
||||
|
||||
def setOffset(offset = PictureOrigin::Center)
|
||||
@offset = offset
|
||||
changeOrigin
|
||||
end
|
||||
@@ -158,7 +195,7 @@ class PokemonIconSprite < SpriteWrapper
|
||||
when PictureOrigin::TopLeft, PictureOrigin::Left, PictureOrigin::BottomLeft
|
||||
self.ox = 0
|
||||
when PictureOrigin::Top, PictureOrigin::Center, PictureOrigin::Bottom
|
||||
self.ox = self.src_rect.width/2
|
||||
self.ox = self.src_rect.width / 2
|
||||
when PictureOrigin::TopRight, PictureOrigin::Right, PictureOrigin::BottomRight
|
||||
self.ox = self.src_rect.width
|
||||
end
|
||||
@@ -168,7 +205,7 @@ class PokemonIconSprite < SpriteWrapper
|
||||
when PictureOrigin::Left, PictureOrigin::Center, PictureOrigin::Right
|
||||
# NOTE: This assumes the top quarter of the icon is blank, so oy is placed
|
||||
# in the middle of the lower three quarters of the image.
|
||||
self.oy = self.src_rect.height*5/8
|
||||
self.oy = self.src_rect.height * 5 / 8
|
||||
when PictureOrigin::BottomLeft, PictureOrigin::Bottom, PictureOrigin::BottomRight
|
||||
self.oy = self.src_rect.height
|
||||
end
|
||||
@@ -176,15 +213,17 @@ class PokemonIconSprite < SpriteWrapper
|
||||
|
||||
# How long to show each frame of the icon for
|
||||
def counterLimit
|
||||
return 0 if @pokemon.fainted? # Fainted - no animation
|
||||
return 0 if @pokemon.fainted? # Fainted - no animation
|
||||
# ret is initially the time a whole animation cycle lasts. It is divided by
|
||||
# the number of frames in that cycle at the end.
|
||||
ret = Graphics.frame_rate/4 # Green HP - 0.25 seconds
|
||||
if @pokemon.hp<=@pokemon.totalhp/4; ret *= 4 # Red HP - 1 second
|
||||
elsif @pokemon.hp<=@pokemon.totalhp/2; ret *= 2 # Yellow HP - 0.5 seconds
|
||||
ret = Graphics.frame_rate / 4 # Green HP - 0.25 seconds
|
||||
if @pokemon.hp <= @pokemon.totalhp / 4;
|
||||
ret *= 4 # Red HP - 1 second
|
||||
elsif @pokemon.hp <= @pokemon.totalhp / 2;
|
||||
ret *= 2 # Yellow HP - 0.5 seconds
|
||||
end
|
||||
ret /= @numFrames
|
||||
ret = 1 if ret<1
|
||||
ret = 1 if ret < 1
|
||||
return ret
|
||||
end
|
||||
|
||||
@@ -195,20 +234,20 @@ class PokemonIconSprite < SpriteWrapper
|
||||
self.bitmap = @animBitmap.bitmap
|
||||
# Update animation
|
||||
cl = self.counterLimit
|
||||
if cl==0
|
||||
if cl == 0
|
||||
@currentFrame = 0
|
||||
else
|
||||
@counter += 1
|
||||
if @counter>=cl
|
||||
@currentFrame = (@currentFrame+1)%@numFrames
|
||||
if @counter >= cl
|
||||
@currentFrame = (@currentFrame + 1) % @numFrames
|
||||
@counter = 0
|
||||
end
|
||||
end
|
||||
self.src_rect.x = self.src_rect.width*@currentFrame
|
||||
self.src_rect.x = self.src_rect.width * @currentFrame
|
||||
# Update "jumping" animation (used in party screen)
|
||||
if @selected
|
||||
@adjusted_x = 4
|
||||
@adjusted_y = (@currentFrame>=@numFrames/2) ? -2 : 6
|
||||
@adjusted_y = (@currentFrame >= @numFrames / 2) ? -2 : 6
|
||||
else
|
||||
@adjusted_x = 0
|
||||
@adjusted_y = 0
|
||||
@@ -218,8 +257,6 @@ class PokemonIconSprite < SpriteWrapper
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# Pokémon icon (for species)
|
||||
#===============================================================================
|
||||
@@ -229,15 +266,15 @@ class PokemonSpeciesIconSprite < SpriteWrapper
|
||||
attr_reader :form
|
||||
attr_reader :shiny
|
||||
|
||||
def initialize(species,viewport=nil)
|
||||
def initialize(species, viewport = nil)
|
||||
super(viewport)
|
||||
@species = species
|
||||
@gender = 0
|
||||
@form = 0
|
||||
@shiny = 0
|
||||
@numFrames = 0
|
||||
@species = species
|
||||
@gender = 0
|
||||
@form = 0
|
||||
@shiny = 0
|
||||
@numFrames = 0
|
||||
@currentFrame = 0
|
||||
@counter = 0
|
||||
@counter = 0
|
||||
refresh
|
||||
end
|
||||
|
||||
@@ -266,15 +303,15 @@ class PokemonSpeciesIconSprite < SpriteWrapper
|
||||
refresh
|
||||
end
|
||||
|
||||
def pbSetParams(species,gender,form,shiny=false)
|
||||
def pbSetParams(species, gender, form, shiny = false)
|
||||
@species = species
|
||||
@gender = gender
|
||||
@form = form
|
||||
@shiny = shiny
|
||||
@gender = gender
|
||||
@form = form
|
||||
@shiny = shiny
|
||||
refresh
|
||||
end
|
||||
|
||||
def setOffset(offset=PictureOrigin::Center)
|
||||
def setOffset(offset = PictureOrigin::Center)
|
||||
@offset = offset
|
||||
changeOrigin
|
||||
end
|
||||
@@ -286,7 +323,7 @@ class PokemonSpeciesIconSprite < SpriteWrapper
|
||||
when PictureOrigin::TopLeft, PictureOrigin::Left, PictureOrigin::BottomLeft
|
||||
self.ox = 0
|
||||
when PictureOrigin::Top, PictureOrigin::Center, PictureOrigin::Bottom
|
||||
self.ox = self.src_rect.width/2
|
||||
self.ox = self.src_rect.width / 2
|
||||
when PictureOrigin::TopRight, PictureOrigin::Right, PictureOrigin::BottomRight
|
||||
self.ox = self.src_rect.width
|
||||
end
|
||||
@@ -296,7 +333,7 @@ class PokemonSpeciesIconSprite < SpriteWrapper
|
||||
when PictureOrigin::Left, PictureOrigin::Center, PictureOrigin::Right
|
||||
# NOTE: This assumes the top quarter of the icon is blank, so oy is placed
|
||||
# in the middle of the lower three quarters of the image.
|
||||
self.oy = self.src_rect.height*5/8
|
||||
self.oy = self.src_rect.height * 5 / 8
|
||||
when PictureOrigin::BottomLeft, PictureOrigin::Bottom, PictureOrigin::BottomRight
|
||||
self.oy = self.src_rect.height
|
||||
end
|
||||
@@ -306,9 +343,9 @@ class PokemonSpeciesIconSprite < SpriteWrapper
|
||||
def counterLimit
|
||||
# ret is initially the time a whole animation cycle lasts. It is divided by
|
||||
# the number of frames in that cycle at the end.
|
||||
ret = Graphics.frame_rate/4 # 0.25 seconds
|
||||
ret = Graphics.frame_rate / 4 # 0.25 seconds
|
||||
ret /= @numFrames
|
||||
ret = 1 if ret<1
|
||||
ret = 1 if ret < 1
|
||||
return ret
|
||||
end
|
||||
|
||||
@@ -319,10 +356,10 @@ class PokemonSpeciesIconSprite < SpriteWrapper
|
||||
return if !bitmapFileName
|
||||
@animBitmap = AnimatedBitmap.new(bitmapFileName)
|
||||
self.bitmap = @animBitmap.bitmap
|
||||
self.src_rect.width = @animBitmap.height
|
||||
self.src_rect.width = @animBitmap.height
|
||||
self.src_rect.height = @animBitmap.height
|
||||
@numFrames = @animBitmap.width / @animBitmap.height
|
||||
@currentFrame = 0 if @currentFrame>=@numFrames
|
||||
@currentFrame = 0 if @currentFrame >= @numFrames
|
||||
changeOrigin
|
||||
end
|
||||
|
||||
@@ -333,10 +370,10 @@ class PokemonSpeciesIconSprite < SpriteWrapper
|
||||
self.bitmap = @animBitmap.bitmap
|
||||
# Update animation
|
||||
@counter += 1
|
||||
if @counter>=self.counterLimit
|
||||
@currentFrame = (@currentFrame+1)%@numFrames
|
||||
if @counter >= self.counterLimit
|
||||
@currentFrame = (@currentFrame + 1) % @numFrames
|
||||
@counter = 0
|
||||
end
|
||||
self.src_rect.x = self.src_rect.width*@currentFrame
|
||||
self.src_rect.x = self.src_rect.width * @currentFrame
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user