Centro RPG Maker

Centro de Recursos => Scripts de RPG Maker => Scripts para RPG Maker VX Ace => Tópico iniciado por: Brandt online 14/04/2014 às 23:26

Título: MBS - Spritesheet
Enviado por: Brandt online 14/04/2014 às 23:26
[box2 class=titlebg]MBS - Spritesheet[/box2]

por Masked

[box2 class=titlebg title=Introdução]Fala pessoal, estou vindo aqui com mais um script MBS, (que é uma sigla que na verdade nem eu sei o que significa :hahaha!:, seria Masked Bdealgumacoisa Script), foi uma ideia dada pelo Shiroyasha no tópico do projeto Rise of Dragon Souls e que eu achei muito boa, já que serve de extra frame, muda o tamanho máximo do char e não precisa mudar nada pra usar sprites ripados de ragnarok economiza imagens, porque você pode por 20 poses de um personagem numa imagem só e o script carrega cada uma delas normalmente[/box2]

[box2 class=titlebg title=Características]O script faz com que você possa criar spritesheets, ou "folhas de sprites", isso significa que você não precisa organizar os chars em charsets com espaçamento certinho e com tudo calculado, e que cada frame do personagem pode ter um tamanho diferente, o char pode ter 812472 frames (se você tiver paciência para configurar tudo isso...) e um arquivo pode guardar mais que uma posição do personagem, para falar a verdade, você pode pegar todos os chars do jogo e jogar tudo no mesmo arquivo, aí é só ser criativo, aprender a usar o script e pronto, tudo certo.

Também é possível configurar diferentes 'poses' para cada spritesheet (vide script), aí para fazer o personagem ficar em uma pose, usa-se o script call seguinte:
game_character.pose = :pose

game_character pode ser um evento ($game_map.events[ID]) ou o jogador ($game_player), e a pose é a pose configurada no script (:default, por exemplo)

Outro recurso que o script tem é o 'forçamento de animação', usando o call:
game_character.force_animation([f1,f2,f3,f4],w)
ou esse:
game_character.force_animation([f1,f2,f3,f4],[w1,w2,w3])

dessa forma, o char vai passar pelas frames f1, seguida pela f2, f3 e f4, no primeiro caso, entre cada frame se esperará w frames, no segundo, na primeira frame se esperará w1 frames, na segunda w2, na terceira w3, e na quarta w1 frames denovo.[/box2]

[box2 class=titlebg title=Instuções]Esse script realmente requer maiores explicações para a sua configuração:

Para configurar os frames da animação, usa-se esse código:

"spritesheet[sprite]" => {
:pose => [
# Gráficos do personagem olhando abaixo
[[x,y,largura,altura]],
# Gráficos do personagem olhando a esquerda
[[x,y,largura,altura]],
# Gráficos do personagem olhando a direita
[[x,y,largura,altura]],
# Gráficos do personagem olhando acima
[[x,y,largura,altura]]
]
}


Então, quando o game_character com o gráfico "spritesheet[sprite]" estiver na pose :pose, e olhando para baixo, a animação dele terá um frame, com o gráfico do que estiver dentro do retângulo na posição x * y com tamanho altura * largura.

Uma observação: O gráfico normal do personagem (quando nenhuma pose é definida) é o gráfico da pose :default[/box2]

[box2 class=titlebg title=Screenshots]Não perceptível por imagens[/box2]

[box2 class=titlebg title=Script]#==============================================================================
# MBS - SpriteSheet Characters
#------------------------------------------------------------------------------
# Script por Masked
# Ideia dada por Shiroyasha, no tópico do jogo 'Rise of Dragon Souls'
#------------------------------------------------------------------------------
# O script faz com que os gráficos dos personagens e eventos seja carregado de
# um único arquivo, com todas as poses e frames, é possível criar animações com
# mais de 3 frames, criar animações customizadas, como poses para um ABS, por
# exemplo.
#==============================================================================
module MBS_Spritesheet_Config
#==============================================================================
# Configurações:
#==============================================================================

# A tag que deverá aparecer no gráfico para este ser um Spritesheet
Spritesheet_tag = "[sprite]"

