Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] Active Time Battle System de MakirouAru

Ver el tema anterior Ver el tema siguiente Ir abajo

[RMXP] Active Time Battle System de MakirouAru

Mensaje por orochii el 2011-07-07, 04:46

Active Time Battle System (ATBS)
Autor: MakirouAru ; Versión: Cualquier RGSS10xx.dll (osea cualquier RMXP)

Descripción
Primero que todo, el script no es mío, tampoco de MakirouAru, sino es una recopilación (o debería decir dos xD) hechas por él, yo las he modificado, y unido. Lo he puesto porque por ahí preguntaron, lo encontré, me gustó =D (es simple pero muy efectivo, my dear friends :3), y pues quise hacerle propaganda. También busqué en su web (sin actividad al parecer desde el 2008 :/) y no encontré (ni tampoco busqué profundamente sinceramente) restricciones de uso, por lo que más adelante pondré las estándar/sentido común.

Bien, el sistema es una simple pero efectiva modificación del sistema default que sólo añade el modo ATB (Batalla en Tiempo Activo, sin detenimientos ni cortes entre turno y turno, etc... apelo a que conocen el término xD). Aparte de eso, no mucho más, tan sólo una leve modificación al fin de batalla, ya que añade una linda ventana de detalles al subir el nivel (detalles de los cambios en características).
Corrección: Trae más funciones, ver el script, ya que he añadido anotaciones para el uso de las que ameriten algún cambio o manejo de parte del usuario (osea, quien vaya a hacer uso del script).

Funcionalidades:
☺Añade un sencillo pero efectivo sistema ATB a la batalla default.
☺Agrega ventana de detalles al pasar de nivel (Level Up! Window)
☺Cambio en la visualización de la ventana de estados de batalla (barras de HP/SP, barra de ATB, etc).
☺Sistema de recuperación después de la batalla (depende de una variable, ver script para más datos).

Instrucciones
Pega el script en una nueva "página" sobre Main.

El scritp... scrit... script!
Código:

#==============================================================================
# ¦ New_Battle
#------------------------------------------------------------------------------
# Compiled By : MakirouAru
#Instrucciones en español por Orochii ;3.
#==============================================================================
#=~Índice Orochezco:~=
#-------Buscar "by xxxxx" usando Ctrl-F. El número de línea debe calzar.-------
#Línea 16-Battle_End_Recovery, CODIGO BUSQUEDA:-<by fukuyama, ÷‰ë Ý“y>-
#Línea 113-LevelUpWindow, CODIGO BUSQUEDA:-<by ÷‰ë Ý“y (*)>-
#Línea 326-SlipDamage Effect Customizer (% de daño por turno), CODIGO BUSQUEDA:-<by ÷‰ë Ý“y, fukuyama>-
#Línea 404-BattleCP (Núcleo del ATB), CODIGO BUSQUEDA:-<by ÷‰ë Ý“y, ˜aŠó, Jack-R>-
#Línea 928-BattleStatus Mejorado, CODIGO BUSQUEDA:-<by ÷‰ë Ý“y, TOMY>-
#
# ¥£¥ XRXS_BP 3. Ÿ—˜ŽžHP‰ñ•œ ver.1.01 ¥£¥
# -<by fukuyama, ÷‰ë Ý“y>-

# Battle_End_Recovery
#
# í“¬Œã‚̉ñ•œˆ—ƒ‚ƒWƒ…[ƒ‹
#
# Request: stay
# Script: fukuyama
# Test: ƒmƒRƒmŽq
#
# URL: http://www4.big.or.jp/~fukuyama/rgss/Battle_End_Recovery.txt
#
#Instrucciones orochiianas: Cambia el valor nil en @@recovery_rate_variable_id
#                por el número de variable que usarás para definir el % de
#                HP/MP que se recobrará después de batalla.
#                (Si nada ha cambiado, debería estar en la línea 30).

module Battle_End_Recovery

  module Scene_Battle_Module
 
  # ‰ñ•œ—¦•Ï”‚ÌID
  @@recovery_rate_variable_id = nil
 
  # ‰ñ•œ—¦‚̎擾
    def battle_end_recovery_rate
      if @@recovery_rate_variable_id.nil?
        @@recovery_rate_variable_id =
          $data_system.variables.index 'í“¬Œã‚̉ñ•œ—¦'
        if @@recovery_rate_variable_id.nil?
          @@recovery_rate_variable_id = false
        end
      end
      return 0 unless @@recovery_rate_variable_id
      return $game_variables[@@recovery_rate_variable_id]
    end
   
    # í“¬Œã‚̉ñ•œˆ—
    def battle_end_recovery
   
    # ‰ñ•œ—¦
      recovery_rate = battle_end_recovery_rate
     
      # ‰ñ•œ—¦•Ï”‚ª‚OˆÈŠO‚©‚ƒAƒNƒ^[‚ª¶‘¶‚µ‚Ä‚¢‚éê‡Aí“¬Œã‚̉ñ•œˆ—‚ðs‚¤
      if recovery_rate != 0 and not actor.dead?
     
        # ƒp[ƒeƒB‚̃AƒNƒ^[–ˆ‚Ƀ‹[ƒv
        $game_party.actors.each do |actor|
     
          # ‰ñ•œ—ŒvŽZ
          recovery_hp = (actor.maxhp / 100.0 * recovery_rate).truncate
          recovery_sp = (actor.maxsp / 100.0 * recovery_rate).truncate
     
          # ŽÀÛ‚ɉñ•œ
          actor.hp += recovery_hp
          actor.sp += recovery_sp
     
          # ƒAƒjƒ[ƒVƒ‡ƒ“Ý’è
          actor.damage = - recovery_hp
          actor.damage_pop = true
     
        end
     
        # ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ðXV
        @status_window.refresh
     
      end
    end
   
  end # module Scene_Battle_Module
end # module Battle_End_Recovery

#------------------------------
# í“¬ƒV[ƒ“‚̍Ēè‹`
#------------------------------
class Scene_Battle

  # Scene_Battle—pƒ‚ƒWƒ…[ƒ‹‚ðƒCƒ“ƒNƒ‹[ƒh
  include Battle_End_Recovery::Scene_Battle_Module
 
  # Œ³‚̃tƒF[ƒY‚TŠJŽn‚É•–¼‚ð‚‚¯‚é
  alias battle_end_recovery_original_start_phase5 start_phase5
 
  # ƒtƒF[ƒY‚TŠJŽn‚ðÄ’è‹`
  def start_phase5
 
    # í“¬Œã‚̉ñ•œˆ—‚ðŒÄ‚яo‚•
    battle_end_recovery
   
    # Œ³‚̃tƒF[ƒY‚TŠJŽn‚ðŒÄ‚яo‚•
    battle_end_recovery_original_start_phase5
   
  end
end

# Battle_End_Recovery
# ¥£¥ XRXS_BP10. LEVEL UP!ƒEƒBƒ“ƒhƒE ¥£¥
# -<by ÷‰ë Ý“y (*)>-

#Instrucciones orochiianas: Modifica la siguiente configuración según tu gusto.
$data_system_level_up_se = ""                      # ƒŒƒxƒ‹ƒAƒbƒvSEB""‚Å–³‚µB
$data_system_level_up_me = "Audio/ME/007-Fanfare01" # ƒŒƒxƒ‹ƒAƒbƒvME
$data_system_level_up_text = "¡SUBE DE NIVEL!"

