🤔 Para Refletir :
"Fazer um jogo é sempre muito mais difícil do que jogar um jogo..."
- Rafael_Sol_MAKER

Expandir MOG's Ougi Animation?

AbsoluteXandy Masculino

Marquês
Membro
Membro
𝓢𝓱𝓲𝓪𝔀𝓪𝓼𝓮 𝓰𝓮𝓽𝓽𝓸 𝓭𝓪 𝔂𝓸!
Juntou-se
04 de Julho de 2015
Postagens
654
Bravecoins
119
Estava revisitando um jogo completo meu e senti que as animações de batalha não era muito suficientes, uma solução legal que encontrei foi a partir de um dos scrips que vinham na Master Demo do Moghunter:
https://atelierrgss.wordpress.com/rgss3-ougi-animation/

O que ela faz é adicionar uma imagenzinha em skills de um personagem antes da habilidade de fato acontecer e apenas isso já dá uma personalidade totalmente diferente pra ela, o problema que eu encontrei é que o script parece ser pensado para que apenas um efeito seja usado em cada personagem, sendo que no meu jogo cada um possui pelo menos 3 "habilidades supremas" e usar a mesma meio que mata qualquer sentimento especial que elas teriam.

Existe uma correção fácil para que o script suporte várias imagens pra diferentes habilidades de um mesmo personagem?

Para quem não quer ter que baixar a própria demo pra ver o script, para fins de faciltiar na ajuda, vou colar ele aqui:​
Código:
#==============================================================================
# +++ MOG - Ougi Animation  (v1.8) +++
#==============================================================================
# By Moghunter 
# https://atelierrgss.wordpress.com/
#==============================================================================
# Apresenta uma animação em pictures antes de ativar alguma ação.
#==============================================================================
# Serão necessários os seguintes arquivos na pasta Graphics/Pictures/.
#
# Actor + ID.png
# Actor + ID + _Ougi.png
#
#==============================================================================
# EXEMPLO
#==============================================================================
# Actor1.png
# Actor1_Ougi.png
#
# Enemy7.png
# Enemy7_ougi.png
#
#==============================================================================
# Para ativar a animação basta colocar o seguinte comentário na caixa de notas
# da skill ou itens.
#
# <Ougi Animation>
#
#==============================================================================

#==============================================================================
# ? Histórico (Version History)
#==============================================================================
# v 3.7 - Melhoria na compatibilidade de scripts.
#==============================================================================

$imported = {} if $imported.nil?
$imported[:mog_ougi_animation] = true

module MOG_OUGI_ANIMATION
  #Definição do som ao ativar a animação.  
  SOUND_FILE = "Flash2"  
end

#==============================================================================
# ? Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ? Use Item
  #--------------------------------------------------------------------------
  alias mog_sp_animation_use_item use_item
  def use_item
      update_sp_animation
      mog_sp_animation_use_item 
  end
  
  #--------------------------------------------------------------------------
  # ? Can SP Animation?
  #--------------------------------------------------------------------------    
  def can_sp_animation?
      skill = @subject.current_action.item
      return true if skill.note =~ /<Ougi Animation>/
      return false
  end
  
  #--------------------------------------------------------------------------
  # ? Update SP Animation
  #--------------------------------------------------------------------------  
  def update_sp_animation
      return unless can_sp_animation?       
      special_animation = Ougi_Animation.new(@subject)
      if $imported[:mog_menu_cursor]    
         valor_x = $game_temp.menu_cursor[2] ; $game_temp.menu_cursor[2] = -999
         force_cursor_visible(false)
      end
      loop do
          @ougi_ref = true
          special_animation.update ; Graphics.update ; Input.update
          break if special_animation.phase == 3
      end
      special_animation.dispose
      $game_temp.menu_cursor[2] = valor_x if $imported[:mog_menu_cursor]
  end

end