# Aqui são configurados os characters, seus frames e poses
Characters = {"player[sprite]" => {

# Padrão
:default => [
# Gráficos do personagem olhando abaixo
[[508,134,37,90],[556,132,36,92],[601,131,36,94],[648,131,35,92],[694,134,37,90],[743,133,35,91],[789,131,33,93],[834,131,34,93]],
# Gráficos do personagem olhando a esquerda
[[509,331,27,91],[545,332,34,91],[589,333,44,91],[645,332,36,91],[693,332,29,91],[730,333,32,91],[774,333,43,91],[828,333,39,90]],
# Gráficos do personagem olhando a direita
[[509,331,27,91,true],[545,332,34,91,true],[589,333,44,91,true],[645,332,36,91,true],[693,332,29,91,true],[730,333,32,91,true],[774,333,43,91,true],[828,333,39,90,true]],
# Gráficos do personagem olhando acima
[[508,533,36,90],[555,531,36,92],[602,531,34,93],[648,531,34,93],[694,534,36,89],[742,530,35,93],[789,531,33,94],[834,532,34,91]]
],
}}
#==============================================================================
# Fim das Configurações
#==============================================================================
end
#==============================================================================
# Sprite_Character
#==============================================================================
class Sprite_Character < Sprite_Base
  include MBS_Spritesheet_Config

  alias ms_upd update
  def update
    ms_upd
    force_animation(@character.anime_force_frames,@character.anime_force_wait) if @character.anime_force
  end
  #----------------------------------------------------------------------------
  # * Atualização do retângulo de origem
  #----------------------------------------------------------------------------
  def update_src_rect
    unless @character_name.nil?
    if @character_name.include?(Spritesheet_tag)
      index = @character.character_index
      direction = @character.direction/2-1
      direction = 0 if direction < 0
      unless Characters[@character.character_name].keys.include?(@character.pose)
        @character.pose = :default
      end
      @char = Characters[@character.character_name][@character.pose][direction]
      pattern = @character.pattern < @char.size ? @character.pattern : 1
      @char = Characters[@character.character_name][@character.pose][direction][pattern-1]
      self.mirror = @char[4]
      self.src_rect.set(@char[0],@char[1],@char[2],@char[3])
    elsif @tile_id == 0
      index = @character.character_index
      pattern = @character.pattern < 3 ? @character.pattern : 1
      sx = (index % 4 * 3 + pattern) * @cw
      sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
      self.src_rect.set(sx, sy, @cw, @ch)
  end
end
end
alias ms_s_char_bit set_character_bitmap
  #--------------------------------------------------------------------------
  # * Definição de bitmap do personagem
  #--------------------------------------------------------------------------
  def set_character_bitmap
    ms_s_char_bit
    if @character_name.include?(Spritesheet_tag)
      unless Characters[@character.character_name].keys.include?(@character.pose)
        @character.pose = :default
      end
    direction = @character.direction/2-1
    direction = 0 if direction < 0 ||direction.nil?
    char = Characters[@character.character_name][@character.pose][direction]
    @character.pattern = 0 if char[@character.pattern].nil?
    self.ox = char[@character.pattern][2]/2
    self.oy = char[@character.pattern][3]
    end
  end
  #----------------------------------------------------------------------------
  # * Forçamento de animação
  #----------------------------------------------------------------------------
  def force_animation(frames,wait)
        if wait.is_a?(Integer)
                pr = ->(i) { Graphics.wait(wait) }
        elsif wait.is_a?(Array)
                pr = ->(i) { Graphics.wait(wait[i%wait.size]) }
        else
                pr = ->(i) { }
        end

        frames.each {|i|
                @character.pattern = i
                update_src_rect
                Graphics.update
                pr[i]
        }

        @character.anime_force = false
end
end
#==============================================================================
# Game_CharacterBase
#==============================================================================
class Game_CharacterBase
  include MBS_Spritesheet_Config
  attr_accessor :pose
  attr_accessor :anime_force
  attr_accessor :anime_force_frames
  attr_accessor :anime_force_wait
  attr_accessor :pattern

  alias ms_init initialize
  #----------------------------------------------------------------------------
  # * Inicialização do Processo
  #----------------------------------------------------------------------------
  def initialize
    @pose = :default
    @anime_force = false
    @anime_force_wait = 0
    @anime_force_frames = []
    ms_init
  end
  #----------------------------------------------------------------------------
  # * Atualização do padrão da animação
  #----------------------------------------------------------------------------
  def update_anime_pattern
  unless @character_name.nil? || @anime_force == true
    unless @character_name.include?(Spritesheet_tag)
    if !@step_anime && @stop_count > 0
      @pattern = @original_pattern
    else
      @pattern = (@pattern + 1) % 4
    end
  else
      dir = @direction/2-1
      dir = 0 if dir < 0
    if !@step_anime && @stop_count > 0
      @pattern = @original_pattern
    else
      @pattern = (@pattern + 1) % Characters[@character_name][Characters[@character_name].keys.include?(@pose) ? @pose : :default][dir].size
    end
  end