#==============================================================================
# ¡ Window_LevelUpWindow
#------------------------------------------------------------------------------
# @ƒoƒgƒ‹I—¹ŽžAƒŒƒxƒ‹ƒAƒbƒv‚µ‚½ê‡‚ɃXƒe[ƒ^ƒX‚ð•\Ž¦‚•‚éƒEƒBƒ“ƒhƒE‚Å‚•B
#==============================================================================
class Window_LevelUpWindow < Window_Base
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
  #--------------------------------------------------------------------------
  def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
    super(0, 128, 160, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  end
  #--------------------------------------------------------------------------
  # œ ƒŠƒtƒŒƒbƒVƒ…
  #--------------------------------------------------------------------------
  def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.font.name = "Arial"
    self.contents.font.size = 14
    self.contents.draw_text( 0,  0, 160, 24, $data_system_level_up_text)
    self.contents.font.size = 18
    self.contents.draw_text( 0,  28, 160, 24, $data_system.words.hp)
    self.contents.draw_text( 0,  50, 160, 24, $data_system.words.sp)
    self.contents.font.size = 14
    self.contents.draw_text( 0,  72,  80, 24, $data_system.words.str)
    self.contents.draw_text( 0,  94,  80, 24, $data_system.words.dex)
    self.contents.draw_text( 0, 116,  80, 24, $data_system.words.agi)
    self.contents.draw_text( 0, 138,  80, 24, $data_system.words.int)
    self.contents.draw_text(92,  0, 128, 24, "->")
    self.contents.draw_text(76,  28, 128, 24, "=")
    self.contents.draw_text(76,  50, 128, 24, "=")
    self.contents.draw_text(76,  72, 128, 24, "=")
    self.contents.draw_text(76,  94, 128, 24, "=")
    self.contents.draw_text(76, 116, 128, 24, "=")
    self.contents.draw_text(76, 138, 128, 24, "=")
    self.contents.font.color = normal_color
    self.contents.draw_text( 0,  0,  88, 24, last_lv.to_s, 2)
    self.contents.draw_text( 0,  28,  72, 24, "+" + up_hp.to_s, 2)
    self.contents.draw_text( 0,  50,  72, 24, "+" + up_sp.to_s, 2)
    self.contents.draw_text( 0,  72,  72, 24, "+" + up_str.to_s, 2)
    self.contents.draw_text( 0,  94,  72, 24, "+" + up_dex.to_s, 2)
    self.contents.draw_text( 0, 116,  72, 24, "+" + up_agi.to_s, 2)
    self.contents.draw_text( 0, 138,  72, 24, "+" + up_int.to_s, 2)
    self.contents.font.size = 20
    self.contents.draw_text( 0,  0, 128, 24, actor.level.to_s, 2)
    self.contents.draw_text( 0,  26, 128, 24, actor.maxhp.to_s, 2)
    self.contents.draw_text( 0,  48, 128, 24, actor.maxsp.to_s, 2)
    self.contents.draw_text( 0,  70, 128, 24, actor.str.to_s, 2)
    self.contents.draw_text( 0,  92, 128, 24, actor.dex.to_s, 2)
    self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2)
    self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2)
  end
end
#==============================================================================
# ¡ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  # œ ’ljÁEŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
  #--------------------------------------------------------------------------
  attr_accessor :level_up_flags            # ¡SUBE DE NIVEL!•\Ž¦
end
#==============================================================================
# ¡ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # œ ’ljÁEŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
  #--------------------------------------------------------------------------
  attr_accessor :exp_gain_ban            # EXPŽæ“¾ˆêŽž‹ÖŽ~
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
  #--------------------------------------------------------------------------
  alias xrxs_bp10_initialize initialize
  def initialize
    @exp_gain_ban = false
    xrxs_bp10_initialize
  end
#--------------------------------------------------------------------------
# œ ƒXƒe[ƒg [EXP ‚ðŠl“¾‚Å‚«‚È‚¢] ”»’è
#--------------------------------------------------------------------------
  alias xrxs_bp10_cant_get_exp? cant_get_exp?
  def cant_get_exp?
    if @exp_gain_ban == true
      return true
    else
      return xrxs_bp10_cant_get_exp?
    end
  end
