Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Fondo de Batalla Animado

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Fondo de Batalla Animado

Mensaje por AsFzKakarotto el 2017-04-25, 23:30

Permite que el clásico fondo de batalla en el RPG maker XP sea animado:

Copias los  Script y lo pegas arriba de Main con el nombre que quieras...
como ejemplo. Animation_Battleback01.

Código:
#==============================================================================
# Fondo de Batalla Animado COMPATIBLE CON BATALLA POR DEFECTO
#==============================================================================
# Original Script por: Kotfire.
# Editado para batalla por defecto: AsFz Kakarotto
# Versión Unica
#-----------------------------------------------------------------------------
# -Instrucciones-
# Pegar encima de main y disfrutar
# Editar la opción Template:
#  true = si el fondo animado es una sola imagen (>>>> - >>>>)  y
#  false = si son varias.
#           En el segundo caso las imagenes tendrán que llamarse
#           Nombredelfondo, Nombredelfondo-1, Nombredelfondo-2 etc.
#           Ejemplo: Pradera, Pradera-1, Pradera-2, Pradera-3 ...
#==============================================================================
#==============================================================================
#  Options
#------------------------------------------------------------------------------
module Options
  module Animated_Back
    Template = true
  end
end

#------------------------------------------------------------------------------
#                             - ATENCIÓN -
#------------------------------------------------------------------------------
#           NO EDITAR NADA DE ESTA PARTE INFERIOR DE ESTE SCRIPT
#------------------------------------------------------------------------------
#==============================================================================
#  Game_Battle
#------------------------------------------------------------------------------
class Game_Battle
  #--------------------------------------------------------------------------
  attr_accessor :back_delay     # Retraso entre frames
  attr_accessor :back_frames    # Número de frames
  attr_accessor :back_animated  # fondo animado?
  #--------------------------------------------------------------------------
  alias kot_animatedbattleback_gamebattle_initialize initialize
  def initialize
  # Aquí puedes Modificar la Velocidad que se desplazará en la frecuencia
  # de frames 1 = rapido  5 = Normal (Por defecto)  9 =Lento.
  #         ==== SOLO LINEA INFERIOR EDITABLE ====
    @back_delay = 4
  # SI ES SOLO UNA IMAGEN CUANTOS CUADRADOS DE ANIMACIÓN SERÁN
  #  DE IZQUIERDA A DERECHA ==== SOLO LINEA INFERIOR EDITABLE ====.
    @back_frames = 10
  # DESDE INICIO DEL JUEGO...:
  #     true = Activa animación de fondo o
  #     false = Desactiva animación de fondo
  #             (Cuando la imagen no tiene animación debe de
  #              estar en false, de lo contrario la pantalla
  #              dará a negro con errores graficos).
  #      ==== SOLO LINEA INFERIOR EDITABLE ====
    @back_animated = false
=begin
   Tambien para activarlo antes de la batalla puedes llamar el script
   con el siguiente texto:
  
                   if $game_battle.back_animated
                   $game_battle.back_animated = false
                   $game_variables[001] = "Desactivado"
                   else
                   $game_battle.back_animated = true
                   $game_variables[001] = "Activado"
                 end
                
    Estó hará que active la animación de fondo de batalla...
    y Tambien sirve para Desactivarlo. cosa que cuando finalises la
    batalla, la vuelvas a desactivar con el mismo Texto anterior.
-------------------------------------------------------------------------------
=end
#------------------------------------------------------------------------------
#                             - ATENCIÓN -
#------------------------------------------------------------------------------
#           NO EDITAR NADA DE ESTA PARTE INFERIOR DE ESTE SCRIPT
#------------------------------------------------------------------------------
#==============================================================================
#==============================================================================          
    kot_animatedbattleback_gamebattle_initialize
  end
end