end
end
  #----------------------------------------------------------------------------
  # * Forçamento de animação
  #----------------------------------------------------------------------------
  def force_animation(frames,wait=6)
   @anime_force = true
   @anime_force_frames = frames
   @anime_force_wait = wait
  end
end


Obs.: O script está configurado para se poder usar com um char de 8 frames do pack High Fantasy resource pack, então quem quiser pode usar, não vou dar um exemplo de char desse pack porque isso seria pirataria (o pack é pago...) e seria contra as regras do fórum :descontente:[/box2]

[box2 class=titlebg title=Créditos e Agradecimentos]- ao Shiroyasha, pela ideia;
- ao sinchross, pelo projeto dele que fez o Shiroyasha ter a ideia;
- ao Gab!, por melhorar o método 'force animation'
- a mim, por criar e disponibilizar.[/box2]
Título: Re: MBS - Spritesheet
Enviado por: sinchross online 07/05/2014 às 11:42
Muito bom cara!! Parabéns pela criação, eu ainda não tive tempo de explorar o script pq estou preso em outro ponto da criação mas logo vou testar.
Título: Re: MBS - Spritesheet
Enviado por: Prand online 07/05/2014 às 12:09
muito bom seu script  talvez usarei ele em meu projeto
parabems cara :ok:
Título: Re: MBS - Spritesheet
Enviado por: Khrono online 07/05/2014 às 12:30
Eta!

Muito bom cara!

Isso é muito, muito, muito útil para um projeto!

Não estou com acesso ao RPG Maker agora, mas pode ter certeza que está marcado pra eu testar essa belezura

aehiaheiuaheoi

Parabens cara!!

Título: Re: MBS - Spritesheet
Enviado por: SimonMuran online 07/05/2014 às 17:57
Facilitaria muitas vidas, huehuehueu, pixel artists teriam mais facilidade em fazer obras com mais movimentos
um ótimo trabalho mesmo  :XD:
Título: Re: MBS - Spritesheet
Enviado por: Raizen online 07/05/2014 às 18:19
Realmente essa é uma função bem interessante, principalmente para ABS e talz, parabéns pelo excelente trabalho :P, cara seu acervo de scripts está ficando grandinho não   :o:
Título: Re: MBS - Spritesheet
Enviado por: Jhonzaggo online 14/05/2014 às 19:49
Realmente ajudaria muito esse script, mas não entendi bem como usá-lo... teria como postar uma demo ou algo assim? ajudaria mto msm haha

e parabéns pelo trabalho ae!
Título: Re: MBS - Spritesheet
Enviado por: Ds online 14/05/2014 às 20:45
Eu não consegui entender  :T.T:

Pode deixar uma demo masked?  :o:):
Título: Re: MBS - Spritesheet
Enviado por: elvio online 14/05/2014 às 20:54
Eu entendi do que é mas  não como funciona, poderia deixar uma demo ai?
Título: Re: MBS - Spritesheet
Enviado por: Brandt online 14/05/2014 às 21:14
Ah, sim, eu estava fazendo uma DEMO, não sei porque, mas eu parei .-.
Vou terminar ela e já passo o link para download pra vocês.
Título: MBS - Spritesheet
Enviado por: ezequielcuenga online 11/03/2017 às 08:45
Ola Masked, você pode disponibilizar uma DEMO  :)
Título: Re:MBS - Spritesheet
Enviado por: aliffer online 25/02/2020 às 11:30
Oi... Entao, será que podia me deixar uma DEMO ? eu realmente nao entendi isso kkk mas entendi a ideia. :shrug:
Título: Re:MBS - Spritesheet
Enviado por: sc19 online 25/02/2020 às 11:42
Citação de: aliffer online 25/02/2020 às 11:30
Oi... Entao, será que podia me deixar uma DEMO ? eu realmente nao entendi isso kkk mas entendi a ideia. :shrug:

/\ Super apoio a ideia
E pelo que vi pelos comentários acima não só somos nós que estamos pedindo por isso

(https://media.giphy.com/media/24xRxrDCLxhT2/giphy.gif)
Título: Re:MBS - Spritesheet
Enviado por: Brandt online 25/02/2020 às 11:55
Pois é, fiquei devendo essa demo aí faz tempo haha

O script é bem antigo, então prefiro dar um tapa nele antes. Outro problema é que ele é absolutamente sacal de configurar, tem que colocar tudo no mão e pá (péssimo).

Vou estudar alternativas para isso, e assim que der eu atualizo o tópico e faço uma demo ou um tutorialzinho ensinando a usar.