end
#==============================================================================
# ¡ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # œ ƒAƒtƒ^[ƒoƒgƒ‹ƒtƒF[ƒYŠJŽn
  #--------------------------------------------------------------------------
  alias xrxs_bp10_start_phase5 start_phase5
  def start_phase5
    # EXP Šl“¾‹ÖŽ~
    for i in 0...$game_party.actors.size
      $game_party.actors[i].exp_gain_ban = true
    end
    xrxs_bp10_start_phase5
    # EXP Šl“¾‹ÖŽ~‚̉ðœ
    for i in 0...$game_party.actors.size
      $game_party.actors[i].exp_gain_ban = false
    end
    # EXP‚ð‰Šú‰»
    @exp_gained = 0
    for enemy in $game_troop.enemies
      # Šl“¾ EXP‚ð’ljÁ        # ƒGƒlƒ~[‚ª‰B‚êó‘Ô‚Å‚È‚¢ê‡
      @exp_gained += enemy.exp if not enemy.hidden
    end
    # Ý’è
    @phase5_step      = 0
    @exp_gain_actor    = -1
    # ƒŠƒUƒ‹ƒgƒEƒBƒ“ƒhƒE‚ð•\Ž¦
    @result_window.y -= 64
    @result_window.visible = true
    # ƒŒƒxƒ‹ƒAƒbƒv”»’è‚Ö
    phase5_next_levelup
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒAƒtƒ^[ƒoƒgƒ‹ƒtƒF[ƒY)
  #--------------------------------------------------------------------------
  alias xrxs_bp10_update_phase5 update_phase5
  def update_phase5
    case @phase5_step
    when 1
      update_phase5_step1
    else
      xrxs_bp10_update_phase5
      # ƒŒƒxƒ‹ƒAƒbƒv‚µ‚Ä‚¢‚éê‡‚Í‹ §ƒoƒgƒ‹I—¹
      battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0
    end
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒAƒtƒ^[ƒoƒgƒ‹ƒtƒF[ƒY 1 : ƒŒƒxƒ‹ƒAƒbƒv)
  #--------------------------------------------------------------------------
  def update_phase5_step1
    # C ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
    if Input.trigger?(Input::C)
      # ƒEƒBƒ“ƒhƒE‚ð•Â‚¶‚ÄŽŸ‚̃AƒNƒ^[‚Ö
      @levelup_window.visible = false if @levelup_window != nil
      @status_window.level_up_flags[@exp_gain_actor] = false
      phase5_next_levelup
    end
  end
  #--------------------------------------------------------------------------
  # œ ŽŸ‚̃AƒNƒ^[‚̃Œƒxƒ‹ƒAƒbƒv•\Ž¦‚Ö
  #--------------------------------------------------------------------------
  def phase5_next_levelup
    begin
      # ŽŸ‚̃AƒNƒ^[‚Ö
      @exp_gain_actor += 1
      # ÅŒã‚̃AƒNƒ^[‚̏ꍇ
      if @exp_gain_actor >= $game_party.actors.size
        # ƒAƒtƒ^[ƒoƒgƒ‹ƒtƒF[ƒYŠJŽn
        @phase5_step = 0
        return
      end
      actor = $game_party.actors[@exp_gain_actor]
      if actor.cant_get_exp? == false
        # Œ»Ý‚Ì”\—Í’l‚ð•ÛŽ
        last_level = actor.level
        last_maxhp = actor.maxhp
        last_maxsp = actor.maxsp
        last_str = actor.str
        last_dex = actor.dex
        last_agi = actor.agi
        last_int = actor.int
        # ŒoŒ±’lŽæ“¾‚ÌŒˆ’è“IuŠÔ(“ä
        actor.exp += @exp_gained
        # ”»’è
        if actor.level > last_level
          # ƒŒƒxƒ‹ƒAƒbƒv‚µ‚½ê‡
          @status_window.level_up(@exp_gain_actor)
          if $data_system_level_up_se != ""
            Audio.se_stop
            Audio.se_play($data_system_level_up_se)
          end
          if $data_system_level_up_me != ""
            Audio.me_stop
            Audio.me_play($data_system_level_up_me)
          end
          @levelup_window = Window_LevelUpWindow.new(actor, last_level,
            actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str,
            actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int)
          @levelup_window.x = 160 * @exp_gain_actor
          @levelup_window.visible = true
          @phase5_wait_count = 40
          @phase5_step      =  1
          # ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ðƒŠƒtƒŒƒbƒVƒ…
          @status_window.refresh
          return
        end
      end
    end until false
  end
end
# ¥£¥ XRXS_17. ƒXƒŠƒbƒvƒ_ƒ[ƒW–hŒä^Œø‰Ê—ʏڍ׉» ver.1.51 ¥£¥
# -<by ÷‰ë Ý“y, fukuyama>-

=begin
#==============================================================================
# ¡ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # œ ƒXƒŠƒbƒvƒ_ƒ[ƒW‚ÌŒø‰Ê“K—p
  #--------------------------------------------------------------------------
  alias xrxs_bp7_slip_damage_effect slip_damage_effect
  def slip_damage_effect
    # ”’l‚̏‰Šú‰»
    slip_damage_percent = 0
    slip_damage_plus = 0
    # Œ»Ý•t‰Á‚³‚ê‚Ä‚¢‚éƒXƒe[ƒg‚Ì’†‚©‚çƒXƒŠƒbƒvƒ_ƒ[ƒW—L‚è‚̃‚ƒm‚ð’T‚·
    for i in @states
      if $data_states[i].slip_damage
        # ‚»‚̃Xƒe[ƒg‚ªŽ‚Á‚Ä‚¢‚éƒXƒŠƒbƒvƒ_ƒ[ƒW‚Ì
        # Lvƒvƒ‰ƒXƒXƒe[ƒg‚Ü‚½‚ÍLvƒ}ƒCƒiƒXƒXƒe[ƒg‚ð”»’èB
        for j in $data_states[i].plus_state_set
          if $data_states[j] != nil
            if $data_states[j].name =~ /^Veneno([0-9]+)\%/
              slip_damage_percent += $1.to_i
            elsif $data_states[j].name =~ /^Veneno([0-9]+)$/
              slip_damage_plus += $1.to_i
            end
          end
        end
        for j in $data_states[i].minus_state_set
          if $data_states[j] != nil
            if $data_states[j].name =~ /^Veneno([0-9]+)\%/
              slip_damage_percent -= $1.to_i
            elsif $data_states[j].name =~ /^Veneno([0-9]+)$/
              slip_damage_plus -= $1.to_i
            end
          end
        end
      end
    end
    if slip_damage_percent == 0 and slip_damage_plus == 0
      xrxs_bp7_slip_damage_effect
    else
      # –h‹ï‚ªƒXƒŠƒbƒv–hŒä‚ª‚ ‚éê‡‚ð”»’è
      for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
        armor = $data_armors[i]
        next if armor == nil
        for j in armor.guard_state_set
          if $data_states[j] != nil
            if $data_states[j].name =~ /^Veneno([0-9]+)\%/
              if slip_damage_percent > 0
                slip_damage_percent = [slip_damage_percent - $1.to_i, 0].max
              end
            end
            if $data_states[j].name =~ /^Veneno([0-9]+)$/
              if slip_damage_percent > 0
                slip_damage_plus = [slip_damage_plus - $1.to_i, 0].max
              end
            end
          end
        end
      end
      # ƒ_ƒ[ƒW‚ðÝ’è
      self.damage = self.maxhp * slip_damage_percent / 100 + slip_damage_plus
      # •ªŽU
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # HP ‚©‚çƒ_ƒ[ƒW‚ðŒ¸ŽZ
      self.hp -= self.damage
      # ƒƒ\ƒbƒhI—¹
      return true
    end
  end
end
=end
# ¥£¥ XRXS_BP 1. CP§“±“ü ver.15 ¥£¥
# -<by ÷‰ë Ý“y, ˜aŠó, Jack-R>-

#==============================================================================
# ¡ Scene_Battle_CP
#==============================================================================
class Scene_Battle_CP
  #--------------------------------------------------------------------------
  # œ ŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
  #--------------------------------------------------------------------------
  attr_accessor  :stop                  # CP‰ÁŽZƒXƒgƒbƒv
  #----------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»
  #----------------------------------------------------------------------------
  def initialize
    @battlers = []
    @cancel = false
    @agi_total = 0
    # ”z—ñ @count_battlers ‚ð‰Šú‰»
    @count_battlers = []
    # ƒGƒlƒ~[‚ð”z—ñ @count_battlers ‚ɒljÁ
    for enemy in $game_troop.enemies
      @count_battlers.push(enemy)
    end
    # ƒAƒNƒ^[‚ð”z—ñ @count_battlers ‚ɒljÁ
    for actor in $game_party.actors
      @count_battlers.push(actor)
    end
    for battler in @count_battlers
      @agi_total += battler.agi
    end
    for battler in @count_battlers
      battler.cp = [[65535 * (rand(15) + 85) / 100 * battler.agi / @agi_total * 4, 0].max, 65535].min
    end
  end
  #----------------------------------------------------------------------------
  # œ CPƒJƒEƒ“ƒg‚ÌŠJŽn
  #----------------------------------------------------------------------------
  def start
    if @cp_thread != nil then
      return
    end
    @cancel = false
    @stop = false
    # ‚±‚±‚©‚çƒXƒŒƒbƒh
    @cp_thread = Thread.new do
      while @cancel != true
        if @stop != true
          self.update # XV
          sleep(0.05)
        end
      end
    end
  # ‚±‚±‚܂ŃXƒŒƒbƒh
  end
  #----------------------------------------------------------------------------
  # œ CPƒJƒEƒ“ƒgƒAƒbƒv
  #----------------------------------------------------------------------------
  def update
    if @count_battlers != nil then
      for battler in @count_battlers
        # s“®o—ˆ‚È‚¯‚ê‚Ζ³Ž‹
        if battler.dead? == true #or battler.movable? == false then
          battler.cp = 0
          next
        end
        # ‚±‚±‚Ì 1.3‚ð•Ï‚¦‚邱‚ƂŁ«ƒXƒs[ƒh‚ð•ÏX‰Â”\B‚½‚¾‚µ¬”“_‚ÍŽg—p‚•‚邱‚ƁB
        battler.cp = [[battler.cp + 1.3 * 4096 * battler.agi / @agi_total, 0].max, 65535].min
      end
    end
  end
  #----------------------------------------------------------------------------
  # œ CPƒJƒEƒ“ƒg‚ÌŠJŽn
  #----------------------------------------------------------------------------
  def stop
    @cancel = true
    if @cp_thread != nil then
      @cp_thread.join
      @cp_thread = nil
    end
  end
end

#==============================================================================
# ¡ Game_Battler
#==============================================================================
class Game_Battler
  attr_accessor :now_guarding            # Œ»Ý–hŒä’†ƒtƒ‰ƒO
  attr_accessor :cp                      # Œ»ÝCP
  attr_accessor :slip_state_update_ban    # ƒXƒŠƒbƒvEƒXƒe[ƒgŽ©“®ˆ—‚Ì‹ÖŽ~
  #--------------------------------------------------------------------------
  # œ ƒRƒ}ƒ“ƒh“ü—͉”\”»’è
  #--------------------------------------------------------------------------
  def inputable?
    return (not @hidden and restriction <= 1 and @cp >=65535)
  end
  #--------------------------------------------------------------------------
  # œ ƒXƒe[ƒg [ƒXƒŠƒbƒvƒ_ƒ[ƒW] ”»’è
  #--------------------------------------------------------------------------
  alias xrxs_bp1_slip_damage? slip_damage?
  def slip_damage?
    return false if @slip_state_update_ban
    return xrxs_bp1_slip_damage?
  end
  #--------------------------------------------------------------------------
  # œ ƒXƒe[ƒgŽ©‘R‰ðœ (ƒ^[ƒ“‚²‚ƂɌĂяo‚µ)
  #--------------------------------------------------------------------------
  alias xrxs_bp1_remove_states_auto remove_states_auto
  def remove_states_auto
    return if @slip_state_update_ban
    xrxs_bp1_remove_states_auto
  end
end
#==============================================================================
# ¡ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # œ ƒZƒbƒgƒAƒbƒv
  #--------------------------------------------------------------------------
  alias xrxs_bp1_setup setup
  def setup(actor_id)
    xrxs_bp1_setup(actor_id)
    @hate = 100  # init-value is 100
    @cp = 0
    @now_guarding = false
    @slip_state_update_ban = false
  end
end
#==============================================================================
# ¡ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
  #--------------------------------------------------------------------------
  alias xrxs_bp1_initialize initialize
  def initialize(troop_id, member_index)
    xrxs_bp1_initialize(troop_id, member_index)
    @hate = 100  # init-value is 100
    @cp = 0
    @now_guarding = false
    @slip_state_update_ban = false
  end
end
#==============================================================================
# ¡ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # œ ŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
  #--------------------------------------------------------------------------
  attr_accessor  :update_cp_only                  # CPƒ[ƒ^[‚݂̂̍XV
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
  #--------------------------------------------------------------------------
  alias xrxs_bp1_initialize initialize
  def initialize
    @update_cp_only = false
    xrxs_bp1_initialize
  end
  #--------------------------------------------------------------------------
  # œ ƒŠƒtƒŒƒbƒVƒ…
  #--------------------------------------------------------------------------
  alias xrxs_bp1_refresh refresh
  def refresh
    if @update_cp_only == false
      xrxs_bp1_refresh
    end
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 160 + 4
      draw_actor_cp_meter(actor, actor_x, 96, 120, 0)
    end
  end
  #--------------------------------------------------------------------------
  def draw_actor_name(actor, x, y)
    self.contents.font.color = normal_color
    self.contents.font.size = 24
    self.contents.draw_text(x, y, 120, 32, actor.name)
  end
  #--------------------------------------------------------------------------
  # œ CPƒ[ƒ^[ ‚Ì•`‰æ
  #--------------------------------------------------------------------------
  def draw_actor_cp_meter(actor, x, y, width = 156, type = 0)
    self.contents.font.color = system_color
    self.contents.fill_rect(x-1, y+27, width+2,6, Color.new(0, 0, 0, 255))
    if actor.cp == nil
      actor.cp = 0
    end
    w = width * [actor.cp,65535].min / 65535
    self.contents.fill_rect(x, y+28, w,1, Color.new(255, 255, 128, 255))
    self.contents.fill_rect(x, y+29, w,1, Color.new(255, 255, 0, 255))
    self.contents.fill_rect(x, y+30, w,1, Color.new(192, 192, 0, 255))
    self.contents.fill_rect(x, y+31, w,1, Color.new(128, 128, 0, 255))
  end
end

#==============================================================================
# ¡ Scene_Battle
#==============================================================================
class Scene_Battle
  # ‚±‚±‚ÉŒø‰‰¹‚ðÝ’è‚•‚é‚ƁAƒAƒNƒ^[ƒRƒ}ƒ“ƒh‚ªƒ|ƒbƒv‚µ‚½‚Æ‚«‚ÉŒø‰‰¹‚ðÄ¶
  $data_system_command_up_se = ""
  #--------------------------------------------------------------------------
  # œ ƒoƒgƒ‹I—¹
  #    result : Œ‹‰ (0:Ÿ—˜ 1:”s–k 2:“¦‘–)
  #--------------------------------------------------------------------------
  alias xrxs_bp1_battle_end battle_end
  def battle_end(result)
    # CPƒJƒEƒ“ƒg’âŽ~
    @cp_thread.stop
    xrxs_bp1_battle_end(result)
  end
  #--------------------------------------------------------------------------
  # œ ƒvƒŒƒoƒgƒ‹ƒtƒF[ƒYŠJŽn
  #--------------------------------------------------------------------------
  alias xrxs_bp1_start_phase1 start_phase1
  def start_phase1
    @agi_total = 0
    @cp_thread = Scene_Battle_CP.new
    # ƒAƒNƒ^[ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚ðÄì¬
    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, "Huir"])
    @actor_command_window.y = 128
    @actor_command_window.back_opacity = 160
    @actor_command_window.active = false
    @actor_command_window.visible = false
    @actor_command_window.draw_item(4, $game_temp.battle_can_escape ? @actor_command_window.normal_color : @actor_command_window.disabled_color)
    xrxs_bp1_start_phase1
  end
  #--------------------------------------------------------------------------
  # œ ƒp[ƒeƒBƒRƒ}ƒ“ƒhƒtƒF[ƒYŠJŽn
  #--------------------------------------------------------------------------
  alias xrxs_bp1_start_phase2 start_phase2
  def start_phase2
    xrxs_bp1_start_phase2
    @party_command_window.active = false
    @party_command_window.visible = false
    # ŽŸ‚Ö
    start_phase3
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒp[ƒeƒBƒRƒ}ƒ“ƒhƒtƒF[ƒY)
  #--------------------------------------------------------------------------
  alias xrxs_bp1_update_phase2 update_phase2
  def update_phase2
    # C ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
    if Input.trigger?(Input::C)
      # ƒp[ƒeƒBƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚̃J[ƒ\ƒ‹ˆ’u‚Å•ªŠò
      case @party_command_window.index
      when 0  # í‚¤
        # Œˆ’è SE ‚ð‰‰‘t
        $game_system.se_play($data_system.decision_se)
        @cp_thread.start
        # ƒAƒNƒ^[ƒRƒ}ƒ“ƒhƒtƒF[ƒYŠJŽn
        start_phase3
      end
      return
    end
    xrxs_bp1_update_phase2
  end
  #--------------------------------------------------------------------------
  # œ ŽŸ‚̃AƒNƒ^[‚̃Rƒ}ƒ“ƒh“ü—Í‚Ö
  #--------------------------------------------------------------------------
  def phase3_next_actor
    # ƒ‹[ƒv
    begin
      # ƒAƒNƒ^[‚Ì–¾–ŃGƒtƒFƒNƒg OFF
      if @active_battler != nil
        @active_battler.blink = false
      end
      # ÅŒã‚̃AƒNƒ^[‚̏ꍇ
      if @actor_index == $game_party.actors.size-1
        # ƒƒCƒ“ƒtƒF[ƒYŠJŽn
        @cp_thread.start
        start_phase4
        return
      end
      # ƒAƒNƒ^[‚̃Cƒ“ƒfƒbƒNƒX‚ði‚ß‚é
      @actor_index += 1
      @active_battler = $game_party.actors[@actor_index]
      @active_battler.blink = true
      if @active_battler.inputable? == false
        @active_battler.current_action.kind = -1
      end
      # ƒAƒNƒ^[‚ªƒRƒ}ƒ“ƒh“ü—Í‚ðŽó‚¯•t‚¯‚È‚¢ó‘Ô‚È‚ç‚à‚¤ˆê“x
    end until @active_battler.inputable?
    @cp_thread.stop
    # ƒAƒNƒ^[ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚ðƒZƒbƒgƒAƒbƒv
    @active_battler.now_guarding = false
    phase3_setup_command_window
  end
  #--------------------------------------------------------------------------
  # œ ‘O‚̃AƒNƒ^[‚̃Rƒ}ƒ“ƒh“ü—Í‚Ö
  #--------------------------------------------------------------------------
  def phase3_prior_actor
    # ƒ‹[ƒv
    begin
      # ƒAƒNƒ^[‚Ì–¾–ŃGƒtƒFƒNƒg OFF
      if @active_battler != nil
        @active_battler.blink = false
      end
      # Å‰‚̃AƒNƒ^[‚̏ꍇ
      if @actor_index == 0
        # Å‰‚Ö–ß‚é
        start_phase3
        return
      end
      # ƒAƒNƒ^[‚̃Cƒ“ƒfƒbƒNƒX‚ð–ß‚•
      @actor_index -= 1
      @active_battler = $game_party.actors[@actor_index]
      @active_battler.blink = true
      # ƒAƒNƒ^[‚ªƒRƒ}ƒ“ƒh“ü—Í‚ðŽó‚¯•t‚¯‚È‚¢ó‘Ô‚È‚ç‚à‚¤ˆê“x
    end until @active_battler.inputable?
    @cp_thread.stop
    # ƒAƒNƒ^[ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚ðƒZƒbƒgƒAƒbƒv
    @active_battler.now_guarding = false
    phase3_setup_command_window
  end
  #--------------------------------------------------------------------------
  # œ ƒAƒNƒ^[ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚̃ZƒbƒgƒAƒbƒv
  #--------------------------------------------------------------------------
  alias xrxs_bp1_phase3_setup_command_window phase3_setup_command_window
  def phase3_setup_command_window
    # Œø‰‰¹‚̍ж
    Audio.se_play($data_system_command_up_se) if $data_system_command_up_se != ""
    # –ß‚•
    xrxs_bp1_phase3_setup_command_window
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒAƒNƒ^[ƒRƒ}ƒ“ƒhƒtƒF[ƒY : Šî–{ƒRƒ}ƒ“ƒh)
  #--------------------------------------------------------------------------
  alias xrxs_bsp1_update_phase3_basic_command update_phase3_basic_command
  def update_phase3_basic_command
    # C ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
    if Input.trigger?(Input::C)
      # ƒAƒNƒ^[ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚̃J[ƒ\ƒ‹ˆ’u‚Å•ªŠò
      case @actor_command_window.index
      when 4  # “¦‚°‚é
        if $game_temp.battle_can_escape
          # Œˆ’è SE ‚ð‰‰‘t
          $game_system.se_play($data_system.decision_se)
          # ƒAƒNƒVƒ‡ƒ“‚ðÝ’è
          @active_battler.current_action.kind = 0
          @active_battler.current_action.basic = 4
          # ŽŸ‚̃AƒNƒ^[‚̃Rƒ}ƒ“ƒh“ü—Í‚Ö
          phase3_next_actor
        else
          # ƒuƒU[ SE ‚ð‰‰‘t
          $game_system.se_play($data_system.buzzer_se)
        end
        return
      end
    end
    xrxs_bsp1_update_phase3_basic_command
  end
  #--------------------------------------------------------------------------
  # œ ƒƒCƒ“ƒtƒF[ƒYŠJŽn
  #--------------------------------------------------------------------------
  alias xrxs_bp1_start_phase4 start_phase4
  def start_phase4
    xrxs_bp1_start_phase4
    # ƒGƒlƒ~[ƒAƒNƒVƒ‡ƒ“ì¬
    for enemy in $game_troop.enemies
      if enemy.cp < 65535
        enemy.current_action.clear
        enemy.current_action.kind = -1 # ƒ^[ƒ“”ò‚΂µB
        next
      end
      enemy.make_action
    end
    # s“®‡˜ì¬
    make_action_orders
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒƒCƒ“ƒtƒF[ƒY ƒXƒeƒbƒv 1 : ƒAƒNƒVƒ‡ƒ“€”õ)
  #--------------------------------------------------------------------------
  alias xrxs_bp1_update_phase4_step1 update_phase4_step1
  def update_phase4_step1
    # ‰Šú‰»
    @phase4_act_continuation = 0
    # Ÿ”s”»’è
    if judge
      @cp_thread.stop
      # Ÿ—˜‚Ü‚½‚Í”s–k‚̏ꍇ : ƒƒ\ƒbƒhI—¹
      return
    end
    # –¢s“®ƒoƒgƒ‰[”z—ñ‚̐擪‚©‚çŽæ“¾
    @active_battler = @action_battlers[0]
    # ƒXƒe[ƒ^ƒXXV‚ðCP‚¾‚¯‚ÉŒÀ’èB
    @status_window.update_cp_only = true
    # ƒXƒe[ƒgXV‚ð‹ÖŽ~B
    @active_battler.slip_state_update_ban = true if @active_battler != nil
    # –ß‚•
    xrxs_bp1_update_phase4_step1
    # ‹ÖŽ~‚ð‰ðœ
    @status_window.update_cp_only = false
    @active_battler.slip_state_update_ban = false if @active_battler != nil
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒƒCƒ“ƒtƒF[ƒY ƒXƒeƒbƒv 2 : ƒAƒNƒVƒ‡ƒ“ŠJŽn)
  #--------------------------------------------------------------------------
  alias xrxs_bp1_update_phase4_step2 update_phase4_step2
  def update_phase4_step2
    # ‹ §ƒAƒNƒVƒ‡ƒ“‚Å‚È‚¯‚ê‚Î
    unless @active_battler.current_action.forcing
      # CP‚ª‘«‚è‚Ä‚¢‚È‚¢ê‡
      if @phase4_act_continuation == 0 and @active_battler.cp < 65535
        @phase4_step = 6
        return
      end
      # §–ñ‚ª [“G‚ð’íUŒ‚‚•‚é] ‚© [–¡•û‚ð’íUŒ‚‚•‚é] ‚̏ꍇ
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # ƒAƒNƒVƒ‡ƒ“‚ɍUŒ‚‚ðÝ’è
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
      # §–ñ‚ª [s“®‚Å‚«‚È‚¢] ‚̏ꍇ
      if @active_battler.restriction == 4
        # ƒAƒNƒVƒ‡ƒ“‹ §‘Ώۂ̃oƒgƒ‰[‚ðƒNƒŠƒA
        $game_temp.forcing_battler = nil
        if @phase4_act_continuation == 0 and @active_battler.cp >= 65535
          # ƒXƒe[ƒgŽ©‘R‰ðœ
          @active_battler.remove_states_auto
          # CPÁ”ï
          @active_battler.cp = [(@active_battler.cp - 65535),0].max
          # ƒXƒe[ƒ^ƒXƒEƒBƒ“ƒhƒE‚ðƒŠƒtƒŒƒbƒVƒ…
          @status_window.refresh
        end
        # ƒXƒeƒbƒv 1 ‚Ɉڍs
        @phase4_step = 1
        return
      end
    end
    # ƒAƒNƒVƒ‡ƒ“‚ÌŽí•‚Å•ªŠò
    case @active_battler.current_action.kind
    when 0
      # UŒ‚¥–hŒäE“¦‚°‚éE‰½‚à‚µ‚È‚¢Žž‚Ì‹¤’Á”ïCP
      @active_battler.cp -=    0 if @phase4_act_continuation == 0
    when 1
      # ƒXƒLƒ‹Žg—pŽž‚̏Á”ïCP
      @active_battler.cp -= 65535 if @phase4_act_continuation == 0
    when 2
      # ƒAƒCƒeƒ€Žg—pŽž‚̏Á”ïCP
      @active_battler.cp -= 65535 if @phase4_act_continuation == 0
    when -1
      # CP‚ª— ‚Ü‚Á‚Ä‚¢‚È‚¢
      @phase4_step = 6
      return
    end
    # CP‰ÁŽZ‚ðˆêŽž’âŽ~‚•‚é
    @cp_thread.stop = true
    # ƒXƒe[ƒgŽ©‘R‰ðœ
    @active_battler.remove_states_auto
    xrxs_bp1_update_phase4_step2
  end
  #--------------------------------------------------------------------------
  # œ Šî–{ƒAƒNƒVƒ‡ƒ“ Œ‹‰ì¬
  #--------------------------------------------------------------------------
  alias xrxs_bp1_make_basic_action_result make_basic_action_result
  def make_basic_action_result
    # UŒ‚‚̏ꍇ
    if @active_battler.current_action.basic == 0 and @phase4_act_continuation == 0
      @active_battler.cp -= 65535 # UŒ‚Žž‚ÌCPÁ”ï
    end
    # –hŒä‚̏ꍇ
    if @active_battler.current_action.basic == 1 and @phase4_act_continuation == 0
      @active_battler.cp -= 32767 # –hŒäŽž‚ÌCPÁ”ï
    end
    # “G‚Ì“¦‚°‚é‚̏ꍇ
    if @active_battler.is_a?(Game_Enemy) and
      @active_battler.current_action.basic == 2 and @phase4_act_continuation == 0
      @active_battler.cp -= 65535 # “¦‘–Žž‚ÌCPÁ”ï
    end
    # ‰½‚à‚µ‚È‚¢‚̏ꍇ
    if @active_battler.current_action.basic == 3 and @phase4_act_continuation == 0
      @active_battler.cp -= 32767 # ‰½‚à‚µ‚È‚¢Žž‚ÌCPÁ”ï
    end
    # “¦‚°‚é‚̏ꍇ
    if @active_battler.current_action.basic == 4 and @phase4_act_continuation == 0
      @active_battler.cp -= 65535 # “¦‘–Žž‚ÌCPÁ”ï
      # “¦‘–‰Â”\‚Å‚Í‚È‚¢ê‡
      if $game_temp.battle_can_escape == false
        # ƒuƒU[ SE ‚ð‰‰‘t
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Œˆ’è SE ‚ð‰‰‘t
      $game_system.se_play($data_system.decision_se)
      # “¦‘–ˆ—
      update_phase2_escape
      return
    end
    xrxs_bp1_make_basic_action_result
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒƒCƒ“ƒtƒF[ƒY ƒXƒeƒbƒv 5 : ƒ_ƒ[ƒW•\Ž¦)
  #--------------------------------------------------------------------------
  alias xrxs_bp1_update_phase4_step5 update_phase4_step5
  def update_phase4_step5
    # ƒXƒŠƒbƒvƒ_ƒ[ƒW
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      @active_battler.damage_pop = true
    end
    xrxs_bp1_update_phase4_step5
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒƒCƒ“ƒtƒF[ƒY ƒXƒeƒbƒv 6 : ƒŠƒtƒŒƒbƒVƒ…)
  #--------------------------------------------------------------------------
  alias xrxs_bp1_update_phase4_step6 update_phase4_step6
  def update_phase4_step6
    # CP‰ÁŽZ‚ðÄŠJ‚•‚é
    @cp_thread.stop = false
    # ƒwƒ‹ƒvƒEƒBƒ“ƒhƒE‚ð‰B‚•
    @help_window.visible = false
    xrxs_bp1_update_phase4_step6
  end
end
# ¥£¥ XRXS_BP 7. ƒoƒgƒ‹ƒXƒe[ƒ^ƒXEƒNƒŠƒAƒfƒUƒCƒ“ ver.1.02 ¥£¥
# -<by ÷‰ë Ý“y, TOMY>-

#==============================================================================
# ¡ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  # œ ŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
  #--------------------------------------------------------------------------
  attr_accessor :update_cp_only # CPƒ[ƒ^[‚݂̂̍XV
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
  #--------------------------------------------------------------------------
  alias xrxs_bp7_initialize initialize
  def initialize
    xrxs_bp7_initialize
    # «Full-View‚̏ꍇ‚͉º“ñs‚Ì # ‚ðÁ‚µ‚Ä‚‚¾‚³‚¢B
    #self.opacity = 0
    #self.back_opacity = 0
  end
  #--------------------------------------------------------------------------
  # œ ƒŠƒtƒŒƒbƒVƒ…
  #--------------------------------------------------------------------------
  alias xrxs_bp7_refresh refresh
  def refresh
    if @update_cp_only
      xrxs_bp7_refresh
      return
    end
    # •`ŽÊ‚ð‹ÖŽ~‚µ‚È‚ª‚ç–ß‚·
    @draw_ban = true
    xrxs_bp7_refresh
    # •`ŽÊ‚Ì‹ÖŽ~‚ð‰ðœ
    @draw_ban = false
    # •`ŽÊ‚ðŠJŽn
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 160 + 21
      # •àsƒLƒƒƒ‰ƒOƒ‰ƒtƒBƒbƒN‚Ì•`ŽÊ
      draw_actor_graphic(actor, actor_x - 9, 116)
      # HP/SPƒ[ƒ^[‚Ì•`ŽÊ
      draw_actor_hp_meter_line(actor, actor_x, 72, 96, 12)
      draw_actor_sp_meter_line(actor, actor_x, 104, 96, 12)
      # HP”’l‚Ì•`ŽÊ
      self.contents.font.size = 24 # HP/SP”’l‚Ì•Žš‚Ì‘å‚«‚³
      self.contents.font.color = actor.hp == 0 ? knockout_color :
      actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
      draw_shadow_text(actor_x-2, 58, 96, 24, actor.hp.to_s, 2)
      # SP”’l‚Ì•`ŽÊ
      self.contents.font.color = actor.sp == 0 ? knockout_color :
      actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
      draw_shadow_text(actor_x-2, 90, 96, 24, actor.sp.to_s, 2)
      # —pŒêuHPv‚Æ—pŒêuSPv‚Ì•`ŽÊ
      self.contents.font.size = 12 # —pŒêuHP/SPv‚Ì•Žš‚Ì‘å‚«‚³
      self.contents.font.color = system_color # —pŒêuHP/SPv‚Ì•Žš‚̐F
      draw_shadow_text(actor_x, 60, 96, 12, $data_system.words.hp)
      draw_shadow_text(actor_x, 92, 96, 12, $data_system.words.sp)
     
      draw_actor_state(actor, actor_x, 100)
    end
  end
end
#==============================================================================
# ¡ Window_Base
#==============================================================================
class Window_Base < Window
  #--------------------------------------------------------------------------
  # œ HPƒ[ƒ^[ ‚Ì•`‰æ
  #--------------------------------------------------------------------------
  def draw_actor_hp_meter_line(actor, x, y, width = 156, height = 4)
    w = width * actor.hp / actor.maxhp
    hp_color_1 = Color.new(255, 0, 0, 192)
    hp_color_2 = Color.new(255, 255, 0, 192)
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
    x -= 1
    y += (height/4).floor
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
    x -= 1
    y += (height/4).ceil
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
    x -= 1
    y += (height/4).ceil
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
  end
  #--------------------------------------------------------------------------
  # œ SPƒ[ƒ^[ ‚Ì•`‰æ
  #--------------------------------------------------------------------------
  def draw_actor_sp_meter_line(actor, x, y, width = 156, height = 4)
    w = width * actor.sp / actor.maxsp
    hp_color_1 = Color.new( 0, 0, 255, 192)
    hp_color_2 = Color.new( 0, 255, 255, 192)
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
    x -= 1
    y += (height/4).floor
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
    x -= 1
    y += (height/4).ceil
    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2)
    x -= 1
    y += (height/4).ceil
    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128))
    draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2)
  end
  #--------------------------------------------------------------------------
  # œ –¼‘O‚Ì•`‰æ
  #--------------------------------------------------------------------------
  alias xrxs_bp7_draw_actor_name draw_actor_name
  def draw_actor_name(actor, x, y)
    xrxs_bp7_draw_actor_name(actor, x, y) if @draw_ban != true
  end
  #--------------------------------------------------------------------------
  # œ ƒXƒe[ƒg‚Ì•`‰æ
  #--------------------------------------------------------------------------
  alias xrxs_bp7_draw_actor_state draw_actor_state
  def draw_actor_state(actor, x, y, width = 120)
    xrxs_bp7_draw_actor_state(actor, x, y, width) if @draw_ban != true
  end
  #--------------------------------------------------------------------------
  # œ HP ‚Ì•`‰æ
  #--------------------------------------------------------------------------
  alias xrxs_bp7_draw_actor_hp draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144)
    xrxs_bp7_draw_actor_hp(actor, x, y, width) if @draw_ban != true
  end
  #--------------------------------------------------------------------------
  # œ SP ‚Ì•`‰æ
  #--------------------------------------------------------------------------
  alias xrxs_bp7_draw_actor_sp draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    xrxs_bp7_draw_actor_sp(actor, x, y, width) if @draw_ban != true
  end