#  Spriteset_Battle
#------------------------------------------------------------------------------
class Spriteset_Battle
  #--------------------------------------------------------------------------
  alias kot_animatedbattleback_spritesetbattle_initialize initialize
  def initialize
    @back_index = 0
    @back_delay = $game_battle.back_delay
    @back_frames = $game_battle.back_frames
    @animated = $game_battle.back_animated
    kot_animatedbattleback_spritesetbattle_initialize
  end
  #--------------------------------------------------------------------------
  def update_backsprite
    return unless @animated
    return unless Graphics.frame_count % @back_delay == 0
    @back_index += 1
    if @back_index > @back_frames
      @back_index = 0
      update_backsprite
    end
    if Options::Animated_Back::Template
      x = 640 * (@back_index - 1)
    else
      x = 0
      @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name + "-#{@back_index}")
    end
    width = @battleback_sprite.bitmap.width / @back_frames
    height = @battleback_sprite.bitmap.height
    @battleback_sprite.src_rect.set(x, 0, 640, 320) #====  ¡!
  end
end
#==============================================================================
#  Scene_Battle (1)
#------------------------------------------------------------------------------

class Scene_Battle
  #--------------------------------------------------------------------------
  alias kot_animatedbattleback_scenebattle_update update
  def update
    @spriteset.update_backsprite
    kot_animatedbattleback_scenebattle_update
  end
end

Después con este otro script:

Código:
#==============================================================================
# Script Add_on.
# Necesario para la función de un fondo de batalla animado.
#==============================================================================
# Original Script por: Kotfire.
# Editado para batalla por defecto: AsFz Kakarotto
# Versión Unica
#-----------------------------------------------------------------------------
#------------------------------------------------------------------------------
#                             - ATENCIÓN -
#------------------------------------------------------------------------------
#                    NO EDITAR NADA DE ESTE SCRIPT
#------------------------------------------------------------------------------

#==============================================================================
#
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
module Add_on
  #---------------------------------------------------------------------------
  @add_ons = []
  @state = {}
  #---------------------------------------------------------------------------
  def self.insert(name)
    @add_ons.push(name)
    @state[name] = true
  end
  #---------------------------------------------------------------------------
  def self.enable(name)
    @state[name] = true
  end
  #---------------------------------------------------------------------------
  def self.disable(name)
    @state[name] = false
    return
  end
  #---------------------------------------------------------------------------
  def self.state(name)
    return @state[name]
  end
  #---------------------------------------------------------------------------
  def self.scripts
    return @add_ons
  end
end
#==============================================================================
# ■ Game_Battle
#------------------------------------------------------------------------------
class Game_Battle
  #--------------------------------------------------------------------------
  attr_accessor  :animated_battlers
  attr_accessor  :animated_enemies
  attr_accessor  :move_battlers
  attr_accessor  :move_enemies
  attr_accessor  :mirror
  #--------------------------------------------------------------------------
  def initialize
    @animated_battlers = true
    @animated_enemies = true
    @move_battlers = true
    @move_enemies = true
    @mirror = false
  end
end
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------

class Scene_Title
  #--------------------------------------------------------------------------
  alias kot_cbs_scenetitle_commandnewgame command_new_game
  def command_new_game
    $game_battle = Game_Battle.new
    kot_cbs_scenetitle_commandnewgame
  end
  #--------------------------------------------------------------------------
  alias kot_cbs_scenetitle_battletest battle_test
  def battle_test
    $game_battle = Game_Battle.new
    kot_cbs_scenetitle_battletest
  end
end
#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
class Scene_Load < Scene_File
  #------------------------------------
  alias kot_cbs_sceneload_readsavedata read_save_data
  def read_save_data(file)
    kot_cbs_sceneload_readsavedata(file)
    $game_battle = Marshal.load(file)
  end
end
#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
class Scene_Save < Scene_File
  #------------------------------------  
  alias kot_cbs_scenesave_writesavedata write_save_data
  def write_save_data(file)
    kot_cbs_scenesave_writesavedata(file)
    Marshal.dump($game_battle, file)
  end