#==============================================================================
# ? Ougi Animation
#==============================================================================
class Ougi_Animation
  
  include MOG_OUGI_ANIMATION 
  attr_accessor :phase
  
  #--------------------------------------------------------------------------
  # ? Initialize
  #--------------------------------------------------------------------------    
  def initialize(subject)      
      @phase = 0 ; create_battler(subject) ; create_background(subject)
      Audio.se_play("Audio/SE/" + SOUND_FILE.to_s, 100, 100) rescue nil if @phase != 3
  end    
  
  #--------------------------------------------------------------------------
  # ? Create Background
  #--------------------------------------------------------------------------      
  def create_background(subject)
      @background_sprite = Sprite.new
      if subject.is_a?(Game_Actor)
         battler_id = "Actor" + subject.id.to_s
      else   
         battler_id = "Enemy" + subject.enemy_id.to_s
      end       
      bname = battler_id.to_s + "_Ougi"if bname == nil
      @background_sprite.bitmap = Cache.picture(bname) rescue nil      
      @background_sprite.z = 11000 ; @background_sprite.opacity = 0
      @background_sprite.zoom_x = 1.00 ; @background_sprite.zoom_y = 1.00
      if @background_sprite.bitmap != nil
         @background_sprite.ox = @background_sprite.bitmap.width / 2
         @background_sprite.oy = @background_sprite.bitmap.height / 2
         @background_sprite.x = @background_sprite.ox 
         @background_sprite.y = @background_sprite.oy
      end
      @phase = @background_sprite.bitmap != nil ? 0 : 3 
  end
  
  #--------------------------------------------------------------------------
  # ? Create Battler
  #--------------------------------------------------------------------------      
  def create_battler(subject)
      @battler_sprite = Sprite.new
      if subject.is_a?(Game_Actor)
         bname = "Actor" + subject.id.to_s
      else   
         bname = "Enemy" + subject.enemy_id.to_s
      end  
      @battler_sprite.bitmap = Cache.picture(bname) rescue nil
      @battler_sprite.z = 12000 ; @battler_org = [0,0]
      if @battler_sprite.bitmap != nil
         @battler_sprite.ox = @battler_sprite.bitmap.width / 2
         @battler_sprite.oy = @battler_sprite.bitmap.height / 2
         px = @battler_sprite.ox  + ((Graphics.width / 2) - (@battler_sprite.bitmap.width / 2))
         @battler_sprite.y = @battler_sprite.oy + (Graphics.height - @battler_sprite.bitmap.height)
         @battler_org = [px - 130,px]
         @battler_sprite.x = @battler_org[0] 
     end
     @battler_sprite.zoom_x = 2 ; @battler_sprite.zoom_y = 2
     @battler_sprite.opacity = 0
     @phase = @battler_sprite.bitmap != nil ? 0 : 3     
  end       
  
  #--------------------------------------------------------------------------
  # ? Dispose
  #--------------------------------------------------------------------------    
  def dispose
      dispose_battler_sprite ; dispose_background_sprite
  end
  
  #--------------------------------------------------------------------------
  # ? Dispose Battler Sprite
  #--------------------------------------------------------------------------      
  def dispose_battler_sprite
      return if @battler_sprite == nil
      if @battler_sprite.bitmap != nil
         @battler_sprite.bitmap.dispose ; @battler_sprite.bitmap = nil
      end
      @battler_sprite.dispose ; @battler_sprite = nil    
  end  
  
  #--------------------------------------------------------------------------
  # ? Dispose Background Sprite
  #--------------------------------------------------------------------------        
  def dispose_background_sprite
      return if @background_sprite == nil
      if @background_sprite.bitmap != nil
         @background_sprite.bitmap.dispose ; @background_sprite.bitmap = nil
      end  
      @background_sprite.dispose ; @background_sprite = nil
  end  
  
  #--------------------------------------------------------------------------
  # ? Update
  #--------------------------------------------------------------------------    
  def update
      return if @phase == 3
      case @phase
        when 0; update_start 
        when 1; update_slide 
        when 2; update_end  
     end
     @background_sprite.zoom_x += 0.004
     @background_sprite.zoom_y = @background_sprite.zoom_x
  end  
  
  #--------------------------------------------------------------------------
  # ? Update Start
  #--------------------------------------------------------------------------      
  def update_start
      @battler_sprite.zoom_x -= 0.03 ; @battler_sprite.opacity += 5
      @background_sprite.opacity += 10 ; @battler_sprite.x += 3
      if @battler_sprite.zoom_x <= 1.00
         @battler_sprite.zoom_x = 1.00 ; @battler_sprite.opacity = 255
         @background_sprite.opacity = 255 ; @phase = 1
      end   
      @battler_sprite.zoom_y = @battler_sprite.zoom_x 
  end  
      
  #--------------------------------------------------------------------------
  # ? Update Slide
  #--------------------------------------------------------------------------        
  def update_slide
      @battler_sprite.x += 1 ; @phase = 2 if @battler_sprite.x >= @battler_org[1]
  end

  #--------------------------------------------------------------------------
  # ? Update End
  #--------------------------------------------------------------------------        
  def update_end
      @battler_sprite.zoom_x += 0.03
      @battler_sprite.zoom_y = @battler_sprite.zoom_x
      @battler_sprite.opacity -= 5 ; @background_sprite.opacity -= 5
      @phase = 3 if @battler_sprite.opacity <= 0
  end  
  
end

Agradeço a ajuda desde já.
 
Até tem, mas eu infelizmente não tenho o conhecimento básico em Ruby pra isso!! De qualquer forma, eu amo tentar fazer "gambiarras"!! Hahahaha Então eu, no seu lugar, tentaria fazer algo que eu NÃO recomendo, mas vou descrever aqui pra caso seja útil ou para que você sinta vergonha das minhas gambiarras mesmo.

1- Criar um "clone" do herói na Database, sendo o ID deste clone utilizado para usar o especialzão;
2- Definir a habilidade do especialzão como um Evento Comum que cria um fade-in, ADICIONA o personagem clonado pra usar o especialzão com a imagem específica e REMOVE todos os personagens da Party;
3- Definir o último comando deste evento comum como um chamado para a habilidade do especialzão.
4- Reverter a bagunça com a Party HASHAUSHUAHUAS

Em alguns casos isso seria inviável e na realidade eu nem sei como ficaria na prática, mas é só uma ideia.
 
Eliyud comentou:
Até tem, mas eu infelizmente não tenho o conhecimento básico em Ruby pra isso!! De qualquer forma, eu amo tentar fazer "gambiarras"!! Hahahaha Então eu, no seu lugar, tentaria fazer algo que eu NÃO recomendo, mas vou descrever aqui pra caso seja útil ou para que você sinta vergonha das minhas gambiarras mesmo.

1- Criar um "clone" do herói na Database, sendo o ID deste clone utilizado para usar o especialzão;
2- Definir a habilidade do especialzão como um Evento Comum que cria um fade-in, ADICIONA o personagem clonado pra usar o especialzão com a imagem específica e REMOVE todos os personagens da Party;
3- Definir o último comando deste evento comum como um chamado para a habilidade do especialzão.
4- Reverter a bagunça com a Party HASHAUSHUAHUAS

Em alguns casos isso seria inviável e na realidade eu nem sei como ficaria na prática, mas é só uma ideia.
Ifelizmente isso seria horrível com a quantidade de personagens e habilidades diferentes. Reorganizar a bagunça seria sua própria dor de cabeça em partes do jogo onde o jogador pode customizar melhor a própria equipe.
 
Voltar
Topo Inferior