end
#==============================================================================
# ž ŠO•”ƒ‰ƒCƒuƒ‰ƒŠ
#==============================================================================
class Window_Base
  #--------------------------------------------------------------------------
  # œ ƒ‰ƒCƒ“•`‰æ by ÷‰ë Ý“y
  #--------------------------------------------------------------------------
  def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
    # •`ŽÊ‹——£‚ÌŒvŽZB‘å‚«‚ß‚É’¼ŠpŽž‚Ì’·‚³B
    distance = (start_x - end_x).abs + (start_y - end_y).abs
    # •`ŽÊŠJŽn
    if end_color == start_color
      for i in 1..distance
        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
        self.contents.fill_rect(x, y, width, width, start_color)
      end
    else
      for i in 1..distance
        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
        r = start_color.red * (distance-i)/distance + end_color.red * i/distance
        g = start_color.green * (distance-i)/distance + end_color.green * i/distance
        b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
        a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
        self.contents.fill_rect(x, y, width, width, Color.new(r, g, b, a))
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # œ ‰e•Žš•`‰æ by TOMY
  #--------------------------------------------------------------------------
  def draw_shadow_text(x, y, width, height, string, align = 0)
    # Œ³‚̐F‚ð•Û‘‚µ‚Ä‚¨‚
    color = self.contents.font.color.dup
    # •Žš‚ʼne•`‰æ
    self.contents.font.color = Color.new(0, 0, 0)
    self.contents.draw_text(x + 2, y + 2, width, height, string, align)
    # Œ³‚̐F‚É–ß‚µ‚Ä•`‰æ
    self.contents.font.color = color
    self.contents.draw_text(x, y, width, height, string, align)
  end