end
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
#  This class brings together battle screen sprites. It's used within
#  the Scene_Battle class.
#==============================================================================

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :viewport1                # enemy viewport
  attr_reader   :viewport2                # actor viewport
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    # Make viewports
    @viewport1 = Viewport.new(0, 0, 640, 320)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport4 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 101
    @viewport3.z = 200
    @viewport4.z = 5000
    # Make battleback sprite
    @battleback_sprite = Sprite.new(@viewport1)
    # Make enemy sprites
    @enemy_sprites = []
    for enemy in $game_troop.enemies.reverse
      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
    end
    # Make actor sprites
    @actor_sprites = []
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    # Make weather
    @weather = RPG::Weather.new(@viewport1)
    # Make picture sprites
    @picture_sprites = []
    for i in 51..100
      @picture_sprites.push(Sprite_Picture.new(@viewport3,
        $game_screen.pictures[i]))
    end
    # Make timer sprite
    @timer_sprite = Sprite_Timer.new
    # Frame update
    update
  end
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
class Game_Battler
  #--------------------------------------------------------------------------
  attr_accessor  :sprite_delay
  attr_accessor  :sprite_index
  attr_accessor  :sprite_frames
  attr_accessor  :frame_width
  attr_accessor  :frame_height
  attr_accessor  :real_dead
  attr_accessor  :pose
  attr_accessor  :repeat
  attr_accessor  :moving
  attr_accessor  :x
  attr_accessor  :y
  attr_accessor  :target_x
  attr_accessor  :target_y
  attr_accessor  :animate
  attr_accessor  :anim_wait
  attr_reader    :victory
  attr_reader    :start_x
  attr_reader    :start_y
  attr_reader    :move_speed
  #--------------------------------------------------------------------------
  alias kot_cbs_gamebattler_initialize initialize
  def initialize
    @sprite_delay = 8
    @sprite_index = -1
    @sprite_frames = 4
    @real_dead = false
    @repeat = true
    @target_x = 0
    @target_y = 0
    @start_x = 0
    @start_y = 0
    @x = nil
    @y = nil
    @moving = false
    @animate = false
    @anim_wait = 0
    @victory = false
    kot_cbs_gamebattler_initialize
  end
  #------------------------------------
  def set_pose(number, loop = true, delay = 8)
    @pose = number
    @repeat = loop
    @sprite_frames = 4
    frames = Options::Cbs::Pose_Frames[number]
    @sprite_frames = frames if frames != nil
    @sprite_delay = delay
    delay_pose = Options::Cbs::Pose_Delay[number]
    @sprite_delay = delay_pose if delay_pose != nil
  end
  #------------------------------------
  def move_to(target_x, target_y, speed = Options::Cbs::Move_speed)
    if self.is_a?(Game_Actor)
      return unless $game_battle.move_battlers
    elsif self.is_a?(Game_Enemy)
      return unless $game_battle.move_enemies      
    end
    return if target_x == @x && target_y == @y
    @target_x = target_x
    @target_y = target_y
    @move_speed = speed
    @moving = true
  end
  #------------------------------------
  def anim(pose, repeat = false, wait = nil)
    return if @animate
    @sprite_index = -1
    set_pose(pose, repeat)
    wait = @sprite_frames if Options::Cbs::Pose_Delay[pose] == nil
    wait = [@sprite_frames * Options::Cbs::Pose_Delay[pose] - (Options::Cbs::Pose_Delay[pose] * 2), 8].max if wait == nil
    @anim_wait = wait
    @animate = true
    @victory = true if pose == Options::Cbs::Victory
  end
  #------------------------------------
  def reset
    @victory = false
    @target_x = 0
    @target_y = 0
    @start_x = 0
    @start_y = 0
    @x = nil
    @y = nil
  end
end
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :name                     # name
  attr_reader   :character_name           # character file name
  attr_reader   :character_hue            # character hue
  attr_reader   :class_id                 # class ID
  attr_reader   :weapon_id                # weapon ID
  attr_reader   :armor1_id                # shield ID
  attr_reader   :armor2_id                # helmet ID
  attr_reader   :armor3_id                # body armor ID
  attr_reader   :armor4_id                # accessory ID
  attr_reader   :level                    # level
  attr_reader   :exp                      # EXP
  attr_reader   :skills                   # skills
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def initialize(actor_id)
    super()
    setup(actor_id)
  end
  #--------------------------------------------------------------------------
  # * Setup
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def setup(actor_id)
    actor = $data_actors[actor_id]
    @actor_id = actor_id
    @name = actor.name
    @character_name = actor.character_name
    @character_hue = actor.character_hue
    @battler_name = actor.battler_name
    @battler_hue = actor.battler_hue
    @class_id = actor.class_id
    @weapon_id = actor.weapon_id
    @armor1_id = actor.armor1_id
    @armor2_id = actor.armor2_id
    @armor3_id = actor.armor3_id
    @armor4_id = actor.armor4_id
    @level = actor.initial_level
    @exp_list = Array.new(101)
    make_exp_list
    @exp = @exp_list[@level]
    @skills = []
    @hp = maxhp
    @sp = maxsp
    @states = []
    @states_turn = {}
    @maxhp_plus = 0
    @maxsp_plus = 0
    @str_plus = 0
    @dex_plus = 0
    @agi_plus = 0
    @int_plus = 0
    # Learn skill
    for i in 1..@level
      for j in $data_classes[@class_id].learnings
        if j.level == i
          learn_skill(j.skill_id)
        end
      end
    end
    # Update auto state
    update_auto_state(nil, $data_armors[@armor1_id])
    update_auto_state(nil, $data_armors[@armor2_id])
    update_auto_state(nil, $data_armors[@armor3_id])
    update_auto_state(nil, $data_armors[@armor4_id])
  end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
class Game_Enemy < Game_Battler
  #------------------------------------    
  def screen_x
    if $game_battle.mirror
      @start_x = 640 - $data_troops[@troop_id].members[@member_index].x
    else
      @start_x = $data_troops[@troop_id].members[@member_index].x
    end
    return @start_x
  end
  #------------------------------------
  def screen_y
    @start_y = $data_troops[@troop_id].members[@member_index].y
    return @start_y
  end
end
#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------

class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  attr_accessor :battler                  
  #--------------------------------------------------------------------------
  def initialize(viewport, battler = nil)
    super(viewport)
    @battler = battler
    @battler_visible = false
    @start = false
  end
  #--------------------------------------------------------------------------
  def dispose
    if self.bitmap != nil
      self.bitmap.dispose
    end
    super
  end
  #--------------------------------------------------------------------------
  def update
    super
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    
    if Graphics.frame_count % @battler.sprite_delay == 0
      @battler.sprite_index += 1 unless @battler.sprite_index >= @battler.sprite_frames - 1
      @battler.sprite_index = 0 if @battler.sprite_index >= @battler.sprite_frames - 1 && @battler.repeat
      if @battler.is_a?(Game_Actor)
        @battler.sprite_index = 0 unless $game_battle.animated_battlers
      elsif @battler.is_a?(Game_Enemy)
        @battler.sprite_index = 0 unless $game_battle.animated_enemies      
      end
    if @battler.animate
      if @battler.anim_wait <= 0
        @battler.animate = false
        @battler.set_pose(Options::Cbs::Stand) unless @battler.victory
        return
      end
      if Graphics.frame_count % @battler.sprite_delay == 0
        @battler.anim_wait -= 1
      end
    end    
    
    if @battler.moving
      if @battler.is_a?(Game_Actor)
        if @battler.target_x == @battler.start_x
          @battler.set_pose(Options::Cbs::Move_back)
        elsif @battler.target_x != @battler.start_x
          @battler.set_pose(Options::Cbs::Move_to)
        end
      end
      if @battler.is_a?(Game_Enemy)
        if @battler.target_x == @battler.start_x
          @battler.set_pose(Options::Cbs::Move_back)
        elsif @battler.target_x != @battler.start_x
          @battler.set_pose(Options::Cbs::Move_to)
        end
      end
      if @battler.x < @battler.target_x
        @battler.x += @battler.move_speed
        @battler.x = @battler.target_x if @battler.x > @battler.target_x
      else
        @battler.x -= @battler.move_speed
        @battler.x = @battler.target_x if @battler.x < @battler.target_x
      end
      if @battler.y < @battler.target_y
        @battler.y += @battler.move_speed
        @battler.y = @battler.target_y if @battler.y > @battler.target_y
      else
        @battler.y -= @battler.move_speed
        @battler.y = @battler.target_y if @battler.y < @battler.target_y
      end
      @battler.moving = false if @battler.x == @battler.target_x &&
      @battler.y == @battler.target_y
    else    
      if @battler.x == nil && @battler.y == nil
        @battler.x = @battler.target_x = @battler.screen_x
        @battler.y = @battler.target_y = @battler.screen_y
      end
    end
    if @battler.damage == nil and
       @battler.state_animation_id != @state_animation_id
      @state_animation_id = @battler.state_animation_id
      loop_animation($data_animations[@state_animation_id])
    end
    if @battler.is_a?(Game_Actor) and @battler_visible
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 207
      end
    end
    if @battler.blink
      blink_on
    else
      blink_off
    end
    if @battler.dead? && @battler.real_dead
      @battler.set_pose(Options::Cbs::Dead)
    else
      @battler.real_dead = false
    end
    unless @battler_visible
      if not @battler.hidden and not @battler.dead? and
         (@battler.damage == nil or @battler.damage_pop)
        appear
        @battler_visible = true
      end
    else
      if @battler.hidden
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      if @battler.animation_id != 0
        animation = $data_animations[@battler.animation_id]
        animation(animation, @battler.animation_hit)
        @battler.animation_id = 0
      end
      if @battler.damage_pop
        damage(@battler.damage, @battler.critical)
        @battler.damage = nil
        @battler.critical = false
        @battler.damage_pop = false
      end
      if @battler.damage == nil and @battler.dead?
        if @battler.is_a?(Game_Enemy)
          $game_system.se_play($data_system.enemy_collapse_se) unless @battler.real_dead
        else
          $game_system.se_play($data_system.actor_collapse_se) unless @battler.real_dead
        end
        @battler.set_pose(Options::Cbs::Dead)
        @battler.real_dead = true
      end
    end
    self.x = @battler.x
    self.y = @battler.y
  end