end
"EXTRA":

El siguiente script está debido a que no pude lograr hacer funcionar el que trae el script anterior. La función de éste es que, mediante un hash, se puedan definir el daño progresivo (slip damage) de los estados con esa función. Más información en el script.
Código:

#SLIP DAMAGE MODIFIER
#Creado por Orochii, como reemplazo a otro ya existente).
#No hay necesidad de créditos.

#Instrucciones:
#Utiliza el siguiente hash para definir la ID y el porcentaje respectivo del
#estado al que deseas cambiar su porcentaje de "daño progesivo". Si el estado usa
#slip_damage y no ha sido definido, usará el valor default, definido como ID 0 en
#el Hash.

#Respecto a colocación:
#Colócalo sobre Main. Revisa además, si ves que es necesario, las funciones y
#clases modificadas.

#Métodos modificados:
#Los siguientes son los cambios hechos en las clases, en el script.

#CREACIÓN
#-module OROCHII_SLIP_STATE

#MODIFICACIÓN
#-class Game_Battler:
# -Reescritura
#  slip_damage?
#  slip_damage_effect
# -Alias
#  initialize

#Ejemplos:
#SLIP_DAMAGE = {0=>5, 3=>3}
module OROCHII_SLIP_STATE
  SLIP_DAMAGE = {
                0=>5, #valor default
                1=>1500, #si el estado no tiene slip damage marcado en la base de datos, no sucederá nada
                3=>3  #valor para el estado de ID 3
                }