end
#==============================================================================
# ■ Arrow_Enemy
#------------------------------------------------------------------------------
class Arrow_Enemy < Arrow_Base
  #--------------------------------------------------------------------------
  # - Uso del Personaje que el cursor ha señalado
  #--------------------------------------------------------------------------
  def enemy
    return $game_troop.enemies[@index]
  end
  #--------------------------------------------------------------------------
  # - Renovacion del Frame
  #--------------------------------------------------------------------------
  def update
    super
    # Estara en el aire, si el enemigo no es señalado
    $game_troop.enemies.size.times do
      break if self.enemy.exist?
      @index += 1
      @index %= $game_troop.enemies.size
    end
    # Cursor derecho
    if Input.repeat?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      $game_troop.enemies.size.times do
        @index += 1
        @index %= $game_troop.enemies.size
        break if self.enemy.exist?
      end
    end
    # Cursor izquierdo
    if Input.repeat?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      $game_troop.enemies.size.times do
        @index += $game_troop.enemies.size - 1
        @index %= $game_troop.enemies.size
        break if self.enemy.exist?
      end
    end
    # Opciones de coordenadas del sprite
    if self.enemy != nil
      self.x = self.enemy.x + self.enemy.frame_width / 2
      self.y = self.enemy.y + self.enemy.frame_height / 2
    end
  end
end
#==============================================================================
# ■ Arrow_Actor
#------------------------------------------------------------------------------

class Arrow_Actor < Arrow_Base
  #--------------------------------------------------------------------------
  # - Uso del Personaje que el cursor ha señalado
  #--------------------------------------------------------------------------
  def actor
    return $game_party.actors[@index]
  end
  #--------------------------------------------------------------------------
  # - Renovacion del Frame
  #--------------------------------------------------------------------------
  def update
    super
    # Cursor derecho
    if Input.repeat?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      @index += 1
      @index %= $game_party.actors.size
    end
    # Cursor izquierdo
    if Input.repeat?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      @index += $game_party.actors.size - 1
      @index %= $game_party.actors.size
    end
    # Opciones de coordenadas del sprite
    if self.actor != nil
      self.x = self.actor.x + self.actor.frame_width / 2
      self.y = self.actor.y + self.actor.frame_height / 2
    end
  end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
class Scene_Battle
  #--------------------------------------------------------------------------
  #alias kot_cbs_scenebattle_main main
  def main
    $game_temp.in_battle = true
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    $game_system.battle_interpreter.setup(nil, 0)
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
    s1 = $data_system.words.attack
    s2 = $data_system.words.skill
    s3 = $data_system.words.guard
    s4 = $data_system.words.item
    @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
    @actor_command_window.y = 160
    @actor_command_window.z = 999
    @actor_command_window.back_opacity = 160
    @actor_command_window.active = false
    @actor_command_window.visible = false
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @message_window = Window_Message.new
    @spriteset = Spriteset_Battle.new
    @wait_count = 0
    if $data_system.battle_transition == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
        $data_system.battle_transition)
    end
    start_phase1
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    $game_map.refresh
    Graphics.freeze
    @actor_command_window.dispose
    @party_command_window.dispose
    @help_window.dispose
    @status_window.dispose
    @message_window.dispose
    if @skill_window != nil
      @skill_window.dispose
    end
    if @item_window != nil
      @item_window.dispose
    end
    if @result_window != nil
      @result_window.dispose
    end
    @spriteset.dispose
    if $scene.is_a?(Scene_Title)
      Graphics.transition
      Graphics.freeze
    end
    if $BTEST and not $scene.is_a?(Scene_Gameover)
      $scene = nil
    end
  end
  #--------------------------------------------------------------------------
  def update_phase4
    case @phase4_step
    when 1
      update_phase4_step1
    when 2
      update_phase4_step2
    when 3
      update_phase4_step3
    when 4
      update_phase4_step4
    when 5
      update_phase4_step5
    when 6
      update_phase4_step6
    when 7
      update_phase4_step7
    when 8
      update_phase4_step8
    end
  end
  #--------------------------------------------------------------------------
  def update_phase4_step2
    # If not a forcing action
    unless @active_battler.current_action.forcing
      # If restriction is [normal attack enemy] or [normal attack ally]
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # Set attack as an action
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
      # If restriction is [cannot perform action]
      if @active_battler.restriction == 4
        # Clear battler being forced into action
        $game_temp.forcing_battler = nil
        # Shift to step 1
        @phase4_step = 1
        return
      end
    end
    # Clear target battlers
    @target_battlers = []
    case @active_battler.current_action.kind
    when 0
      if @active_battler.current_action.basic == 0
        if @active_battler.is_a?(Game_Actor)
          weapon_id = @active_battler.weapon_id
          if weapon_id != 0 && Options::Cbs::Weapon.include?(weapon_id) &&
             !Options::Cbs::Weapon[weapon_id][1]
            make_basic_action_result
          else
            @phase4_step = 7
            return
          end
        else
          @phase4_step = 7
          return
        end
      else
        make_basic_action_result
      end
    when 1
      skill_id = @active_battler.current_action.skill_id
      if Options::Cbs::Skill_Anim.include?(skill_id) &&
         Options::Cbs::Skill_Anim[skill_id][1]
        @phase4_step = 7
        return
      else
        make_skill_action_result
      end
    when 2
      make_item_action_result
    end
    # Shift to step 3
    if @phase4_step == 2
      @phase4_step = 3
    end
  end
  #--------------------------------------------------------------------------
  def update_phase4_step3
    # Animation for action performer (if ID is 0, then white flash)
    if @animation1_id == 0
      @active_battler.white_flash = true
    else
      @active_battler.animation_id = @animation1_id
      @active_battler.animation_hit = true
    end
    case @active_battler.current_action.kind
    when 0
      if @active_battler.current_action.basic == 0
        weapon_id = @active_battler.weapon_id
        if Options::Cbs::Weapon.include?(weapon_id)
          @active_battler.anim(Options::Cbs::Weapon[weapon_id][0]) if Options::Cbs::Animations.include?("Attack")
        else
          @active_battler.anim(Options::Cbs::Attack) if Options::Cbs::Animations.include?("Attack")
        end
      elsif @active_battler.current_action.basic == 1
        @active_battler.anim(Options::Cbs::Guard) if Options::Cbs::Animations.include?("Guard")
      end
    when 1
      skill_id = @active_battler.current_action.skill_id
      if Options::Cbs::Skill_Anim.include?(skill_id)
        @active_battler.anim(Options::Cbs::Skill_Anim[skill_id][0]) if Options::Cbs::Animations.include?("Skill")
      else
        @active_battler.anim(Options::Cbs::Skill) if Options::Cbs::Animations.include?("Skill")
      end
    when 2
      @active_battler.anim(Options::Cbs::Item) if Options::Cbs::Animations.include?("Item")
    end
    @wait_count = @active_battler.anim_wait
    # Shift to step 4
    @phase4_step = 4
  end
  #--------------------------------------------------------------------------
  def update_phase4_step4
    # Animation for target
    for target in @target_battlers
      target.animation_id = @animation2_id
      target.animation_hit = (target.damage != "Miss")
      
      if target.damage.is_a?(Numeric) && target.damage > 0
        if target.guarding?
          target.anim(Options::Cbs::Guard) if Options::Cbs::Animations.include?("Guard")
        else
          target.anim(Options::Cbs::Hit) if Options::Cbs::Animations.include?("Hit")
        end
      else
        if target.damage.is_a?(String)
          target.anim(Options::Cbs::Miss) if Options::Cbs::Animations.include?("Miss")
        end
      end
      
    end
    @wait_count = 8
    # Shift to step 5
    @phase4_step = 5
  end
  #--------------------------------------------------------------------------
  def update_phase4_step6
    # Clear battler being forced into action
    $game_temp.forcing_battler = nil
    # If common event ID is valid
    if @common_event_id > 0
      # Set up event
      common_event = $data_common_events[@common_event_id]
      $game_system.battle_interpreter.setup(common_event.list, 0)
    end
    # Shift to step 1
    if (@active_battler.current_action.kind == 0 &&
      @active_battler.current_action.basic == 0) or
      @active_battler.current_action.kind == 1
      @phase4_step = 8
    else
      @phase4_step = 1
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (main phase step 7 : move to)
  #--------------------------------------------------------------------------
  def update_phase4_step7
    if @active_battler.is_a?(Game_Actor)
      target = $game_troop.smooth_target_enemy(@active_battler.current_action.target_index)
      x = target.x + ($game_battle.mirror ? -(target.frame_width / 1.5): (target.frame_width / 1.5))
      y = target.y - (@active_battler.frame_height - target.frame_height)
      @active_battler.move_to(x, y) if Options::Cbs::Animations.include?("Move_to")
    else
      target = $game_party.smooth_target_actor(@active_battler.current_action.target_index)
      x = target.x + ($game_battle.mirror ? (target.frame_width / 1.5): -(target.frame_width / 1.5))
      y = target.y - (@active_battler.frame_height - target.frame_height)
      @active_battler.move_to(x, y) if Options::Cbs::Animations.include?("Move_to")
    end
    
    if @active_battler.x == @active_battler.target_x &&
      @active_battler.y == @active_battler.target_y
      if @active_battler.current_action.basic == 0
        make_basic_action_result
      else
        make_skill_action_result
      end
      @phase4_step = 3
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (main phase step 8 : move back)
  #--------------------------------------------------------------------------
  def update_phase4_step8
    @active_battler.move_to(@active_battler.start_x, @active_battler.start_y, 5) if Options::Cbs::Animations.include?("Move_back")

    if @active_battler.x == @active_battler.target_x &&
      @active_battler.y == @active_battler.target_y
      @phase4_step = 1
    end
  end