end

class Game_Battler
  include OROCHII_SLIP_STATE unless $@
 
  alias oz_initialize initialize
  def initialize
    @slip_id_asd = 0
    oz_initialize
  end
 
  def slip_damage?
    for i in @states
      if $data_states[i].slip_damage
        @slip_id_asd = i
        return true
      end
    end
    @slip_id_asd = 0
    return false
  end
 
  def slip_damage_effect
    # Set damage
    if OROCHII_SLIP_STATE::SLIP_DAMAGE.include?(@slip_id_asd)
      self.damage = (self.maxhp / 100) * OROCHII_SLIP_STATE::SLIP_DAMAGE[@slip_id_asd]
    elsif @slip_id_asd!=0
      self.damage = (self.maxhp / 100) * OROCHII_SLIP_STATE::SLIP_DAMAGE[0]
    else
      self.damage = 0
    end
    # Dispersion
    if self.damage.abs > 0
      amp = [self.damage.abs * 15 / 100, 1].max
      self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    # Subtract damage from HP
    self.hp -= self.damage
    # End Method
    return true
  end
end

Créditos
MakirouAru, quien hizo ambas compilaciones.
fukuyama/桜雅 在土, 勝利時HP回復 (Battle_End_Recovery)
桜雅 在土, LEVEL UP!ウィンドウ (LEVEL UP! Window)
桜雅 在土/fukuyama, スリップダメージ防御/効果量詳細化 (Slip Damage Defense)
桜雅 在土/和希/Jack-R, CP制導入 (CP System)
桜雅 在土/TOMY, バトルステータス・クリアデザイン (BattleStatus ClearDesign)