#==============================================================================
# ■ Sprite (Damage)
#------------------------------------------------------------------------------
module RPG
  class Sprite < ::Sprite
    #--------------------------------------------------------------------------
    def damage(value, critical)
      dispose_damage
      if value.is_a?(Numeric)
        damage_string = value.abs.to_s
      else
        damage_string = value.to_s
      end
      bitmap = Bitmap.new(160, 48)
      bitmap.font.name = "Arial Black"
      bitmap.font.size = 32
      bitmap.font.color.set(0, 0, 0)
      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
      if value.is_a?(Numeric) and value < 0
        bitmap.font.color.set(176, 255, 144)
      else
        bitmap.font.color.set(255, 255, 255)
      end
      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
      if critical
        bitmap.font.size = 20
        bitmap.font.color.set(0, 0, 0)
        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
        bitmap.font.color.set(255, 255, 255)
        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
      end
      @_damage_sprite = ::Sprite.new(self.viewport)
      @_damage_sprite.bitmap = bitmap
      @_damage_sprite.ox = 80
      @_damage_sprite.oy = 20
      @_damage_sprite.x = self.x + Options::Cbs::Default_frames[0] / 2
      @_damage_sprite.y = self.y - self.oy / 2
      @_damage_sprite.z = 3000
      @_damage_duration = 40
    end
  end
end
end
end
end
end

INSTRUCCIONES:

Nos vamos para posteriormente pegarlo en un nuevo script arriba de el que estábamos pegando antes (Animation_Battleback01). Aplicamos, Aceptamos y listo...