Y acrediten a mi perro, porque no lo veo desde el lunes (?).

Términos de uso
(Como he dicho anteriormente, no encontré los términos originales, por lo que lo siguiente puede no estar de acuerdo a especificaciones del autor original. Cualquier información al respecto será agradecida).
Sin embargo supongo que tampoco les matarán por seguir éstos términos x'D.


De uso libre en ámbitos no comerciales, bajo retribución en cuanto a mención (acreditar al autor). Para cuestiones comerciales, contactar con el autor (aunque esperen que no les conteste xD? ni idea D:U).

Espero les agrade, a mi sinceramente si, porque es simple, con lo necesario... etc.

Salut,
Orochii Zouveleki


Última edición por orochii el 2011-07-07, 20:44, editado 1 vez (Razón : actualización del post)
avatar
orochii
Reportero

0/3

Créditos 7794

Gracias : 462

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por Wecoc el 2011-07-07, 06:37

Pantallazo:


Pues sí que es simple sí, pero está muy bien. Buen aporte Orochii.
Este script creo que es justo el anterior al de Batalla Mejorada que hizo el mismo autor, aquí una screen: http://rpgcreative.net/rpgmaker/script/images/screen%20new%20combat.jpg

Se parecen mucho xD creo que este último ya está en el foro...


Última edición por Wecoc el 2011-07-09, 08:57, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por orochii el 2011-07-07, 19:18