Ahora debemos de tener nuestra imagen animada de fondo como se explica en el script N°1
puede ser:

1)= Una imagen Con todos los frames unidos a sus lados
 (Como en el  que viene como ejemplo en la carpeta Battlebacks)

o

2)= Muchas imagenes (Frames) de diferentes animaciones como nombre : Pradera-1, Pradera-2, Pradera-3 etc...guardados en la carpeta Battlebacks.

cuando tengas lista tu imagen animada de fondo,
eligiremos el modo de imagen que empleamos para
ello nos vamos donde el script N°1
y buscamos:

Template = false

 true = si el fondo animado es una sola imagen (>>>> - >>>>)  o
 false = si son varias.
          En el segundo caso como explicado anteriormente, las
          imagenes tendrán que llamarse Nombredelfondo-1, Nombredelfondo-2 etc.
          Ejemplo: Pradera-1, Pradera-2, Pradera-3 ...

ahora definiremos la cantidad de frames máximos que poseen todas nuestras imágenes animadas.
para ello nos vamos donde el script N°1 y buscamos:


            @back_delay = 5

                y

            @back_frames = 8

y colocaremos la cantidad que tienen (@back_frame) y la velocidad que se van a reproducir o frecuenciar (@back_delay) (mientras menor valor, más rápido)
(Esto hará que sea los frames y la velocidad por defecto que otorgará el script).

Finalmente definiremos las imagenes que tendrán animación y cuales NO, o si las tienes todas para animarlas, para aquello en el editor de mapas crearemos un evento que nos activará o desactivará el efecto de animación.

Agregamos un Evento: insertamos el comando de llamar script y pegamos lo siguiente:

if $game_battle.back_animated
$game_battle.back_animated = false
$game_variables[001] = "Desactivado"
else
$game_battle.back_animated = true
$game_variables[001] = "Activado"
end

   Estó hará que active la animación de fondo de batalla...
   y Tambien sirve para Desactivarlo. cosa que cuando finalises la
   batalla, la vuelvas a desactivar con el mismo Texto anterior.

Cuando la imagen no tiene animación debes dejarlo desactivado, de lo contrario la  pantalla dará a negro con errores gráficos.

============================================================================

IMPORTANTE:
Existe el caso de colocar muchos fondos de batalla con
diferentes Frames (Unos duran más tiempo que otros).

Por ejemplo el que viene en la carpeta Battlebacks Tiene 8 frames
(Contando las animaciones diferentes >>,>>,>>) también está asignado
en el script como valor 8 de frames.

pero si queremos agregar un battlebacks de 10 frames (Como ejemplo) en el mapa, tenemos que agregar el comando de llamar script y dentro colocamos esto:

$game_battle.back_frames = ?

Siendo ? el valor núumero 10 que tenemos de ejemplo y si queremos volver a nuestro fondo de batalla de 8 frames debemos reemplazar ? por un 8 nuevamente de lo contrario la imagen dará error gráfico.

También si colocas el valor 1 puede servir para los fondos sin animación.
De igual manera es para cambiar la Velocidad de la frecuencia de frames, solo que en el evento usaremos este llamado de Script:

$game_battle.back_delay = ?

Siendo ? el valor de la velocidad que desees asignar

1= Maximo rapido      
5= Normal          
9= Lento
============================================================================

Para colocar el fondo de animación de Batalla es igual que el que se hace de manera Normal.

Crear evento:  Insertar comando:
Cambiar Gráficos de Mapa  :Gráficos de fondo de batalla

========================================================================

Bueno... eso sería Todo.  EL SCRIPT FUNCIONA AL 100%. GARANTIZADO
dependerá de los tipos de script que tengas instalados si llega ocurrir algún error.
o si tienes una partida guardada y comiensas desde ayi sin haber guardado con el
script instalado.

Los Creditos.... para "Kotfire" pero después de todo yo lo adapte para la batalla por defecto
y me costo bastante... yo diría que no hay creditos jajajaaa

DEMOSTRACIÓN
Para que se les aclare un poco la idea, nos vemos y ojala les agrade:

http://share.cherrytree.at/showfile-28237/fondo_de_batalla_animado.rar

==========================================================================
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 320

Gracias : 70

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.