No, si eso ya me ha clarificado algunas cosas x'D... arreglado apartado de créditos, y he hecho una compilación de ambas compilaciones de scripts de MakirouAru xD.
También he añadido a la descripción dos features que, como el lugar donde lo encontré era 0% informativo, no sabía que existían (a pesar que arreglé la jerarquía por tabulaciones porque estaba horriblemente desordenado para mi gusto... y no lo viiiiii... x'D).
Y aparte de eso, como no pude hacer funcionar debidamente una de las features (la del slip-damage definido por nombre del estado), añadí un pequeño mod en el post, hecho en un ratito por mí, aunque más feo :/, porque funciona por configuración dentro del script xD (con un Hash). Ver el script para más información.

Bueno eso, salut, voy a actualizar el post,
Orochii Zouveleki
avatar
orochii
Reportero

0/3

Créditos 7794

Gracias : 462

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por UmbriaChronicles el 2015-01-06, 14:59

@orochii escribió:No, si eso ya me ha clarificado algunas cosas x'D... arreglado apartado de créditos, y he hecho una compilación de ambas compilaciones de scripts de MakirouAru xD.
También he añadido a la descripción dos features que, como el lugar donde lo encontré era 0% informativo, no sabía que existían (a pesar que arreglé la jerarquía por tabulaciones porque estaba horriblemente desordenado para mi gusto... y no lo viiiiii... x'D).
Y aparte de eso, como no pude hacer funcionar debidamente una de las features (la del slip-damage definido por nombre del estado), añadí un pequeño mod en el post, hecho en un ratito por mí, aunque más feo :/, porque funciona por configuración dentro del script xD (con un Hash). Ver el script para más información.

Bueno eso, salut, voy a actualizar el post,
Orochii Zouveleki


Gracias por el script Orochii. Por cierto, ¿existe alguna forma de que la barra ATB se llene más lentamente?
avatar
UmbriaChronicles
Novato
Novato

0/3

Créditos 76

Gracias : 2

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por orochii el 2015-01-06, 21:13

Hay dos formas, pero te comparto la más sencilla que, según mi criterio, debería funcionar. Busca esta línea:
Código:
sleep(0.05)

Cámbiala por esto:
Código:
sleep(0.10)

Teóricamente, eso haría que cargue a la mitad de la velocidad. Según mis cálculos sin embargo, este cambio sólo hará diferencia si usas valores con incrementos de 0.025 por *razones*... O directamente, podría no funcionar.
RAZONES:
RMXP funciona a 40FPS. El juego se congela mientras espera al módulo gráfico, que maneja este ratio de cuadros por segundo.
1/40 = 0.025. Cada segundo hay 40 cuadros, cada cuadro dura 0.025 segundos.
La parte lógica en el juego, manejada dentro del hilo principal de la escena, sólo verá y tomará en cuenta los cambios en el valor del ATB en esos momentos donde el módulo gráfico da visto bueno para que siga ejecutándose el programa. Los Threads funcionan teóricamente por fuera de eso, sin embargo no he logrado comprobarlo nunca...

La otra solución es en ésta línea:
Código:
battler.cp = [[battler.cp + 1.3 * 4096 * battler.agi / @agi_total, 0].max, 65535].min

Ésta si es un hecho funciona, y es simplemente cambiar otro valor numérico. Para no enredarte la vida, el valor que recomiendo cambiar es el 1.3 que está justo antes del 4096. Un ejemplo de cómo quedaría es así:

Código:
battler.cp = [[battler.cp + 0.8 * 4096 * battler.agi / @agi_total, 0].max, 65535].min

Eso haría el ATB ir a aproximadamente 1/3 más lento. xD.
avatar
orochii
Reportero

0/3

Créditos 7794

Gracias : 462

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por UmbriaChronicles el 2015-01-07, 21:15

Entiendo, aunque imagino que eso afectará tanto a la velocidad de mi barra ATB como a la velocidad de la barra de los enemigos, así que no apreciaré el efecto (más que sentir que los combates transcurren más lentamente). Lo que quería era que los enemigos atacaran con un poco más de frecuencia, porque veo que los héroes atacan varias veces en el mismo tiempo que los enemigos atacan una sola vez.

También he estado probando el script de regenerar vida progresivamente. ¡Es genial! Se me ocurrió que quizás podría modificarse para crear habilidades que regeneren SP en lugar de HP, y también SP y HP simultáneamente. ¿Es posible?

Gracias!
avatar
UmbriaChronicles
Novato
Novato

0/3

Créditos 76

Gracias : 2

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por orochii el 2015-01-09, 20:59

Ah, pos si lo que quieres es balancear la frecuencia de los ataques de los enemigos y aliados, basta con jugar con los valores de Agilidad de cada uno.

Juega con ese valor y ya :V.
avatar
orochii
Reportero

0/3

Créditos 7794

Gracias : 462

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por UmbriaChronicles el 2015-01-10, 16:36

@orochii escribió:Ah, pos si lo que quieres es balancear la frecuencia de los ataques de los enemigos y aliados, basta con jugar con los valores de Agilidad de cada uno.

Juega con ese valor y ya :V.


Ah ya veo, la velocidad de la barra ATB depende de la agilidad. Muchas gracias :)
avatar
UmbriaChronicles
Novato
Novato

0/3

Créditos 76

Gracias : 2

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por UmbriaChronicles el 2015-01-18, 11:33

Hola otra vez Orochii. Me he dado cuenta de que en este sistema, cuando se te llena la barra ATB y es tu turno de atacar, la batalla se detiene hasta que seleccionas tu acción. Estaba pensando en si hay algún modo de toquetear el script para que cuando sea tu turno de atacar, el combate no se pause, sino que los enemigos continúen con su ataque. No se si habrás jugado, pero es el sistema de Final Fantasy IV.

Un saludo!
avatar
UmbriaChronicles
Novato
Novato

0/3

Créditos 76

Gracias : 2

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por orochii el 2015-01-18, 13:40

Sí, lo sé, conozco esa funcionalidad. Y pues... me temo que tendré que decir que no. Este script no contempla la batalla activa activa xD (?). Yo he implementado esa funcionalidad, para mi propio juego, y... sé lo que implica x.x y los miles de bugs que me causó de empezar a modificar un ATB parecido a este para hacer eso que mencionas...

Hay que modificar el cómo funciona el ciclo principal del combate, hacer que ciertas "fases" de batalla se ejecuten siempre, y con eso vienen problemas... Entonces, diré que mejor no, que si buscas eso, busques un script que lo haga directamente. Que deben de haber :VV.

Salut!
avatar
orochii
Reportero

0/3

Créditos 7794

Gracias : 462

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por UmbriaChronicles el 2015-01-18, 17:08

@orochii escribió:Sí, lo sé, conozco esa funcionalidad. Y pues... me temo que tendré que decir que no. Este script no contempla la batalla activa activa xD (?). Yo he implementado esa funcionalidad, para mi propio juego, y... sé lo que implica x.x y los miles de bugs que me causó de empezar a modificar un ATB parecido a este para hacer eso que mencionas...

Hay que modificar el cómo funciona el ciclo principal del combate, hacer que ciertas "fases" de batalla se ejecuten siempre, y con eso vienen problemas... Entonces, diré que mejor no, que si buscas eso, busques un script que lo haga directamente. Que deben de haber :VV.

Salut!


Entiendo jajaja. ¡Gracias!
avatar
UmbriaChronicles
Novato
Novato

0/3

Créditos 76

Gracias : 2

Volver arriba Ir abajo

Re: [RMXP] Active Time Battle System de MakirouAru

Mensaje por Contenido patrocinado


Contenido patrocinado


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.