ABS (Action Battle system)

Nguyen_Kain

Quậy hết mình
Moderator
Tạo một script có tên XRXS System và ABS đưa 2 cái này vào

Sưu tầm bởi "dude666" in Japanese Web

Mã:
#==============================================================================
# ■ XRXS.RGSS
#------------------------------------------------------------------------------
# Created by 桜雅 在土
#==============================================================================

#==============================================================================
# □ カスタマイズポイント
#==============================================================================
 class Game_Battler
  # 「乗算属性修正」
  # ("特殊効果詰め合わせ"使用時は true にする必要があります。falseだと「最高倍率」)
  ELEMENT_CORRECT_BY_MULTI = true   
end
class Game_Actor < Game_Battler
  # 「スキル使用可能条件をスキルを習得しているか否かに依存しない」(falseだと依存)
  INDEPEND_SKILL_USABLE_ON_LEARNED = true
end
class Window_Skill < Window_Selectable
  # 「消費SP0を隠す」(falseにすると、"スキル名    : 0"とゼロを表示します)
  HIDE_ZERO_SP_COST = true
end
#==============================================================================
=begin
 前書き
    これはRGSSをXMS.RPGツクールXPスクリプトシェルフを
        より開発しやすくする為に作られた修正の詰め合わせです。
 コピー場所
    「Scene_Debugより下でMainより上。
     スクリプトシェルフ等を利用している場合はそれら全てより上。」
        ※Scene_Debug以上を書き換えている場合、
          それらの変更が無効になってしまう場合があります。
  修正内容---------------------------------------------------------------------
  
    修正/追加 部分
      Game_Battler         属性修正の計算「乗算属性修正」への対応
      Game_Actor           「スキル使用可能条件」への対応
                           オートステートの更新
    Window_Item          @column_maxへの対応
    Window_SKill         @column_maxへの対応
                           SP消費 0 を表示させない機能を搭載。
    Window_EquipItem     @column_maxへの対応
    Window_ShopSell      @column_maxへの対応
     Scene_Map            戦闘開始時のBGM停止を削除
                           同じBGMの場合は引き続きの演奏が出来る様に修正。
      Scene_Battle         バトルメッセージ処理軽減。
                           バトル終了時にMEをフェードアウト後に停止予約
      
    リファクタリング 部分
      Game_Actor           X位置のシフト値
      Window_Item          武器などの@dataへのプッシュ
      Window_MenuStatus    draw_actor_menu_status
      Window_EquipItem     武器などの@dataへのプッシュ
      Window_ShopSell      武器などの@dataへのプッシュ
      Window_BattleStatus  draw_actor_battle_status
      Scene_Equip          装備変更後のパラメータを取得 1~4
                           実際に装着
                           (追加)refresh軽量化
      Scene_Battle         make_basic_action_target_set
                           battle_exp
                           battle_gold
      
    追加モジュール
      XRXS_Check_ElementName_Set 属性名判定
      
  -------------------------------------------------------------修正内容ここまで
=end
#------------------------------------------------------------------------------
#
#
# ▽ 修正/追加 部分
#
#
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 属性修正の計算 + 倍率計算式
  #--------------------------------------------------------------------------
  alias xrxs_rgss_amendcustomize_elements_correct elements_correct
  def elements_correct(element_set)
    if ELEMENT_CORRECT_BY_MULTI
      # 無属性の場合 100 を返す
      return 100 if element_set == []
      # 与えられた属性のレートを全て乗算
      result = 100
      for i in element_set
        result *= self.element_rate(i) / 100.0
      end
      return result.to_i
    else
      return xrxs_rgss_amendcustomize_elements_correct
    end
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルの使用可能判定 + 習得判定無効化設定可
  #--------------------------------------------------------------------------
  def skill_can_use?(skill_id)
    # INDEPEND_SKILL_USABLE_ON_LEARNED が true であればスキル習得判定を飛ばす
    if not skill_learn?(skill_id) and not INDEPEND_SKILL_USABLE_ON_LEARNED
      return false
    end
    return super
  end
  #--------------------------------------------------------------------------
  # ● オートステートの更新
  #     old_armor : 外した防具
  #     new_armor : 装備した防具
  #--------------------------------------------------------------------------
  def update_auto_state(old_armor, new_armor)
    # 外した防具のオートステートを強制解除
    if old_armor != nil and old_armor.auto_state_id != 0
      # 外す防具のオートステートが、
      # 他の装備中の防具のオートステートと一致する場合、解除を行わない
      bool = armors_auto_state_include?(old_armor)
      unless bool
        remove_state(old_armor.auto_state_id, true)
      end
    end
    # 装備した防具のオートステートを強制付加
    if new_armor != nil and new_armor.auto_state_id != 0
      add_state(new_armor.auto_state_id, true)
    end
  end
  #--------------------------------------------------------------------------
  # ● 指定の防具のオートステートが現在装備中の防具のオートステートに含まれるか?
  #--------------------------------------------------------------------------
  def armors_auto_state_include?(old_armor)
    return false if old_armor.nil?
    bool  = false
    # 現在装備中の防具を取得
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    # 外された箇所を特定
    case old_armor
    when armor1
      current_armor = armor1
    when armor2
      current_armor = armor2
    when armor3
      current_armor = armor3
    when armor4
      current_armor = armor4
    end
    # 判定
    if current_armor != armor1 and !armor1.nil?
      bool |= (old_armor.auto_state_id == armor1.auto_state_id)
    end
    if current_armor != armor2 and !armor2.nil?
      bool |= (old_armor.auto_state_id == armor2.auto_state_id)
    end
    if current_armor != armor3 and !armor3.nil?
      bool |= (old_armor.auto_state_id == armor3.auto_state_id)
    end
    if current_armor != armor4 and !armor4.nil?
      bool |= (old_armor.auto_state_id == armor4.auto_state_id)
    end
    return bool
  end
end
#==============================================================================
# ■ Window_Item
#==============================================================================
class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 項目の描画 + @column_maxへの対応
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % @column_max * (288 + 32)
    y = index / @column_max * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end
#==============================================================================
# ■ Window_EquipItem
#==============================================================================
class Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 項目の描画 + @column_maxへの対応
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    x = 4 + index % @column_max * (288 + 32)
    y = index / @column_max * 32
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end
#==============================================================================
# ■ Window_ShopSell
#==============================================================================
class Window_ShopSell < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    # 売却可能なら通常文字色に、そうでないなら無効文字色に設定
    if item.price > 0
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % @column_max * (288 + 32)
    y = index / @column_max * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
  #--------------------------------------------------------------------------
  # ● バトルの呼び出し + 同BGM連続再生
  #--------------------------------------------------------------------------
  def call_battle
    # バトル呼び出しフラグをクリア
    $game_temp.battle_calling = false
    # メニュー呼び出しフラグをクリア
    $game_temp.menu_calling = false
    $game_temp.menu_beep = false
    # エンカウント カウントを作成
    $game_player.make_encounter_count
    # マップ BGM を記憶し、BGM を停止
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # バトル開始 SE を演奏
    $game_system.se_play($data_system.battle_start_se)
    # バトル BGM を演奏
    $game_system.bgm_play($game_system.battle_bgm)
    # プレイヤーの姿勢を矯正
    $game_player.straighten
    # バトル画面に切り替え
    $scene = Scene_Battle.new
  end
end
    #$game_system.bgm_stop #←ココをコメントアウトしました
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 + バトルメッセージ表示軽量化
  #--------------------------------------------------------------------------
  def update
    # バトルイベント実行中の場合
    if $game_system.battle_interpreter.running?
      # インタプリタを更新
      $game_system.battle_interpreter.update
      # アクションを強制されているバトラーが存在しない場合
      if $game_temp.forcing_battler == nil
        # バトルイベントの実行が終わった場合
        unless $game_system.battle_interpreter.running?
          # 戦闘継続の場合、バトルイベントのセットアップを再実行
          unless judge
            setup_battle_event
          end
        end
        # アフターバトルフェーズでなければ
        if @phase != 5 and (not $game_temp.message_window_showing) # ←ココ
          # ステータスウィンドウをリフレッシュ
          @status_window.refresh
        end
      end
    end
    # システム (タイマー)、画面を更新
    $game_system.update
    $game_screen.update
    # タイマーが 0 になった場合
    if $game_system.timer_working and $game_system.timer == 0
      # バトル中断
      $game_temp.battle_abort = true
    end
    # ウィンドウを更新
    @help_window.update
    @party_command_window.update
    @actor_command_window.update
    @status_window.update
    @message_window.update
    # スプライトセットを更新
    @spriteset.update
    # トランジション処理中の場合
    if $game_temp.transition_processing
      # トランジション処理中フラグをクリア
      $game_temp.transition_processing = false
      # トランジション実行
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    # メッセージウィンドウ表示中の場合
    if $game_temp.message_window_showing
      return
    end
    # エフェクト表示中の場合
    if @spriteset.effect?
      return
    end
    # ゲームオーバーの場合
    if $game_temp.gameover
      # ゲームオーバー画面に切り替え
      $scene = Scene_Gameover.new
      return
    end
    # タイトル画面に戻す場合
    if $game_temp.to_title
      # タイトル画面に切り替え
      $scene = Scene_Title.new
      return
    end
    # バトル中断の場合
    if $game_temp.battle_abort
      # バトル開始前の BGM に戻す
      $game_system.bgm_play($game_temp.map_bgm)
      # バトル終了
      battle_end(1)
      return
    end
    # ウェイト中の場合
    if @wait_count > 0
      # ウェイトカウントを減らす
      @wait_count -= 1
      return
    end
    # アクションを強制されているバトラーが存在せず、
    # かつバトルイベントが実行中の場合
    if $game_temp.forcing_battler == nil and
       $game_system.battle_interpreter.running?
      return
    end
    # フェーズによって分岐
    case @phase
    when 1  # プレバトルフェーズ
      update_phase1
    when 2  # パーティコマンドフェーズ
      update_phase2
    when 3  # アクターコマンドフェーズ
      update_phase3
    when 4  # メインフェーズ
      update_phase4
    when 5  # アフターバトルフェーズ
      update_phase5
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル終了 + 戦闘勝利MEフェードアウト
  #--------------------------------------------------------------------------
  def battle_end(result)
    # 戦闘中フラグをクリア
    $game_temp.in_battle = false
    # パーティ全員のアクションをクリア
    $game_party.clear_actions
    # バトル用ステートを解除
    for actor in $game_party.actors
      actor.remove_states_battle
    end
    # エネミーをクリア
    $game_troop.enemies.clear
    # バトル コールバックを呼ぶ
    if $game_temp.battle_proc != nil
      $game_temp.battle_proc.call(result)
      $game_temp.battle_proc = nil
    end
    # MEの停止
    Audio.me_fade(1000)
    # ここからスレッド
    @me_fade_thread = Thread.new do
      sleep(0.25)
      Audio.me_stop
      @me_fade_thread.kill
    end
    # ここまでスレッド    
    # マップ画面に切り替え
    $scene = Scene_Map.new
  end
end



#------------------------------------------------------------------------------
#
#
# ▽ リファクタリング 部分
#
#
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 防御の効果適用
  #--------------------------------------------------------------------------
  def guarding_effect(damage)
    return damage / 2
  end
  #--------------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #     attacker : 攻撃者 (バトラー)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # クリティカルフラグをクリア
    self.critical = false
    # 第一命中判定
    hit_result = (rand(100) < attacker.hit)
    # 命中の場合
    if hit_result == true
      # 基本ダメージを計算
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # 属性修正
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # ダメージの符号が正の場合
      if self.damage > 0
        # クリティカル修正
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # 防御修正
        if self.guarding?
          self.damage = guarding_effect(self.damage)
        end
      end
      # 分散
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 第二命中判定
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # 命中の場合
    if hit_result == true
      # ステート衝撃解除
      remove_states_shock
      # HP からダメージを減算
      self.hp -= self.damage
      # ステート変化
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # ミスの場合
    else
      # ダメージに "Miss" を設定
      self.damage = "Miss"
      # クリティカルフラグをクリア
      self.critical = false
    end
    # メソッド終了
    return true
  end
  #--------------------------------------------------------------------------
  # ● スキルの基本ダメージ計算
  #--------------------------------------------------------------------------
  def cals_skill_damage(user, skill)
    # 威力を計算
    power = skill.power + user.atk * skill.atk_f / 100
    if power > 0
      power -= self.pdef * skill.pdef_f / 200
      power -= self.mdef * skill.mdef_f / 200
      power = [power, 0].max
    end
    # 倍率を計算
    rate = 20
    rate += (user.str * skill.str_f / 100)
    rate += (user.dex * skill.dex_f / 100)
    rate += (user.agi * skill.agi_f / 100)
    rate += (user.int * skill.int_f / 100)
    # 基本ダメージを計算
    return power * rate / 20    
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # クリティカルフラグをクリア
    self.critical = false
    # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、
    # またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # メソッド終了
      return false
    end
    # 有効フラグをクリア
    effective = false
    # コモンイベント ID が有効の場合は有効フラグをセット
    effective |= skill.common_event_id > 0
    # 第一命中判定
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # 不確実なスキルの場合は有効フラグをセット
    effective |= hit < 100
    # 命中の場合
    if hit_result == true
      # スキルの基本ダメージの計算
      self.damage = cals_skill_damage(user, skill)
      # 属性修正
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # ダメージの符号が正の場合
      if self.damage > 0
        # 防御修正
        if self.guarding?
          self.damage = guarding_effect(self.damage)
        end
      end
      # 分散
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 第二命中判定
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # 不確実なスキルの場合は有効フラグをセット
      effective |= hit < 100
    end
    # 命中の場合
    if hit_result == true
      # 威力 0 以外の物理攻撃の場合
      if skill.power != 0 and skill.atk_f > 0
        # ステート衝撃解除
        remove_states_shock
        # 有効フラグをセット
        effective = true
      end
      # HP からダメージを減算
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # ステート変化
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # 威力が 0 の場合
      if skill.power == 0
        # ダメージに空文字列を設定
        self.damage = ""
        # ステートに変化がない場合
        unless @state_changed
          # ダメージに "Miss" を設定
          self.damage = "Miss"
        end
      end
    # ミスの場合
    else
      # ダメージに "Miss" を設定
      self.damage = "Miss"
    end
    # 戦闘中でない場合
    unless $game_temp.in_battle
      # ダメージに nil を設定
      self.damage = nil
    end
    # メソッド終了
    return effective
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標の取得
  #--------------------------------------------------------------------------
  def screen_x
    # パーティ内の並び順から X 座標を計算して返す
    if self.index != nil
      return self.index * screen_x_shift + 80
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標のパーティ人数によるシフトの量
  #--------------------------------------------------------------------------
  def screen_x_shift
    return 160
  end
end
#==============================================================================
# ■ Window_Selectable
#==============================================================================
class Window_Selectable < Window_Base
  #--------------------------------------------------------------------------
  # ● 一行の高さ
  #--------------------------------------------------------------------------
  def row_height
    return 32
  end
  #--------------------------------------------------------------------------
  # ● 先頭の行の取得
  #--------------------------------------------------------------------------
  def top_row
    # ウィンドウ内容の転送元 Y 座標を、1 行の高さで割る
    return self.oy / row_height
  end
  #--------------------------------------------------------------------------
  # ● 先頭の行の設定
  #     row : 先頭に表示する行
  #--------------------------------------------------------------------------
  def top_row=(row)
    # row が 0 未満の場合は 0 に修正
    if row < 0
      row = 0
    end
    # row が row_max - 1 超の場合は row_max - 1 に修正
    if row > row_max - 1
      row = row_max - 1
    end
    # row に 1 行の高さを掛け、ウィンドウ内容の転送元 Y 座標とする
    self.oy = row * row_height
  end
end
#==============================================================================
# ■ Window_MenuStatus
#==============================================================================
class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 一行の高さ
  #--------------------------------------------------------------------------
  def row_height
    return 116
  end
  #--------------------------------------------------------------------------
  # ● 一人当たりの描写部分のサイズ
  #--------------------------------------------------------------------------
  def drawable_box_size
    return 96
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      x = 64
      y = i * row_height
      actor = $game_party.actors[i]
      draw_actor_menu_status(actor, x, y)
    end
  end
  #--------------------------------------------------------------------------
  # ● メニューステータス用アクターステータスの描写
  #--------------------------------------------------------------------------
  def draw_actor_menu_status(actor, x, y)
    # 描写可能なサイズを取得
    size = drawable_box_size
    # 描写
    draw_actor_graphic(actor, x - 40, y + size*5/6)
    draw_actor_name(actor, x, y)
    draw_actor_class(actor, x + 144, y)
    draw_actor_level(actor, x, y + size/2 - 16)
    draw_actor_state(actor, x + 90, y + size/2 - 16)
    draw_actor_exp(actor, x, y + size*5/6 - 16)
    draw_actor_hp(actor, x + 236, y + size/2 - 16)
    draw_actor_sp(actor, x + 236, y + size*5/6 - 16)
  end
  #--------------------------------------------------------------------------
  # ● カーソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      self.cursor_rect.set(0, @index * row_height, self.width - 32, drawable_box_size)
    end
  end
end
#==============================================================================
# ■ Window_Item
#==============================================================================
class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    get_data_of_draw_items
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 描写するアイテム@dataの取得
  #--------------------------------------------------------------------------
  def get_data_of_draw_items
    # アイテムを追加
    set_own_item_data
    # 戦闘中以外なら武器と防具も追加
    unless $game_temp.in_battle
      set_own_weapon_data
      set_own_armor_data
    end
  end
  #--------------------------------------------------------------------------
  # ● 所有数が 1 以上のアイテムを @data に返す
  #--------------------------------------------------------------------------
  def set_own_item_data
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items[i])
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 所有数が 1 以上の武器を @data に返す
  #--------------------------------------------------------------------------
  def set_own_weapon_data
    for i in 1...$data_weapons.size
      if $game_party.weapon_number(i) > 0
        @data.push($data_weapons[i])
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 所有数が 1 以上の防具を @data に返す
  #--------------------------------------------------------------------------
  def set_own_armor_data
    for i in 1...$data_armors.size
      if $game_party.armor_number(i) > 0
        @data.push($data_armors[i])
      end
    end
  end
end
#==============================================================================
# ■ Window_Skill
#==============================================================================
class Window_Skill < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 項目の描画 + @column_maxへの対応 + 「SP消費0を隠す」 + リファクタリング
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % @column_max * (288 + 32)
    y = index / @column_max * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    sp_cost = get_sp_cost(skill)
    if sp_cost > 0 or !HIDE_ZERO_SP_COST
      self.contents.draw_text(x + 232, y, 48, 32, sp_cost.to_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルの消費SPの値の取得
  #--------------------------------------------------------------------------
  def get_sp_cost(skill)
    return skill.sp_cost
  end
end
#==============================================================================
# ■ Window_EquipItem
#==============================================================================
class Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # 装備可能な武器を追加
    if @equip_type == 0
      set_equipable_weapon_data(@actor.class_id)
    end
    # 装備可能な防具を追加
    if @equip_type != 0
      set_equipable_armor_data(@actor.class_id)
    end
    # 空白を追加
    @data.push(nil)
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max-1
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 指定クラスが装備可能、かつ所有している武器を @data に返す
  #--------------------------------------------------------------------------
  def set_equipable_weapon_data(class_id)
    weapon_set = $data_classes[class_id].weapon_set
    for i in 1...$data_weapons.size
      if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
        @data.push($data_weapons[i])
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 指定クラスが装備可能、かつ所有している防具を @data に返す
  #--------------------------------------------------------------------------
  def set_equipable_armor_data(class_id)
    armor_set = $data_classes[class_id].armor_set
    for i in 1...$data_armors.size
      if $game_party.armor_number(i) > 0 and armor_set.include?(i)
        if $data_armors[i].kind == @equip_type-1
          @data.push($data_armors[i])
        end
      end
    end
  end
end
#==============================================================================
# ■ Window_ShopSell
#==============================================================================
class Window_ShopSell < Window_Selectable
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    set_own_item_data
    set_own_weapon_data
    set_own_armor_data
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 所有数が 1 以上のアイテムを @data に返す
  #--------------------------------------------------------------------------
  def set_own_item_data
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items[i])
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 所有数が 1 以上の武器を @data に返す
  #--------------------------------------------------------------------------
  def set_own_weapon_data
    for i in 1...$data_weapons.size
      if $game_party.weapon_number(i) > 0
        @data.push($data_weapons[i])
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 所有数が 1 以上の防具を @data に返す
  #--------------------------------------------------------------------------
  def set_own_armor_data
    for i in 1...$data_armors.size
      if $game_party.armor_number(i) > 0
        @data.push($data_armors[i])
      end
    end
  end
end
#==============================================================================
# ■ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      x = i * drawable_x_shift + 4
      y = 0
      draw_actor_battle_status(actor, x, y, @level_up_flags[i])
    end
  end
  #--------------------------------------------------------------------------
  # ● 一人当たりの描写スペース
  #--------------------------------------------------------------------------
  def drawable_space
    return 120
  end
  #--------------------------------------------------------------------------
  # ● 一人当たりの描写間隔
  #--------------------------------------------------------------------------
  def drawable_x_shift
    return 160
  end
  #--------------------------------------------------------------------------
  # ● バトルステータス用アクターステータスの描写
  #--------------------------------------------------------------------------
  def draw_actor_battle_status(actor, x, y, level_up_flag = false)
    max_width = drawable_space
    draw_actor_name(actor, x, y)
    draw_actor_hp(actor, x, y + 32, max_width)
    draw_actor_sp(actor, x, y + 64, max_width)
    if level_up_flag
      self.contents.font.color = normal_color
      self.contents.draw_text(x, y + 96, max_width, 32, "LEVEL UP!")
    else
      draw_actor_state(actor, x, y + 96)
    end
  end
end
#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
  #--------------------------------------------------------------------------
  # ● リフレッシュ + 軽量化処理
  #--------------------------------------------------------------------------
  def refresh
    # アイテムウィンドウの可視状態設定
    @item_window1.visible = (@right_window.index == 0)
    @item_window2.visible = (@right_window.index == 1)
    @item_window3.visible = (@right_window.index == 2)
    @item_window4.visible = (@right_window.index == 3)
    @item_window5.visible = (@right_window.index == 4)
    # 現在装備中のアイテムを取得
    item1 = @right_window.item
    # 現在のアイテムウィンドウを @item_window に設定
    case @right_window.index
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end
    # ライトウィンドウがアクティブの場合
    if @right_window.active
      # 装備変更後のパラメータを消去
      @left_window.set_new_parameters(nil, nil, nil)
    end
    # アイテムウィンドウがアクティブの場合
    if @item_window.active
      # カーソル位置が変わっていなければリターン
      return if @item_window_cursor == @item_window.index
      @item_window_cursor = @item_window.index
      after_equip_parameter # ▽ 装備変更後のパラメータを取得 1~2へ。
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備変更後のパラメータを取得 1~4
  #--------------------------------------------------------------------------
  def after_equip_parameter
    # 現在選択中のアイテムを取得
    item2 = @item_window.item
    # 装備を変更
    last_hp = @actor.hp
    last_sp = @actor.sp
    @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
    # 装備変更後のパラメータを取得
    after_equip_parameter_phase2
    # 現在装備中のアイテムを取得
    item1 = @right_window.item
    # 装備を戻す
    @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
    @actor.hp = last_hp
    @actor.sp = last_sp
    # レフトウィンドウに描画
    after_equip_parameter_phase4
  end
  def after_equip_parameter_phase2
    # 装備変更後のパラメータを取得
    @new_atk = @actor.atk
    @new_pdef = @actor.pdef
    @new_mdef = @actor.mdef
  end
  def after_equip_parameter_phase4
    # レフトウィンドウに描画
    @left_window.set_new_parameters(@new_atk, @new_pdef, @new_mdef)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_item
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ライトウィンドウをアクティブ化
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 装備 SE を演奏
      $game_system.se_play($data_system.equip_se)
      # 実際に装着
      update_item_do_equip
      # ライトウィンドウをアクティブ化
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      # ライトウィンドウ、アイテムウィンドウの内容を再作成
      @right_window.refresh
      @item_window.refresh
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 実際に装着
  #--------------------------------------------------------------------------
  def update_item_do_equip
    # アイテムウィンドウで現在選択されているデータを取得
    item = @item_window.item
    # 装備を変更
    @actor.equip(@right_window.index, item == nil ? 0 : item.id)    
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● アクターコマンドウィンドウのセットアップ
  #--------------------------------------------------------------------------
  def phase3_setup_command_window
    # パーティコマンドウィンドウを無効化
    @party_command_window.active = false
    @party_command_window.visible = false
    # アクターコマンドウィンドウを有効化
    @actor_command_window.active = true
    @actor_command_window.visible = true
    # アクターコマンドウィンドウの位置を設定
    @actor_command_window.x = [@actor_index * phase3_setup_command_window_x_shift, 640-@actor_command_window.width].min
    # インデックスを 0 に設定
    @actor_command_window.index = 0
  end
  #--------------------------------------------------------------------------
  # ● アクターコマンドウィンドウのXシフト量
  #--------------------------------------------------------------------------
  def phase3_setup_command_window_x_shift
    return 160
  end
  #--------------------------------------------------------------------------
  # ● 基本アクション 結果作成
  #--------------------------------------------------------------------------
  def make_basic_action_result
    # 攻撃の場合
    if @active_battler.current_action.basic == 0
      # アニメーション ID を設定
      @animation1_id = @active_battler.animation1_id
      @animation2_id = @active_battler.animation2_id
      # ターゲット配列の取得
      make_basic_action_target_set
      # 通常攻撃の効果を適用
      for target in @target_battlers
        target.attack_effect(@active_battler)
      end
      return
    end
    # 防御の場合
    if @active_battler.current_action.basic == 1
      # ヘルプウィンドウに "防御" を表示
      @help_window.set_text($data_system.words.guard, 1)
      return
    end
    # 逃げるの場合
    if @active_battler.is_a?(Game_Enemy) and
       @active_battler.current_action.basic == 2
      # ヘルプウィンドウに "逃げる" を表示
      @help_window.set_text("逃げる", 1)
      # 逃げる
      @active_battler.escape
      return
    end
    # 何もしないの場合
    if @active_battler.current_action.basic == 3
      # アクション強制対象のバトラーをクリア
      $game_temp.forcing_battler = nil
      # ステップ 1 に移行
      @phase4_step = 1
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 基本アクションのターゲット配列作成
  #--------------------------------------------------------------------------
  def make_basic_action_target_set
    # 行動側バトラーがエネミーの場合
    if @active_battler.is_a?(Game_Enemy)
      if @active_battler.restriction == 3
        target = $game_troop.random_target_enemy
      elsif @active_battler.restriction == 2
        target = $game_party.random_target_actor
      else
        index = @active_battler.current_action.target_index
        target = $game_party.smooth_target_actor(index)
      end
    end
    # 行動側バトラーがアクターの場合
    if @active_battler.is_a?(Game_Actor)
      if @active_battler.restriction == 3
        target = $game_party.random_target_actor
      elsif @active_battler.restriction == 2
        target = $game_troop.random_target_enemy
      else
        index = @active_battler.current_action.target_index
        target = $game_troop.smooth_target_enemy(index)
      end
    end
    # 対象側バトラーの配列を設定
    @target_battlers =  [target]
  end
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  def make_skill_action_result
    # スキルを取得
    @skill = $data_skills[@active_battler.current_action.skill_id]
    # 強制アクションでなければ
    unless @active_battler.current_action.forcing
      # SP 切れなどで使用できなくなった場合
      unless @active_battler.skill_can_use?(@skill.id)
        # アクション強制対象のバトラーをクリア
        $game_temp.forcing_battler = nil
        # ステップ 1 に移行
        @phase4_step = 1
        return
      end
    end
    # SP 消費
    sp_cost = get_sp_cost(@skill)
    @active_battler.sp -= sp_cost
    # ステータスウィンドウをリフレッシュ
    @status_window.refresh
    # ヘルプウィンドウにスキル名を表示
    @help_window.set_text(@skill.name, 1)
    # アニメーション ID を設定
    @animation1_id = @skill.animation1_id
    @animation2_id = @skill.animation2_id
    # コモンイベント ID を設定
    @common_event_id = @skill.common_event_id
    # 対象側バトラーを設定
    set_target_battlers(@skill.scope)
    # スキルの効果を適用
    for target in @target_battlers
      target.skill_effect(@active_battler, @skill)
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルの消費SPの値の取得
  #--------------------------------------------------------------------------
  def get_sp_cost(skill)
    return skill.sp_cost
  end
  #--------------------------------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------------------------------
  def start_phase5
    # フェーズ 5 に移行
    @phase = 5
    # バトル終了 ME を演奏
    $game_system.me_play($game_system.battle_end_me)
    # バトル開始前の BGM に戻す
    $game_system.bgm_play($game_temp.map_bgm)
    # EXP、ゴールド、トレジャーを初期化
    exp = 0
    gold = 0
    treasures = []
    # 獲得EXPを追加
    exp += battle_exp
    # 獲得ゴールドを追加
    gold += battle_gold
    # ループ
    for enemy in $game_troop.enemies
      # エネミーが隠れ状態でない場合
      unless enemy.hidden
        # トレジャー出現判定
        if rand(100) < enemy.treasure_prob
          if enemy.item_id > 0
            treasures.push($data_items[enemy.item_id])
          end
          if enemy.weapon_id > 0
            treasures.push($data_weapons[enemy.weapon_id])
          end
          if enemy.armor_id > 0
            treasures.push($data_armors[enemy.armor_id])
          end
        end
      end
    end
    # トレジャーの数を 6 個までに限定
    treasures = treasures[0..5]
    # EXP 獲得
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false
        last_level = actor.level
        actor.exp += exp
        if actor.level > last_level
          @status_window.level_up(i)
        end
      end
    end
    # ゴールド獲得
    $game_party.gain_gold(gold)
    # トレジャー獲得
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
    # バトルリザルトウィンドウを作成
    @result_window = Window_BattleResult.new(exp, gold, treasures)
    # ウェイトカウントを設定
    @phase5_wait_count = 100
  end
  #--------------------------------------------------------------------------
  # ● 獲得する戦闘経験値の取得
  #--------------------------------------------------------------------------
  def battle_exp
    bexp = 0
    # ループ
    for enemy in $game_troop.enemies
      # エネミーが隠れ状態でない場合
      unless enemy.hidden
        # 獲得を追加
        bexp += enemy.exp
      end
    end
    return bexp
  end
  #--------------------------------------------------------------------------
  # ● 獲得する戦闘金の取得
  #--------------------------------------------------------------------------
  def battle_gold
    bgold = 0
    # ループ
    for enemy in $game_troop.enemies
      # エネミーが隠れ状態でない場合
      unless enemy.hidden
        # 獲得を追加
        bgold += enemy.gold
      end
    end
    return bgold
  end
end



#------------------------------------------------------------------------------
#
#
# ▽ 追加モジュール
#
#
#==============================================================================
# ◇ 付加属性名称判定モジュール
#==============================================================================
module XRXS_Check_ElementName_Set
  #--------------------------------------------------------------------------
  # ● スキルが指定名の属性を持つか判定
  #--------------------------------------------------------------------------
  def skill_element_include?(skill, element_name)
    return [false, 0, 0] unless skill.is_a?(RPG::Skill)
    returnar = [false, 0, 0] # 存在したか?, 固定値の合計、%値の合計
    for i in skill.element_set
      if $data_system.elements[i] =~ /^#{element_name}([+-]?[0-9]+)?(%)?/
        returnar[0] = true
        if $2 == nil
          returnar[1] += $1.to_i
        else
          returnar[2] += $1.to_i
        end
      end
    end
    return returnar
  end
  #--------------------------------------------------------------------------
  # ● アイテムが指定名の属性を持つか判定
  #--------------------------------------------------------------------------
  def item_element_include?(item, element_name)
    return [false, 0, 0] unless item.is_a?(RPG::Item)
    returnar = [false, 0, 0] # 存在したか?, 固定値の合計、%値の合計
    for i in item.element_set
      if $data_system.elements[i] =~ /^#{element_name}([+-]?[0-9]+)?(%)?/
        returnar[0] = true
        if $2 == nil
          returnar[1] += $1.to_i
        else
          returnar[2] += $1.to_i
        end
      end
    end
    return returnar
  end
  #--------------------------------------------------------------------------
  # ● 指定IDの武器が指定名の属性を持つか判定
  #--------------------------------------------------------------------------
  def weapon_id_element_include?(weapon_id, element_name)
    return [false, 0, 0] if weapon_id == nil or weapon_id <= 0
    returnar = [false, 0, 0] # 存在したか?, 固定値の合計、%値の合計
    for i in $data_weapons[weapon_id].element_set
      if $data_system.elements[i] =~ /^#{element_name}([+-]?[0-9]+)?(%)?/
        returnar[0] = true
        if $2 == nil
          returnar[1] += $1.to_i
        else
          returnar[2] += $1.to_i
        end
      end
    end
    return returnar
  end
  #--------------------------------------------------------------------------
  # ● 防具が指定名の属性を持つか判定
  #--------------------------------------------------------------------------
  def armor_element_include?(armor, element_name)
    returnar = [false, 0, 0] # 存在したか?, 固定値の合計、%値の合計
    return returnar unless armor.is_a?(RPG::Armor)
    for i in armor.guard_element_set
      if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
        returnar[0] = true
        if $2 == nil
          returnar[1] += $1.to_i
        else
          returnar[2] += $1.to_i
        end
      end
    end
    return returnar
  end
  #--------------------------------------------------------------------------
  # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
  #--------------------------------------------------------------------------
  def armor_element_suftext(armor, element_name)
    return nil unless armor.is_a?(RPG::Armor)
    for i in armor.guard_element_set
      if $data_system.elements[i] =~ /#{element_name}(.*)/
        return $1
      end
    end
    return nil
  end
  #--------------------------------------------------------------------------
  # ● アクターが指定名の属性を持つ武器を装備しているかか判定
  #--------------------------------------------------------------------------
  def equip_weapon_element_include?(actor, element_name)
    return [false, 0, 0] unless actor.is_a?(Game_Actor)
    return [false, 0, 0] if actor.weapon_id == nil or actor.weapon_id <= 0
    bool = false
    one_total = two_total = 0
    # ここでもdup補正
    current_weapon = $data_weapons[actor.weapon_id].dup
    # ウェポンプロパティXC.が導入されている場合
    if $xrxs24_weapon_property_system_work
      for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
                PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
        current_weapon.element_set.push(i) if i != 0
      end
    end
    # 判定
    for i in current_weapon.element_set
      if $data_system.elements[i] =~ /^#{element_name}([+-]?[0-9]+)?(%)?/
        if $2 == nil
          one_total += $1.to_i
        else
          two_total += $1.to_i          
        end
        bool = true
      end
    end
    # ウェポンプロパティXC.が導入されている場合
    if $xrxs24_weapon_property_system_work
      for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
                PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
        if $data_system.elements[actor.weapon_property[i]] =~ /^#{element_name}([+-]?[0-9]+)?(%)?/
          if $2 == nil
            one_total += $1.to_i
          else
            two_total += $1.to_i
          end
          bool =  true
        end
      end
    end
    # 存在したか、%無き数値の合計、%有る数値の合計 を返す
    return [bool, one_total, two_total]
  end
  #--------------------------------------------------------------------------
  # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
  #--------------------------------------------------------------------------
  def actor_element_equip?(actor, element_name)
    return [false, 0, 0] unless actor.is_a?(Game_Actor)
    weapon = $data_weapons[actor.weapon_id]
    armor1 = $data_armors[actor.armor1_id]
    armor2 = $data_armors[actor.armor2_id]
    armor3 = $data_armors[actor.armor3_id]
    armor4 = $data_armors[actor.armor4_id]
    bool = false
    one_total = two_total = 0
    # 武器
    returnar = equip_weapon_element_include?(actor, element_name)
    bool |= returnar[0]
    one_total += returnar[1].to_i
    two_total += returnar[2].to_i
    # 盾
    returnar = armor_element_include?(armor1, element_name)
    bool |= returnar[0]
    one_total += returnar[1].to_i
    two_total += returnar[2].to_i
    # 頭防具
    returnar = armor_element_include?(armor2, element_name)
    bool |= returnar[0]
    one_total += returnar[1].to_i
    two_total += returnar[2].to_i
    # 身体防具
    returnar = armor_element_include?(armor3, element_name)
    bool |= returnar[0]
    one_total += returnar[1].to_i
    two_total += returnar[2].to_i
    # 装飾品
    returnar = armor_element_include?(armor4, element_name)
    bool |= returnar[0]
    one_total += returnar[1].to_i
    two_total += returnar[2].to_i
    # 存在したか、%無き数値の合計、%有る数値の合計 を返す
    return [bool, one_total, two_total]
  end
end

Mã:
#==============================================================================
# ■ Action Battle System
#------------------------------------------------------------------------------
# Originally by 桜雅 在土
# Edited and translated by Minkoff
#------------------------------------------------------------------------------
# This script may be a bit buggy, but it should work :)
# And if you use this, please give both 桜雅 在土 and Minkoff a little credit.
#
# Also, keep in mind that if you are editing skills and classes, you have to 
# edit this too. If you don't know how to edit this, leave the existing 
# database entires alone. It will save you alot of trouble.
#
# ~Minkoff
#==============================================================================

#==============================================================================
# □ カスタマイズポイント
#==============================================================================
 class Scene_Battle
  # 「レクトラインウィンドウを稼動」
  ENABLE_RECTLINE_WINDOW = false
end
class Game_Battler
  #--------------------------------------------------------------------------
  # ● アクターの運動能力の設定
  #--------------------------------------------------------------------------
  def setup_actor_reflexes(actor_id)
    # 共通項目の設定
    @max_jumps            =   2     # 「最大ジャンプ回数」
    @weight               = 100     # 「重さ」
    @body_rect = Rect.new(-18, -96, 36, 96) # くらい判定(Rect)
    # アクター個別の設定
    case actor_id
    when 1 # ID 1のアクター
      # 運動能力
      @air_x_resistance     =  0.09  # 「空中X空気抵抗」
      @air_x_velocity       =  2.0   # 「空中X加速度」
      @air_x_maximum        =  6.4   # 「空中X最大速度」
      @air_y_velocity       =  1.6   # 「落下Y加速度」
      @dash_x_speed         =  9.6   # 「走行X速度」
      @walk_x_speed         =  3.2   # 「歩行X速度」
      @jump_y_init_velocity = 24.0   # 「ジャンプY初速度」
      @char_width           = 18     # 「キャラ幅/2」
      #@body_rect = Rect.new(-0, -96, 48, 96) # くらい判定(Rect)
      # 戦技モーション設定---
      # 弱攻撃
      @motion_time_jub_attack = 16
      @rectan_plan_jub_attack[2]  = Rect.new(16,-71, 28, 34)
      @skl_id_plan_jub_attack[2]  = 1
      @skl_id_plan_jub_attack[6]  = 0
      # 前強攻撃
      @motion_time_front_attack = 24
      @rectan_plan_front_attack[2]  = Rect.new(33,-93, 47, 89)
      @skl_id_plan_front_attack[2]  = 2
      @skl_id_plan_front_attack[14] = 0
      # 上強攻撃
      @motion_time_upper_attack = 26
      @rectan_plan_upper_attack[2]  = Rect.new(32,-96, 48, 94)
      @skl_id_plan_upper_attack[2]  = 3
      @skl_id_plan_upper_attack[22] = 0
      # 下強攻撃
      @motion_time_lower_attack = 12
      @rectan_plan_lower_attack[3]  = Rect.new(20,-42, 54, 38)
      @skl_id_plan_lower_attack[3]  = 4
      @skl_id_plan_lower_attack[10] = 0
      # 空中ニュートラル攻撃
      @motion_time_air_neutral_attack = 40
      @rectan_plan_air_neutral_attack[2]  = Rect.new(-23,-43, 67, 34)
      @skl_id_plan_air_neutral_attack[2]  = 5
      @skl_id_plan_air_neutral_attack[36] = 0    
      # 空中前攻撃
      @motion_time_air_front_attack = 20
      @rectan_plan_air_front_attack[2]  = Rect.new(33,-93, 47, 89)
      @skl_id_plan_air_front_attack[2]  = 6
      @skl_id_plan_air_front_attack[18] = 0    
      # 空中上攻撃
      @motion_time_air_upper_attack = 16
      @rectan_plan_air_upper_attack[2]  = Rect.new(32,-96, 48, 94)
      @skl_id_plan_air_upper_attack[2]  = 7
      @skl_id_plan_air_upper_attack[14] = 0    
      # 空中下攻撃
      @motion_time_air_lower_attack = 36
      @rectan_plan_air_lower_attack[2]  = Rect.new(-31,-42, 52, 42)
      @skl_id_plan_air_lower_attack[2]  = 8
      @skl_id_plan_air_lower_attack[36] = 0    
      # 空中後攻撃
      @motion_time_air_arear_attack = 40
      @rectan_plan_air_arear_attack[2]  = Rect.new(-14,-92, 54, 88)
      @skl_id_plan_air_arear_attack[2]  = 9
      @skl_id_plan_air_arear_attack[36] = 0
    when 2 # ID 1のアクター
      # 運動能力
      @air_x_resistance     =  0.09  # 「空中X空気抵抗」
      @air_x_velocity       =  4.0   # 「空中X加速度」
      @air_x_maximum        =  9.6   # 「空中X最大速度」
      @air_y_velocity       =  1.8   # 「落下Y加速度」
      @dash_x_speed         =  9.6   # 「走行X速度」
      @walk_x_speed         =  3.2   # 「歩行X速度」
      @jump_y_init_velocity = 24.0   # 「ジャンプY初速度」
      @char_width           = 48     # 「キャラ幅/2」
      #@body_rect = Rect.new(-24, -96, 48, 96) # くらい判定(Rect)
      # 戦技モーション設定---
      # 弱攻撃
      @motion_time_jub_attack = 16
      @rectan_plan_jub_attack[2]  = Rect.new(0,-96, 96, 96)
      @skl_id_plan_jub_attack[2]  = 1
      @skl_id_plan_jub_attack[6]  = 0
      # 前強攻撃
      @motion_time_front_attack = 24
      @rectan_plan_front_attack[2]  = Rect.new(0,-96, 96, 96)
      @skl_id_plan_front_attack[2]  = 2
      @skl_id_plan_front_attack[14] = 0
      # 上強攻撃
      @motion_time_upper_attack = 16
      @rectan_plan_upper_attack[2]  = Rect.new(0,-96, 96, 96)
      @skl_id_plan_upper_attack[2]  = 3
      @skl_id_plan_upper_attack[14] = 0
      # 下強攻撃
      @motion_time_lower_attack = 24
      @rectan_plan_lower_attack[2]  = Rect.new(0,-32, 96, 32)
      @skl_id_plan_lower_attack[2]  = 4
      @skl_id_plan_lower_attack[14] = 0
      # 空中ニュートラル攻撃
      @motion_time_air_neutral_attack = 40
      @rectan_plan_air_neutral_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_neutral_attack[2]  = 5
      @skl_id_plan_air_neutral_attack[36] = 0    
      # 空中前攻撃
      @motion_time_air_front_attack = 20
      @rectan_plan_air_front_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_front_attack[2]  = 6
      @skl_id_plan_air_front_attack[18] = 0    
      # 空中上攻撃
      @motion_time_air_upper_attack = 20
      @rectan_plan_air_upper_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_upper_attack[2]  = 7
      @skl_id_plan_air_upper_attack[24] = 0    
      # 空中下攻撃
      @motion_time_air_lower_attack = 36
      @rectan_plan_air_lower_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_lower_attack[2]  = 8
      @skl_id_plan_air_lower_attack[36] = 0    
      # 空中後攻撃
      @motion_time_air_arear_attack = 40
      @rectan_plan_air_arear_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_arear_attack[2]  = 9
      @skl_id_plan_air_arear_attack[36] = 0
    when 3 # ID 3のアクター
      @air_x_resistance     =  0.08  # 「空中X空気抵抗」
      @air_x_velocity       =  4.0   # 「空中X加速度」
      @air_x_maximum        = 12.8   # 「空中X最大速度」
      @air_y_velocity       =  2.4   # 「落下Y加速度」
      @dash_x_speed         =  9.6   # 「走行X速度」
      @walk_x_speed         =  2.8   # 「歩行X速度」
      @jump_y_init_velocity = 28.2   # 「ジャンプY初速度」
      @char_width           = 48     # 「キャラ幅/2」
      #@body_rect = Rect.new(-48, -96, 96, 96) # くらい判定(Rect)
      # 戦技モーション設定---
      # 弱攻撃
      @motion_time_jub_attack = 16
      @rectan_plan_jub_attack[2]  = Rect.new(0,-96, 96, 96)
      @skl_id_plan_jub_attack[2]  = 1
      @skl_id_plan_jub_attack[6]  = 0
      # 前強攻撃
      @motion_time_front_attack = 24
      @rectan_plan_front_attack[2]  = Rect.new(0,-96, 96, 96)
      @skl_id_plan_front_attack[2]  = 2
      @skl_id_plan_front_attack[14] = 0
      # 上強攻撃
      @motion_time_upper_attack = 24
      @rectan_plan_upper_attack[2]  = Rect.new(0,-96, 96, 96)
      @skl_id_plan_upper_attack[2]  = 3
      @skl_id_plan_upper_attack[14] = 0
      # 下強攻撃
      @motion_time_lower_attack = 24
      @rectan_plan_lower_attack[2]  = Rect.new(0,-32, 96, 32)
      @skl_id_plan_lower_attack[2]  = 4
      @skl_id_plan_lower_attack[14] = 0
      # 空中ニュートラル攻撃
      @motion_time_air_neutral_attack = 40
      @rectan_plan_air_neutral_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_neutral_attack[2]  = 5
      @skl_id_plan_air_neutral_attack[36] = 0    
      # 空中前攻撃
      @motion_time_air_front_attack = 20
      @rectan_plan_air_front_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_front_attack[2]  = 6
      @skl_id_plan_air_front_attack[18] = 0    
      # 空中上攻撃
      @motion_time_air_upper_attack = 26
      @rectan_plan_air_upper_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_upper_attack[2]  = 7
      @skl_id_plan_air_upper_attack[24] = 0    
      # 空中下攻撃
      @motion_time_air_lower_attack = 36
      @rectan_plan_air_lower_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_lower_attack[2]  = 8
      @skl_id_plan_air_lower_attack[36] = 0    
      # 空中後攻撃
      @motion_time_air_arear_attack = 40
      @rectan_plan_air_arear_attack[2]  = Rect.new(-48,-48, 96, 48)
      @skl_id_plan_air_arear_attack[2]  = 9
      @skl_id_plan_air_arear_attack[36] = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● エネミーの運動能力の設定
  #--------------------------------------------------------------------------
  def setup_enemy_reflexes(enemy_id)
    # 共通項目
    @max_jumps            =   2     # 「最大ジャンプ回数」
    @weight               = 100     # 「重さ」
    # エネミー個別設定
    case enemy_id
    when 1 # ID 1のアクター
      setup_actor_reflexes(1)
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルの基本ダメージ計算
  #--------------------------------------------------------------------------
  def cals_skill_damage(user, skill)
    # 基本ダメージを計算
    return skill.power * user.str * user.atk / self.pdef / 10
  end
end
# スキルモーションの設定---
class Game_Motion
  def forte_motion_database(skill_id)
    # 初期化
    @action_duration = 0
    @attack_motion_plan.clear
    @attack_rectan_plan.clear
    @attack_skl_id_plan.clear
    # 各種設定
    @handling_priority = 1
    case skill_id
    # スキルモーションの設定説明
   #when xx (xxはスキルのID)
   #  @action_duration    = (数字) : そのアクションの長さ(単位:F)
   #  @attack_motion_plan = (配列) : 実行時のキャラのフォーム
   #  @attack_rectan_plan = (配列[(Rect)]) : 攻撃範囲、Rectで指定。
   #  @attack_skl_id_plan = (配列) : スキルのモーションプラン。
   #                                 スキルIDを指定、 0 の部分で終了する。
    when 57 # ID 13 のスキル
      @action_duration    = 24
      @attack_motion_plan = [121,nil,nil,nil,131]
      @attack_rectan_plan = [Rect.new(0,-96, 96, 96)]
      @attack_skl_id_plan = [13,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,0]
    when 58
      @action_duration    = 24
      @attack_motion_plan = [151,nil,nil,141]
      @attack_rectan_plan = [nil,nil,nil,Rect.new(0,-96, 96, 96)]
      @attack_skl_id_plan = [nil,nil,nil,14,nil,nil,nil,nil,nil,nil,nil,nil,0]
    when 59
      @action_duration    = 24
      @attack_motion_plan = [131]
      @attack_rectan_plan = [Rect.new(0,-96, 96, 96)]
      @attack_skl_id_plan = [15,nil,nil,nil,nil,nil,nil,nil,nil,0]
    when 60
      @action_duration    = 24
      @attack_motion_plan = [131]
      @attack_rectan_plan = [Rect.new(0,-96, 96, 96)]
      @attack_skl_id_plan = [16,nil,nil,nil,nil,nil,nil,nil,nil,0]
    else 
      # 例外処理
      @handling_priority = 0
    end
  end
end
#------------------------------------------------- カスタマイズポイント End ---

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------  
  attr_accessor :now_x_speed              # 現在X速度        (Numeric)
  attr_accessor :now_y_speed              # 現在Y速度        (Numeric)
  attr_accessor :now_jumps                # 現在ジャンプ回数 (Numeric)
  attr_accessor :direction                # 向き             (Numeric) (1が右向き、-1が左向き)
  attr_accessor :dashing                  # ダッシュ中       (true/false)
  attr_accessor :guarding                 # ガード中         (true/false)
  attr_accessor :motion                   # モーション       (Game_Motion)
  attr_reader   :air_x_resistance         # 「空中X空気抵抗」(Numeric)
  attr_reader   :air_x_velocity           # 「空中X加速度」  (Numeric)
  attr_reader   :air_x_maximum            # 「空中X最大速度」(Numeric)
  attr_reader   :air_y_velocity           # 「落下Y加速度」  (Numeric)
  attr_reader   :dash_x_speed             # 「歩行X速度」    (Numeric)
  attr_reader   :walk_x_speed             # 「歩行X速度」    (Numeric)
  attr_reader   :weight                   # 「重さ」         (Numeric)
  attr_reader   :jump_y_init_velocity     # 「ジャンプY初速度」
  attr_reader   :max_jumps                # 「最大ジャンプ回数」
  attr_reader   :char_width               # 「キャラ幅/2」
  attr_reader   :body_rect                # 「ダメージを受ける範囲」(rect)
  #---------------------------------------#
  attr_accessor :motion_time_jub_attack
  attr_accessor :motion_plan_jub_attack
  attr_accessor :rectan_plan_jub_attack
  attr_accessor :skl_id_plan_jub_attack
  attr_accessor :motion_time_front_attack
  attr_accessor :motion_plan_front_attack
  attr_accessor :rectan_plan_front_attack
  attr_accessor :skl_id_plan_front_attack
  attr_accessor :motion_time_upper_attack
  attr_accessor :motion_plan_upper_attack
  attr_accessor :rectan_plan_upper_attack
  attr_accessor :skl_id_plan_upper_attack
  attr_accessor :motion_time_lower_attack
  attr_accessor :motion_plan_lower_attack
  attr_accessor :rectan_plan_lower_attack
  attr_accessor :skl_id_plan_lower_attack
  attr_accessor :motion_time_air_neutral_attack
  attr_accessor :motion_plan_air_neutral_attack
  attr_accessor :rectan_plan_air_neutral_attack
  attr_accessor :skl_id_plan_air_neutral_attack
  attr_accessor :motion_time_air_front_attack
  attr_accessor :motion_plan_air_front_attack
  attr_accessor :rectan_plan_air_front_attack
  attr_accessor :skl_id_plan_air_front_attack
  attr_accessor :motion_time_air_upper_attack
  attr_accessor :motion_plan_air_upper_attack
  attr_accessor :rectan_plan_air_upper_attack
  attr_accessor :skl_id_plan_air_upper_attack
  attr_accessor :motion_time_air_lower_attack
  attr_accessor :motion_plan_air_lower_attack
  attr_accessor :rectan_plan_air_lower_attack
  attr_accessor :skl_id_plan_air_lower_attack
  attr_accessor :motion_time_air_arear_attack
  attr_accessor :motion_plan_air_arear_attack
  attr_accessor :rectan_plan_air_arear_attack
  attr_accessor :skl_id_plan_air_arear_attack
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bs1_battler_initialize initialize
  def initialize
    #-----
    xrxs_bs1_battler_initialize
    @now_x_speed          =  0     # 現在X速度
    @now_y_speed          =  0     # 現在Y速度
    @now_jumps            =  0     # 現在ジャンプ回数
    if self.is_a?(Game_Actor)      # 向き
      @direction          =  1
    else
      @direction          = -1
    end
    @dashing              = false
    @guarding             = false
    @motion               = Game_Motion.new(self)
    #-----
  end
  def setup_default_reflexes
    # 初期化
    @motion_plan_jub_attack = [111]
    @rectan_plan_jub_attack = []
    @skl_id_plan_jub_attack = []
    @motion_plan_front_attack = [121]
    @rectan_plan_front_attack = []
    @skl_id_plan_front_attack = []
    @motion_plan_upper_attack = [131]
    @rectan_plan_upper_attack = []
    @skl_id_plan_upper_attack = []
    @motion_plan_lower_attack = [141]
    @rectan_plan_lower_attack = []
    @skl_id_plan_lower_attack = []
    @motion_plan_air_neutral_attack = [151]
    @rectan_plan_air_neutral_attack = []
    @skl_id_plan_air_neutral_attack = []
    @motion_plan_air_front_attack = [161]
    @rectan_plan_air_front_attack = []
    @skl_id_plan_air_front_attack = []
    @motion_plan_air_upper_attack = [171]
    @rectan_plan_air_upper_attack = []
    @skl_id_plan_air_upper_attack = []
    @motion_plan_air_lower_attack = [181]
    @rectan_plan_air_lower_attack = []
    @skl_id_plan_air_lower_attack = []
    @motion_plan_air_arear_attack = [191]
    @rectan_plan_air_arear_attack = []
    @skl_id_plan_air_arear_attack = []    
  end
  #--------------------------------------------------------------------------
  # ● 防御中判定
  #--------------------------------------------------------------------------
  def guarding?
    return @guarding
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #--------------------------------------------------------------------------
  alias xrxs_bs1_skill_effect skill_effect
  def skill_effect(user, skill)
    bool = xrxs_bs1_skill_effect(user, skill)
    # 攻撃成功時のみ
    if bool and self.damage != "Miss" and !self.guarding?
      # ふっとび値
      blow = 1.0 * (self.maxhp - self.hp) / self.maxhp * (skill.power + 4) * self.weight / 280000 * skill.atk_f + skill.eva_f
      # ふっとびベクトル向き
      radian = skill.variance * Math::PI / 50.0
      dir = user.x_pos < self.x_pos ? 1 : -1
      self.now_x_speed = blow * Math.cos(radian) / 2.2 * dir
      self.now_y_speed = blow * Math.sin(radian) / 2.2
      self.now_jumps = 1 if self.now_y_speed > 0
      # ダメージモーション
      self.motion.clear # まずはクリア
      self.motion.do_damage
      self.motion.knock_back_duration =  skill.power #(blow/ 2).floor
      self.motion.hit_stop_duration   = 2 # [(blow/10).floor, 8].min
      #user.motion.hit_stop_duration   = [(blow/10).floor, 8].min
      # ダメージによる向き反転
      self.direction = user.direction * -1
    end
    return bool
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias xrxs_bs1_setup setup
  def setup(actor_id)
    xrxs_bs1_setup(actor_id)
    setup_reflexes(actor_id)
  end
  #--------------------------------------------------------------------------
  # ● 運動能力の設定
  #--------------------------------------------------------------------------
  def setup_reflexes(actor_id)
    # 初期化
    setup_default_reflexes
    # アクターの運動能力の設定
    setup_actor_reflexes(actor_id)
  end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bs1_enemy_initialize initialize
  def initialize(troop_id, member_index)
    super()
    xrxs_bs1_enemy_initialize(troop_id, member_index)
    setup_reflexes(@enemy_id)
  end
  #--------------------------------------------------------------------------
  # ● 運動能力の設定
  #--------------------------------------------------------------------------
  def setup_reflexes(enemy_id)
    # 初期化
    setup_default_reflexes
    # エネミーの運動能力の設定
    setup_enemy_reflexes(enemy_id)
  end
end
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bs1_update update
  def update
    # 呼び戻す
    xrxs_bs1_update
    # バトラーが nil の場合
    if @battler == nil
      return
    end
    # 向きに応じて反転・w・この機能マジ燃え(素
    if @battler.direction == 1
      self.mirror = false
    else
      self.mirror = true
    end
  end
end
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● エフェクト表示中判定
  #--------------------------------------------------------------------------
  def effect?
    return false
  end  
end
#==============================================================================
# ■ Window_RectLine
#==============================================================================
class Window_RectLine < Window_Base
  def initialize
    super(-16, -16, 672, 512)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 64
    self.back_opacity = 64
  end
  def clear
    self.contents.clear
  end
  def write_rect(rect, color)
    rect.x = 320 + rect.x - $xcam_x
    rect.y += 304 + $xcam_y
    self.contents.draw_rect(rect, color)
  end
end
#==============================================================================
# ■ Window_ActiveMenu
#==============================================================================
class Window_ActiveMenu < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 160, 160, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
    refresh
    @item_max = 2
    @index = 0
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    bitmap = RPG::Cache.icon("021-Potion01")
    self.contents.blt( 0,  4, bitmap, Rect.new(0, 0, 24, 24))
    bitmap = RPG::Cache.icon("020-Accessory05")
    self.contents.blt( 0, 36, bitmap, Rect.new(0, 0, 24, 24))
  end
  #--------------------------------------------------------------------------
  # ● カーソルの矩形更新
  #--------------------------------------------------------------------------
  #def update_cursor_rect
  #  self.cursor_rect.set(0, @index * 24, 24, 24)
  #end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias xrxs_bs1_main main
  def main
    xrxs_bs1_main
    if ENABLE_RECTLINE_WINDOW
      @window_rectline.dispose
    end
  end
  #--------------------------------------------------------------------------
  # ● プレバトルフェーズ開始
  #--------------------------------------------------------------------------
  alias xrxs_bs1_start_phase1 start_phase1
  def start_phase1
    xrxs_bs1_start_phase1
    # 初期化
    @handle_battler = $game_party.actors[0]
    @now_attack_frame = false
    @trigger_duration_key_left = 0
    @trigger_duration_key_right= 0
    @trigger_duration_key_down = 0
    @xcam_watch_battler = @handle_battler
    # スクリーンバックウィンドウを作成
    @window_screenback = Window_Base.new(-4, -4, 648, 488)
    @window_screenback.back_opacity = 48
    @window_screenback.visible = false
    @window_screenback.z = 301
    # レクトライン表示ON
    if ENABLE_RECTLINE_WINDOW
      @window_rectline = Window_RectLine.new
    end
    # アクティヴメニューウィンドウを作成
    @window_activemenu = Window_ActiveMenu.new
    @window_activemenu.active = false
    @window_activemenu.visible = false
    @window_activemenu.z = 302
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bs1_update update
  def update
    # @wait_countを設定して本来の処理を行わないようにする
    @wait_count = 1    
    @wait_count_motion = 1 if @phase == 3
    # 呼び戻す
    xrxs_bs1_update
    # フェーズによって分岐
    case @phase
    when 1  # ハンドルフェーズ
      update_coordinates
      update_phase1
      update_motions
    when 3  # アクティヴメニューフェーズ
      update_phase3
    when 4  # アタックフェーズ
      update_phase4
    when 5  # アフターバトルフェーズ
      update_coordinates
      update_motions
      update_phase5
    end
  end
  #--------------------------------------------------------------------------
  # ● 次のアクターのコマンド入力へ
  #--------------------------------------------------------------------------
  def phase3_next_actor
    # 無効化
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (バトラーモーション)
  #--------------------------------------------------------------------------
  def update_motions
    for battler in $game_party.actors + $game_troop.enemies
      battler.motion.update
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクターコマンドフェーズ)
  #--------------------------------------------------------------------------
  alias xrxs_bs1_update_phase3 update_phase3
  def update_phase3
    # アクティヴメニューがアクティヴの場合
    if @window_activemenu.active
      update_phase3_activemenu
      return
    end
    # 他
    xrxs_bs1_update_phase3
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクティヴメニュー)
  #--------------------------------------------------------------------------
  def update_phase3_activemenu
    @window_activemenu.update
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      @xcam_z_destination = 185
      @window_activemenu.active = false
      @window_activemenu.visible = false
      @window_screenback.visible = false
      @phase = 1
    end
    if Input.trigger?(Input::C)
      case @window_activemenu.index
      when 0 # アイテム
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        @window_activemenu.visible = false
        @window_activemenu.active  = false
        # アイテム選択開始
        @active_battler = @handle_battler
        @actor_index = 0
        start_item_select
        @item_window.z = 303
      when 1 # 逃走
        
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクターコマンドフェーズ : アクター選択)
  #--------------------------------------------------------------------------
  alias xrxs_bs1_update_phase3_actor_select update_phase3_actor_select
  def update_phase3_actor_select
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # アイテムウィンドウ表示中の場合
      if @item_window != nil
        # 行動実行
        @handle_battler.motion.do_use_item
        @active_battler = @handle_battler
        # アクションを設定
        @active_battler.current_action.kind = 2
        @active_battler.current_action.target_index = @actor_arrow.index
        index = @active_battler.current_action.target_index
        @target_battlers = [$game_party.smooth_target_actor(index)]
        # アイテムアクション結果作成
        make_item_action_result
        # フェイズ4へ移行
        end_actor_select
        @xcam_z_destination = 185
        @window_screenback.visible = false
        @phase = 4
        @phase4_step = 4
        return
      end
    end
    # 呼び戻す
    xrxs_bs1_update_phase3_actor_select
  end
  #--------------------------------------------------------------------------
  # ● アイテム選択終了
  #--------------------------------------------------------------------------
  alias xrxs_bs1_end_item_select end_item_select
  def end_item_select
    xrxs_bs1_end_item_select
    @actor_command_window.active  = false
    @actor_command_window.visible = false
    # アクティヴメニューを有効化
    @window_activemenu.active  = true
    @window_activemenu.visible = true
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (プレバトルフェーズ)再定義
  #--------------------------------------------------------------------------
  def update_phase1
    # 勝敗判定
    if judge
      # 勝利または敗北の場合 : メソッド終了
      return
    end
    # フレーム更新 (バトラー操作) 
    update_handling
    # フレーム更新 (AI操作) 
    for battler in  $game_party.actors + $game_troop.enemies
      update_ai_handle(battler) if battler != @handle_battler
    end
    # フレーム更新 (攻撃系更新)
    update_attack_set
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (座標系更新) 
  #--------------------------------------------------------------------------
  def update_rectline
    return unless ENABLE_RECTLINE_WINDOW
    @window_rectline.clear
    for battler in $game_party.actors + $game_troop.enemies
      battler_rect    = battler.body_rect.dup
      battler_rect.x += battler.x_pos
      battler_rect.y -= battler.y_pos
      @window_rectline.write_rect(battler_rect, Color.new(255, 255, 255, 255))
      battler_rect    = battler.motion.attack_rect.dup
      if battler.direction == -1
        # 逆向きの場合
        battler_rect.x = -1 * battler_rect.x - battler_rect.width
      end
      battler_rect.x += battler.x_pos
      battler_rect.y -= battler.y_pos
      @window_rectline.write_rect(battler_rect, Color.new(255, 128, 128, 255))
    end
  end
  def update_coordinates
    # レクトライン描写
    update_rectline
    # 初期化
    battlers_x_min =  512
    battlers_x_max = -512
    # バトラー位置更新
    for battler in $game_party.actors + $game_troop.enemies
      # 最大値
      battlers_x_min = [battler.x_pos, battlers_x_min].min
      battlers_x_max = [battler.x_pos, battlers_x_max].max
      # ヒットストップ中の場合は座標移動を行わない
      next if battler.motion.hit_stop_duration > 0
      # ---X---
      # X空気抵抗による更新
      battler.now_x_speed = battler.now_x_speed * (1.0 - battler.air_x_resistance)
      # X移動
      battler.x_pos += battler.now_x_speed
      # ぬるり
      # 攻撃側の範囲を設定
      battler_rect    = battler.body_rect.dup
      battler_rect.x += battler.x_pos
      battler_rect.y -= battler.y_pos
      for target in $game_party.actors + $game_troop.enemies
        # 自分は除外
        next if target == battler
        # 重なり判定
        target_rect     = target.body_rect.dup
        target_rect.x  += target.x_pos
        target_rect.y  -= target.y_pos
        if rects_over?(battler_rect.dup, target_rect.dup)
          # ぬるり発生
          if battler.x_pos < target.x_pos
            battler.x_pos -= 2
            target.x_pos  += 2
          else
            battler.x_pos += 2
            target.x_pos  -= 2
          end
        end
      end        
      # X範囲
      battler.x_pos = [[battler.x_pos, -512+battler.char_width].max, 512-battler.char_width].min
      
      # ---Y---
      # 落下Y加速度による更新
      battler.now_y_speed -= battler.air_y_velocity
      # Y移動
      battler.y_pos = [battler.y_pos + battler.now_y_speed, 0].max
      # 着地判定
      if battler.now_jumps > 0 and battler.y_pos == 0
        # 着地ッ!!
        battler.now_jumps = 0
        battler.now_x_speed = 0
        battler.motion.do_landing_step
      end
    end
    # カメラも移動
    #@handle_battler.sp = (battlers_x_min - battlers_x_max).abs.floor
    #@xcam_x_destination = @handle_battler.x_pos
    #@xcam_y_destination = @handle_battler.y_pos
    #@xcam_z_destination = [[((battlers_x_min - battlers_x_max).abs * 185.0 / 640).floor, 148].max, 296].min
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (攻撃系更新) 
  #--------------------------------------------------------------------------
  def update_attack_set
    # 攻撃判定
    for attacker in $game_party.actors + $game_troop.enemies
      next if attacker.motion.attack_rect.width == 0
      next if attacker.motion.attack_skl_id == nil
      # 攻撃側の範囲を設定
      attacker_rect   = attacker.motion.attack_rect.dup
      if attacker.direction == -1
        # 逆向きの場合
        attacker_rect.x = -1 * attacker_rect.x - attacker_rect.width
      end
      attacker_rect.x += attacker.x_pos
      attacker_rect.y -= attacker.y_pos
      # 対象となるバトラーの配列を作成
      if attacker.is_a?(Game_Actor)
        targets = $game_troop.enemies
      elsif attacker.is_a?(Game_Enemy)
        targets = $game_party.actors
      else
        next
      end
      @target_battlers = []
      for target in targets
        next if attacker.motion.attack_hit_targets.include?(target)
        # 対象側の範囲を設定
        target_rect    = target.body_rect.dup
        target_rect.x += target.x_pos
        target_rect.y -= target.y_pos
        if rects_over?(attacker_rect, target_rect)
          # 攻撃命中!!
          @target_battlers.push(target)
          attacker.motion.attack_hit_targets.push(target)
        end
      end
      # 攻撃の実行
      if @target_battlers.size > 0
        # 設定
        @active_battler = attacker
        @active_battler.current_action.skill_id = attacker.motion.attack_skl_id
        # スキルアクション 結果作成
        make_skill_action_result
        # フェイズ4へ移行
        @phase = 4
        @phase4_step = 4
      end
    end    
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (バトラー操作) 
  #--------------------------------------------------------------------------
  def update_handling
    # フレーム更新
    @trigger_duration_key_left -= 1
    @trigger_duration_key_right-= 1
    @trigger_duration_key_down -= 1
    @handle_battler.guarding = false
    # 操作
    if @handle_battler.motion.handling_priority <= 0
      if Input.trigger?(Input::Z)
        # メニュー
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        @xcam_z_destination = 111
        @window_activemenu.active  = true
        @window_activemenu.visible = true
        @window_screenback.visible = true
        # フェーズ 3 に移行
        @phase = 3
        return
      elsif Input.trigger?(Input::C)
        # アタック
        if @handle_battler.now_jumps >= 1
          # 空中
          if (@handle_battler.direction == 1 and Input.press?(Input::RIGHT)) or 
             (@handle_battler.direction ==-1 and Input.press?(Input::LEFT))
            @handle_battler.motion.do_air_front_attack
          elsif Input.press?(Input::UP)
            @handle_battler.motion.do_air_upper_attack
          elsif Input.press?(Input::DOWN)
            @handle_battler.motion.do_air_lower_attack
          elsif (@handle_battler.direction ==-1 and Input.press?(Input::RIGHT)) or 
                (@handle_battler.direction == 1 and Input.press?(Input::LEFT))
            @handle_battler.motion.do_air_arear_attack
          else
            @handle_battler.motion.do_air_neutral_attack
          end
        else
          # 地上
          if (@handle_battler.direction == 1 and Input.press?(Input::RIGHT)) or 
             (@handle_battler.direction ==-1 and Input.press?(Input::LEFT))
            @handle_battler.motion.do_front_attack
          elsif Input.press?(Input::UP)
            @handle_battler.motion.do_upper_attack
          elsif Input.press?(Input::DOWN)
            @handle_battler.motion.do_lower_attack
          else
            @handle_battler.motion.do_jub_attack
          end
        end
      elsif Input.trigger?(Input::B)
        # フォート
        if Input.press?(Input::RIGHT) or Input.press?(Input::LEFT)
          @handle_battler.motion.do_forte(@handle_battler.skills[3])
        elsif Input.press?(Input::UP)
          @handle_battler.motion.do_forte(@handle_battler.skills[1])
        elsif Input.press?(Input::DOWN)
          @handle_battler.motion.do_forte(@handle_battler.skills[2])
        else
          @handle_battler.motion.do_forte(@handle_battler.skills[0])
        end
      elsif Input.press?(Input::Y)
        # ガード
        if @handle_battler.now_jumps < @handle_battler.max_jumps and 
          ((@handle_battler.direction == 1 and Input.trigger?(Input::RIGHT)) or 
           (@handle_battler.direction ==-1 and Input.trigger?(Input::LEFT)))
          # フロントステップ
          @handle_battler.motion.do_frontstep
        elsif @handle_battler.now_jumps < @handle_battler.max_jumps and 
             ((@handle_battler.direction ==-1 and Input.trigger?(Input::RIGHT)) or 
              (@handle_battler.direction == 1 and Input.trigger?(Input::LEFT)))
          # バックステップ
          @handle_battler.motion.do_backstep
        else
          # ガード
          @handle_battler.motion.do_guard
        end
      elsif Input.trigger?(Input::X)
        # ジャンプ
        if @handle_battler.now_jumps < @handle_battler.max_jumps
          if (@handle_battler.direction == 1 and Input.press?(Input::RIGHT)) or
             (@handle_battler.direction ==-1 and Input.press?(Input::LEFT))
            @handle_battler.motion.act_derive = "front_jump"
          elsif (@handle_battler.direction == 1 and Input.press?(Input::LEFT)) or
                (@handle_battler.direction ==-1 and Input.press?(Input::RIGHT))
            @handle_battler.motion.act_derive = "back_jump"
          else
            @handle_battler.motion.act_derive = "jump"
          end
          @handle_battler.motion.do_crouch_to_jump
        end
      elsif @handle_battler.now_jumps >= 1
        # 空中
        if Input.trigger?(Input::UP)
          if @handle_battler.now_jumps < @handle_battler.max_jumps
            @handle_battler.motion.act_derive = "jump"
            @handle_battler.motion.do_crouch_to_jump
          end
        elsif Input.press?(Input::RIGHT)
          # →
          @handle_battler.now_x_speed += @handle_battler.air_x_velocity
        elsif Input.press?(Input::LEFT)
          # ←
          @handle_battler.now_x_speed -= @handle_battler.air_x_velocity
        end
        # 範囲
        @handle_battler.now_x_speed = [[@handle_battler.now_x_speed, @handle_battler.air_x_maximum].min, -@handle_battler.air_x_maximum].max
      else
        # 地上
        if Input.trigger?(Input::RIGHT)
          if @trigger_duration_key_right > 1
            @handle_battler.dashing = true
          else
            @trigger_duration_key_right = 28
          end
        elsif Input.trigger?(Input::LEFT)
          if @trigger_duration_key_left > 1
            @handle_battler.dashing = true
          else
            @trigger_duration_key_left = 28
          end        
        end
        if Input.trigger?(Input::UP)
          if @handle_battler.now_jumps < @handle_battler.max_jumps
            @handle_battler.motion.act_derive = "jump"
            @handle_battler.motion.do_crouch_to_jump
          end
        elsif Input.press?(Input::RIGHT)
          # →歩行
          @handle_battler.direction = 1
          if @handle_battler.dashing
            @handle_battler.x_pos += @handle_battler.dash_x_speed
          else
            @handle_battler.x_pos += @handle_battler.walk_x_speed
          end
          @handle_battler.motion.do_walk
        elsif Input.press?(Input::LEFT)
          # ←歩行
          @handle_battler.direction =-1
          if @handle_battler.dashing
            @handle_battler.x_pos -= @handle_battler.dash_x_speed
          else
            @handle_battler.x_pos -= @handle_battler.walk_x_speed
          end
          @handle_battler.motion.do_walk
        elsif Input.press?(Input::DOWN)
          # しゃがみ
          @handle_battler.motion.do_crouch
        else
          # 待機
          @handle_battler.dashing = false
          @handle_battler.motion.do_stand
        end
      end
    end
    #---
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (AI操作) 
  #--------------------------------------------------------------------------
  def update_ai_handle(battler)
    # 初期化
    battler.guarding = false
    # AI待機
    @ai_duration = 0 if @ai_duration == nil
    @ai_duration -= 1
    return if @ai_duration > 0
    # 操作
    if battler.motion.handling_priority <= 0
      # ターゲットを取得
      target = @handle_battler
      # ターゲットが自分の位置から考えてどのあたりにいるかを計算
      x_diff = target.x_pos - battler.x_pos
      y_diff = target.y_pos - battler.y_pos
      # 位置による判断
      case x_diff.abs
      when 0..96 # 近距離
        # アタック
        if battler.now_jumps >= 1
          # 空中
          case y_diff
          when -23..76
            battler.motion.do_air_neutral_attack
          when 33..80
            case y_diff
            when 0..96
              battler.motion.do_air_upper_attack
            else
              battler.motion.do_air_front_attack
            end
          when -96...-48
            battler.motion.do_air_lower_attack
          else
            battler.motion.do_air_arear_attack
          end
        else
          # 地上
          case y_diff
          when -48...48
            battler.motion.do_front_attack
          when 48...128
            battler.motion.do_upper_attack
          when -96...48
            battler.motion.do_lower_attack
          else
            battler.motion.do_jub_attack
          end
        end
        @ai_duration = 36
      else # 遠距離
        if battler.now_jumps >= 1
          # 空中
          if Input.press?(Input::RIGHT)
            # →
            battler.now_x_speed += battler.air_x_velocity
          elsif Input.press?(Input::LEFT)
            # ←
            battler.now_x_speed -= battler.air_x_velocity
          end
          # 範囲
          battler.now_x_speed = [[battler.now_x_speed, battler.air_x_maximum].min, -@handle_battler.air_x_maximum].max
        else
          # 地上
          if battler.x_pos < target.x_pos
            # →歩行
            battler.direction = 1
            battler.x_pos += battler.walk_x_speed
            battler.motion.do_walk
          elsif battler.x_pos > target.x_pos
            # ←歩行
            battler.direction =-1
            battler.x_pos -= battler.walk_x_speed
            battler.motion.do_walk
          else
            # 待機
            battler.motion.do_stand
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルまたはアイテムの対象側バトラー設定
  #--------------------------------------------------------------------------
  def set_target_battlers(scope)
    # 無効化
  end
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  alias xrxs_bs1_make_skill_action_result make_skill_action_result
  def make_skill_action_result
    xrxs_bs1_make_skill_action_result
    # ヘルプウィンドウを隠す
    @help_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias xrxs_bs1_update_phase4_step5 update_phase4_step5
  def update_phase4_step5
    xrxs_bs1_update_phase4_step5
    @phase = 1
  end
  #--------------------------------------------------------------------------
  # ● 二つの rect の共通部分があるかを判別
  #--------------------------------------------------------------------------
  def rects_over?(rect1, rect2)
    x_bool = false
    y_bool = false
    # Xの重なりを検出
    if (rect1.x <= rect2.x and rect2.x <= rect1.x + rect1.width) or
       (rect2.x <= rect1.x and rect1.x <= rect2.x + rect2.width) or
       (rect1.x <= rect2.x + rect2.width and rect2.x + rect2.width <= rect1.x + rect1.width) or
       (rect2.x <= rect1.x + rect1.width and rect1.x + rect1.width <= rect2.x + rect2.width)
      x_bool = true
    end
    # Yの重なりを検出
    if (rect1.y <= rect2.y and rect2.y <= rect1.y + rect1.height) or
       (rect2.y <= rect1.y and rect1.y <= rect2.y + rect2.height) or
       (rect1.y <= rect2.y + rect2.height and rect2.y + rect2.height <= rect1.y + rect1.height) or
       (rect2.y <= rect1.y + rect1.height and rect1.y + rect1.height <= rect2.y + rect2.height)
      y_bool = true
    end
    # return
    return (x_bool and y_bool)
  end
end



#------------------------------------------------------------------------------
#
#
# ▽ 新規
#
#
#==============================================================================
# ■ Game_Motion
#------------------------------------------------------------------------------
#  モーション (戦闘中の行動のフォーム) を扱うクラスです。
# このクラスは Game_Battler クラスの内部で使用されます。
#==============================================================================

class Game_Motion
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------  
  attr_reader   :handling_priority        # 現在の行動の操作に対する優先度
  attr_accessor :knock_back_duration      # のけぞり残りフレーム数
  attr_accessor :hit_stop_duration        # ヒットストップフレーム数
  attr_accessor :action_duration          # 行動  残りフレーム数
  attr_reader   :attack_rect              # 攻撃範囲 (Rect)
  attr_reader   :attack_skl_id            # 攻撃スキルID (Numeric)
  attr_accessor :attack_hit_targets       # 攻撃ヒットターゲット
  attr_accessor :act_derive               # 行動派生予定
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(battler)
    @battler = battler
    @attack_rect         = Rect.new(0,0,0,0)
    @attack_rectan_plan  = []
    @attack_skl_id_plan  = []
    @attack_motion_plan  = []
    @attack_hit_targets  = []
    @act_derive          = ""
    clear
  end
  #--------------------------------------------------------------------------
  # ● クリア
  #--------------------------------------------------------------------------
  def clear
    @attack_rect         = Rect.new(0,0,0,0)
    @attack_rectan_plan.clear
    @attack_skl_id_plan.clear
    @attack_motion_plan.clear
    @attack_hit_targets.clear
    @handling_priority   = 0
    @knock_back_duration = 0
    @hit_stop_duration   = 0
    @action_duration     = 0
    @attack_skl_id       = 0
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # アクション/のけぞり/ヒットストップ、の残りフレーム数更新    
    @hit_stop_duration   -= 1
    return if @hit_stop_duration > 0
    @action_duration     -= 1
    @knock_back_duration -= 1
    #
    # アクションが終了した場合
    if @action_duration == 0 or @knock_back_duration == 0
      # クリア
      clear
      # 行動派生
      case @act_derive
      when ""
        @battler.transgraphic(1)
      when "jump"
        do_jump
      when "front_jump"
        do_front_jump
      when "back_jump"
        do_back_jump
      end
      @act_derive = ""
    end
    # モーション予約の更新
    if @attack_motion_plan.size > 0
      am = @attack_motion_plan.shift
      if !am.nil? and @battler.now_form_id/10 != am/10
        @battler.transgraphic(am)
      end
    end
    # 攻撃予約の更新
    if @attack_skl_id_plan.size > 0
      as_id = @attack_skl_id_plan.shift
      @attack_skl_id = as_id unless as_id.nil?
      # スキルIDが 0 と指定された場合攻撃範囲をしまう
      ar = @attack_rectan_plan.shift
      if as_id == 0
        @attack_rect = Rect.new(0,0,0,0) 
        @attack_hit_targets.clear
      else
        @attack_rect = ar if ar.is_a?(Rect)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ◇ 待機
  #--------------------------------------------------------------------------
  def do_stand
    @attack_motion_plan = [1]
  end
  #--------------------------------------------------------------------------
  # ◇ ダメージのけぞり
  #--------------------------------------------------------------------------
  def do_damage
    @handling_priority = 1
    @attack_motion_plan = [71]
  end
  #--------------------------------------------------------------------------
  # ◇ 歩く
  #--------------------------------------------------------------------------
  def do_walk
    if @battler.dashing
      do_dash
    else
      @attack_motion_plan = [11]
    end
  end
  #--------------------------------------------------------------------------
  # ◇ 走る
  #--------------------------------------------------------------------------
  def do_dash
    @attack_motion_plan = [21]
  end
  #--------------------------------------------------------------------------
  # ◇ しゃがむ
  #--------------------------------------------------------------------------
  def do_crouch
    @attack_motion_plan = [31]
  end
  #--------------------------------------------------------------------------
  # ◇ ジャンプ
  #--------------------------------------------------------------------------
  def do_jump
    @battler.now_jumps += 1
    @attack_motion_plan = [41]
    @battler.now_x_speed = 0
    @battler.now_y_speed = @battler.jump_y_init_velocity
  end
  #--------------------------------------------------------------------------
  # ◇ 前ジャンプ
  #--------------------------------------------------------------------------
  def do_front_jump
    @battler.now_jumps += 1
    @attack_motion_plan = [41]
    @battler.now_x_speed = @battler.direction * @battler.air_x_maximum
    @battler.now_y_speed = @battler.jump_y_init_velocity * 0.9
  end
  #--------------------------------------------------------------------------
  # ◇ 後ジャンプ
  #--------------------------------------------------------------------------
  def do_back_jump
    @battler.now_jumps += 1
    @attack_motion_plan = [51]
    @battler.now_x_speed = -1 * @battler.direction * @battler.air_x_maximum
    @battler.now_y_speed = @battler.jump_y_init_velocity * 0.9
  end
  #--------------------------------------------------------------------------
  # ◇ 着地隙
  #--------------------------------------------------------------------------
  def do_landing_step
    @action_duration = 3
    @handling_priority = 1
    @attack_motion_plan = [31]
    @attack_skl_id_plan.clear
    @attack_rectan_plan.clear
    @attack_hit_targets.clear
    @attack_rect = Rect.new(0,0,0,0) 
  end
  #--------------------------------------------------------------------------
  # ◇ ガード
  #--------------------------------------------------------------------------
  def do_guard
    @attack_motion_plan = [61]
    @battler.guarding = true
  end
  #--------------------------------------------------------------------------
  # ◇ ジャンプ隙
  #--------------------------------------------------------------------------
  def do_crouch_to_jump
    @handling_priority = 1
    if @battler.now_jumps <= 0
      @action_duration = 3
      @attack_motion_plan = [31]
    else
      @action_duration = 1
    end
  end
  #--------------------------------------------------------------------------
  # ◇ フロントステップ
  #--------------------------------------------------------------------------
  def do_frontstep
    @action_duration = 10
    @handling_priority = 1
    @battler.now_jumps += 1
    @battler.now_x_speed = 18 * @battler.direction
    @battler.now_y_speed = @battler.jump_y_init_velocity / 3
    @attack_motion_plan = [51]
  end
  #--------------------------------------------------------------------------
  # ◇ バックステップ
  #--------------------------------------------------------------------------
  def do_backstep
    @action_duration = 20
    @handling_priority = 1
    @battler.now_jumps += 1
    @battler.now_x_speed = -18 * @battler.direction
    @battler.now_y_speed = @battler.jump_y_init_velocity / 2
    @attack_motion_plan = [51]
  end
  #--------------------------------------------------------------------------
  # ◇ 弱攻撃
  #--------------------------------------------------------------------------
  def do_jub_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_jub_attack
    @attack_motion_plan = @battler.motion_plan_jub_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_jub_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_jub_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 前強攻撃
  #--------------------------------------------------------------------------
  def do_front_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_front_attack
    @attack_motion_plan = @battler.motion_plan_front_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_front_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_front_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 上強攻撃
  #--------------------------------------------------------------------------
  def do_upper_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_upper_attack
    @attack_motion_plan = @battler.motion_plan_upper_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_upper_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_upper_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 下強攻撃
  #--------------------------------------------------------------------------
  def do_lower_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_lower_attack
    @attack_motion_plan = @battler.motion_plan_lower_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_lower_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_lower_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 空中ニュートラル攻撃
  #--------------------------------------------------------------------------
  def do_air_neutral_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_air_neutral_attack
    @attack_motion_plan = @battler.motion_plan_air_neutral_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_air_neutral_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_air_neutral_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 空中前攻撃
  #--------------------------------------------------------------------------
  def do_air_front_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_air_front_attack
    @attack_motion_plan = @battler.motion_plan_air_front_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_air_front_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_air_front_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 空中上攻撃
  #--------------------------------------------------------------------------
  def do_air_upper_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_air_upper_attack
    @attack_motion_plan = @battler.motion_plan_air_upper_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_air_upper_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_air_upper_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 空中下攻撃
  #--------------------------------------------------------------------------
  def do_air_lower_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_air_lower_attack
    @attack_motion_plan = @battler.motion_plan_air_lower_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_air_lower_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_air_lower_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ 空中後攻撃
  #--------------------------------------------------------------------------
  def do_air_arear_attack
    @handling_priority = 1
    # 設定
    @action_duration    = @battler.motion_time_air_arear_attack
    @attack_motion_plan = @battler.motion_plan_air_arear_attack.dup
    @attack_rectan_plan = @battler.rectan_plan_air_arear_attack.dup
    @attack_skl_id_plan = @battler.skl_id_plan_air_arear_attack.dup
  end
  #--------------------------------------------------------------------------
  # ◇ アイテム使用硬直
  #--------------------------------------------------------------------------
  def do_use_item
    @handling_priority  =  1
    @action_duration    = 20
    @attack_motion_plan = [241]    
  end
  #--------------------------------------------------------------------------
  # ◇ アイテム受け硬直
  #--------------------------------------------------------------------------
  def do_receive_item
    @handling_priority  =  1
    @action_duration    = 40
    @attack_motion_plan = [251]
  end
  #--------------------------------------------------------------------------
  # ◇ フォート(スキル使用)
  #--------------------------------------------------------------------------
  def do_forte(forte_id)
    if forte_id != nil and forte_id > 0
      # 設定
      forte_motion_database(forte_id)
    else
      # フォート未設定
      # ブザー SE を演奏
      $game_system.se_play($data_system.buzzer_se)      
    end
  end
end

# ▼▲▼ XRXL 1. ライン・図形描写 ▼▲▼
# by 桜雅 在土, 和希, fukuyama

#==============================================================================
# ◇ 外部ライブラリ
#==============================================================================
class Bitmap
  #--------------------------------------------------------------------------
  # ● ライン描画 by 桜雅 在土
  #--------------------------------------------------------------------------
  def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
    # 描写距離の計算。大きめに直角時の長さ。
    distance = (start_x - end_x).abs + (start_y - end_y).abs
    # 描写開始
    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
        if width == 1
          self.set_pixel(x, y, start_color) 
        else
          self.fill_rect(x, y, width, width, start_color) 
        end
      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
        if width == 1
          self.set_pixel(x, y, Color.new(r, g, b, a))
        else
          self.fill_rect(x, y, width, width, Color.new(r, g, b, a)) 
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 多角形の描画(塗りつぶしなし) by 和希
  #    peaks    : 頂点座標の配列 [[x1,y1],[x2,y2],[x3,y3], ... ]
  #    color    : 線の色
  #    width    : 線の幅
  #--------------------------------------------------------------------------
  def draw_polygon(peaks, color, width = 1)
    # 辺(=頂点)の個数分だけ辺を描く
    for i in 0 ... (peaks.size - 1)
      # 頂点同士を線で結ぶ
      draw_line( peaks[i][0], peaks[i][1], peaks[i+1][0], peaks[i+1][1], color, width )
    end
    # 最後の頂点と最初の頂点を結ぶ
    draw_line( peaks[peaks.size - 1][0], peaks[peaks.size - 1][1], peaks[0][0], peaks[0][1], color, width )
  end
  #--------------------------------------------------------------------------
  # ● Rectの描画(draw_polygonを利用)
  #--------------------------------------------------------------------------
  def draw_rect(rect, color = Color.new(255, 255, 255, 255))
    self.draw_polygon([
      [rect.x             , rect.y              ],
      [rect.x + rect.width, rect.y              ],
      [rect.x + rect.width, rect.y + rect.height],
      [rect.x             , rect.y + rect.height]
    ],
    color, 1)
  end
end

#==============================================================================
# ■ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor   :update_cp_only                   # CPメーターのみの更新
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bp7_initialize initialize
  def initialize
    xrxs_bp7_initialize
    # ↓Full-Viewの場合は下二行の # を消してください。
    self.opacity = 0
    self.back_opacity = 0
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  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
    # 描写を開始
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 160 + 21
      # 歩行キャラグラフィックの描写
      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数値の描写
      self.contents.font.size = 24            # HP/SP数値の文字の大きさ
      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数値の描写
      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)
      # 用語「HP」と用語「SP」の描写
      self.contents.font.size = 12            # 用語「HP/SP」の文字の大きさ
      self.contents.font.color = system_color # 用語「HP/SP」の文字の色
      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
  #--------------------------------------------------------------------------
  # ● 名前の描画
  #--------------------------------------------------------------------------
  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
  #--------------------------------------------------------------------------
  # ● ステートの描画
  #--------------------------------------------------------------------------
  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
#==============================================================================
# ◇ 外部ライブラリ
#==============================================================================
class Window_Base
  #--------------------------------------------------------------------------
  # ● ライン描画 by 桜雅 在土
  #--------------------------------------------------------------------------
  def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
    # 描写距離の計算。大きめに直角時の長さ。
    distance = (start_x - end_x).abs + (start_y - end_y).abs
    # 描写開始
    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

  #--------------------------------------------------------------------------
  # ● 影文字描画 by TOMY
  #--------------------------------------------------------------------------
  def draw_shadow_text(x, y, width, height, string, align = 0)
    # 元の色を保存しておく
    color = self.contents.font.color.dup
    # 黒字で影描画
    self.contents.font.color = Color.new(0, 0, 0)
    self.contents.draw_text(x + 2, y + 2, width, height, string, align)
    # 元の色に戻して描画
    self.contents.font.color = color
    self.contents.draw_text(x, y, width, height, string, align)
  end
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 追加・公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :x_pos                    # バトルフィールド 横 位置(+が右 )
  attr_accessor :y_pos                    # バトルフィールド 高さ 位置(+が上 )
  attr_accessor :z_pos                    # バトルフィールド奥行き位置(+が手前)
  attr_accessor :zoom                     # 現在のズーム倍率
  attr_accessor :x_destination            # X 目的地
  attr_accessor :y_blow                   # 現在Y 吹っ飛び速度
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 追加・公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :actor_in_battlefield     # アクターもフィールドに
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias xrxs_bp8_setup setup
  def setup(actor_id)
    xrxs_bp8_setup(actor_id)
    # 機能"アクターもフィールドに"
    # trueを優先する
    @actor_in_battlefield = false if @actor_in_battlefield != true
  end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 追加・公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :actor_in_battlefield     # アクターもフィールドに
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bp8_initialize initialize
  def initialize(troop_id, member_index)
    @actor_in_battlefield = false
    @x_pos          =   $data_troops[troop_id].members[member_index].x - 320
    @y_pos          = -($data_troops[troop_id].members[member_index].y - 304)
    @field_x_offset = -192
    @field_y_offset = -144
    @z_pos          =    0
    @zoom           = 1.00
    xrxs_bp8_initialize(troop_id, member_index)
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標の取得
  #--------------------------------------------------------------------------
  def screen_x
    return 320 - @field_x_offset + (@x_pos.to_i - $xcam_x.to_i) * @zoom
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Y 座標の取得
  #--------------------------------------------------------------------------
  def screen_y
    return 240 - @field_y_offset + (-@y_pos.to_i + 64 + $xcam_y.to_i) * @zoom
  end
end
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update update
  def update
    # 初期化
    @z_offset = 0
    # 戻す
    xrxs_bp8_update
    # バトラーが nil の場合戻る
    return if @battler == nil
    # 敵のみにカメラが影響。
    # 見方もバトルフィールドにいる場合ここの if を外す。
    if (@battler.is_a?(Game_Actor) and @battler.actor_in_battlefield) or @battler.is_a?(Game_Enemy)
      # ズーム率
      zoom = 1.00 * 185 / (($xcam_z != nil ? $xcam_z : 185) - @z_offset)
      self.zoom_x = zoom
      self.zoom_y = zoom
      @battler.zoom = zoom
      # スプライトの座標を設定
      self.x = @battler.screen_x
      self.y = @battler.screen_y
      self.z = @battler.screen_z
    end
  end
end
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bp8_initialize initialize
  def initialize
    # 初期化
    @now_bg_x = 0
    @now_bg_y = 0
    @now_bg_z = 185
    # 通常時の実行
    xrxs_bp8_initialize
    # ビューポートを作成
    @viewport1 = Viewport.new(-192, -144, 1024, 768)
    # バトルバックスプライトを作成
    @battleback_sprite = Sprite.new(@viewport1)
    @battleback_name = ""
    # エネミースプライトを作成
    @enemy_sprites = []
    for enemy in $game_troop.enemies.reverse
      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
    end
    # 天候を作成
    @weather = RPG::Weather.new(@viewport1)
    # フレーム更新
    update
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update update
  def update
    # バトルバックのファイル名が現在のものと違う場合
    if @battleback_name != $game_temp.battleback_name
      @battleback_name = $game_temp.battleback_name
      if @battleback_sprite.bitmap != nil
        @battleback_sprite.bitmap.dispose
      end
      bg_bitmap = RPG::Cache.battleback(@battleback_name)
      bg_bitmap_stretch = Bitmap.new(1024, 768)
      bg_bitmap_stretch.stretch_blt(Rect.new(0, 0, 1024, 768), bg_bitmap, bg_bitmap.rect)
      @battleback_sprite.bitmap = bg_bitmap_stretch
    end
    # カメラ位置が動いた場合
    if @now_bg_x != $xcam_x or @now_bg_y != $xcam_y or @now_bg_z != $xcam_z
      # ズーム率
      zoom = 1.00 * 185 / $xcam_z
      @battleback_sprite.zoom_x = zoom
      @battleback_sprite.zoom_y = zoom
      # カメラzによる位置の修正
      maximum = 192 * (296 - $xcam_z) / 111
      $xcam_x = [[$xcam_x, -maximum].max, maximum].min
      # 背景位置更新
      @battleback_sprite.x = -$xcam_x * zoom - 512 * (zoom - 1)
      @battleback_sprite.y =  $xcam_y * zoom - 384 * (zoom - 1)
      # 値更新
      @now_bg_x = $xcam_x
      @now_bg_y = $xcam_y
      @now_bg_z = $xcam_z
    end
    # 戻す
    xrxs_bp8_update
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias xrxs_bp8_main main
  def main
    # カメラ初期位置決定
    $xcam_x = 0
    $xcam_y = 0
    $xcam_z = 295
    # カメラの最初の目的値
    @xcam_x_destination = 0
    @xcam_y_destination = 0
    @xcam_z_destination = 185
    # 今、注目バトラーは無し。
    @xcam_watch_battler = nil
    # 初期化
    @wait_count_xcam = 0
    # 戻す
    xrxs_bp8_main
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update update
  def update
    # カメラ位置の更新。
    if @wait_count_xcam > 0
      # ウェイトカウントを減らす
      @wait_count_xcam -= 1
    else
      if $xcam_z != @xcam_z_destination
        if $xcam_z < @xcam_z_destination
          distance = [(@xcam_z_destination - $xcam_z)/8, 1].max
        else
          distance = [(@xcam_z_destination - $xcam_z)/8, -1].min
        end
        $xcam_z = [[$xcam_z + distance, 74].max, 296].min
      end
      if @xcam_watch_battler != nil
        if $xcam_x != @xcam_watch_battler.x_pos
          if ($xcam_x - @xcam_watch_battler.x_pos).abs < 8
            distance = @xcam_watch_battler.x_pos - $xcam_x
          elsif $xcam_x < @xcam_watch_battler.x_pos
            distance = [(@xcam_watch_battler.x_pos - $xcam_x)/8, 8].max
          else
            distance = [(@xcam_watch_battler.x_pos - $xcam_x)/8, -8].min
          end
          maximum = 192 * (296 - $xcam_z) / 111
          $xcam_x = [[$xcam_x + distance, -maximum].max, maximum].min
        end
      elsif $xcam_x != @xcam_x_destination
        if ($xcam_x - @xcam_x_destination).abs < 8
          distance = @xcam_x_destination - $xcam_x
        elsif $xcam_x < @xcam_x_destination
          distance = [(@xcam_x_destination - $xcam_x)/8, 8].max
        else
          distance = [(@xcam_x_destination - $xcam_x)/8, -8].min
        end
        maximum = 192 * (296 - $xcam_z) / 111
        $xcam_x = [[$xcam_x + distance, -maximum].max, maximum].min
      end
      if @xcam_watch_battler != nil
        if $xcam_y != @xcam_watch_battler.y_pos
          if ($xcam_y - @xcam_watch_battler.y_pos).abs < 8
            distance = @xcam_watch_battler.y_pos - $xcam_y
          elsif $xcam_y < @xcam_watch_battler.y_pos
            distance = [(@xcam_watch_battler.y_pos - $xcam_y)/8, 8].max
          else
            distance = [(@xcam_watch_battler.y_pos - $xcam_y)/8, -8].min
          end
          maximum = 144 * (296 - $xcam_z) / 111
          $xcam_y = [[$xcam_y + distance, -maximum].max, maximum].min          
        end
      elsif $xcam_y != @xcam_y_destination
        if $xcam_y < @xcam_y_destination
          distance = [(@xcam_y_destination - $xcam_y)/8, 1].max
        else
          distance = [(@xcam_y_destination - $xcam_y)/8, -1].min
        end
        maximum = 164 * (296 - $xcam_z) / 111
        $xcam_y = [[$xcam_y + distance, -maximum].max, maximum].min
      end
    end
    # 通常実行
    xrxs_bp8_update
  end
  #--------------------------------------------------------------------------
  # ● パーティコマンドフェーズ開始
  #--------------------------------------------------------------------------
  alias xrxs_bp8_start_phase2 start_phase2
  def start_phase2
    # カメラ:センタリング
    @xcam_watch_battler = nil
    @xcam_x_destination = 0
    @xcam_z_destination = 185
    # 戻す
    xrxs_bp8_start_phase2
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクターコマンドフェーズ)
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update_phase3 update_phase3
  def update_phase3
    # カメラをキャラ位置へ
    if @active_battler != nil and @active_battler.actor_in_battlefield
      @xcam_x_destination = @active_battler.x_pos
      #@xcam_z_destination = 175
    end
    xrxs_bp8_update_phase3
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクターコマンドフェーズ : エネミー選択)
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update_phase3_enemy_select update_phase3_enemy_select
  def update_phase3_enemy_select
    # カメラ:敵ターゲットをズームアップ
    @xcam_x_destination = $game_troop.enemies[@enemy_arrow.index].x_pos * $game_troop.enemies[@enemy_arrow.index].zoom
    @xcam_z_destination = 175
    # 戻す
    xrxs_bp8_update_phase3_enemy_select
  end
  #--------------------------------------------------------------------------
  # ● エネミー選択終了
  #--------------------------------------------------------------------------
  alias xrxs_bp8_end_enemy_select end_enemy_select
  def end_enemy_select
    # カメラ:中心へ
    @xcam_x_destination = 0
    @xcam_z_destination = 185
    # 戻す
    xrxs_bp8_end_enemy_select
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update_phase4_step2 update_phase4_step2
  def update_phase4_step2
    # 戻す
    xrxs_bp8_update_phase4_step2
    # ステップ 3 に移行する場合
    if @phase4_step == 3
      if @active_battler.is_a?(Game_Enemy) or @active_battler.actor_in_battlefield
        # カメラ:行動バトラーへのズームアップを予約
        @xcam_x_destination = @active_battler.x_pos * @active_battler.zoom if @active_battler.x_pos != nil
        @xcam_z_destination = 175
      end
      # 最低 20 フレーム待つ
      @wait_count = 20
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update_phase4_step3 update_phase4_step3
  def update_phase4_step3
    # 戻す
    xrxs_bp8_update_phase4_step3
    if @target_battlers.size > 0 and
      (@target_battlers[0].is_a?(Game_Enemy) or @target_battlers[0].actor_in_battlefield)
      # カメラ:ターゲットへのズームアップを予約
      @xcam_x_destination = @target_battlers[0].x_pos * @target_battlers[0].zoom if @target_battlers[0] != nil
      @xcam_z_destination = 185
      # もし対象アニメが「位置:画面」のものの場合
      if @animation2_id > 0 and $data_animations[@animation2_id].position == 3
        # カメラをセンタリング
        @xcam_x_destination = 0
        # ズームアウトまでやっちゃう・w・
        @xcam_z_destination = 222
      end
    end
    # 最低 20 フレーム待つ
    @wait_count = 20
  end
  #--------------------------------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------------------------------
  alias xrxs_bp8_start_phase5 start_phase5
  def start_phase5
    @xcam_z_destination = 185
    xrxs_bp8_start_phase5
  end
end
#==============================================================================
# ◇ RPG::再定義「戦闘中の"画面"アニメの位置修正」
#==============================================================================
module RPG
  class Sprite < ::Sprite
    def animation_set_sprites(sprites, cell_data, position)
      for i in 0..15
        sprite = sprites[i]
        pattern = cell_data[i, 0]
        if sprite == nil or pattern == nil or pattern == -1
          sprite.visible = false if sprite != nil
          next
        end
        sprite.visible = true
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        if position == 3
          if self.viewport != nil
            if $scene.is_a?(Scene_Battle)
              sprite.x = self.viewport.rect.width / 2
              sprite.y = 304
            else
              sprite.x = self.viewport.rect.width / 2
              sprite.y = self.viewport.rect.height - 160
            end
          else
            sprite.x = 320
            sprite.y = 240
          end
        else
          sprite.x = self.x - self.ox + self.src_rect.width / 2
          sprite.y = self.y - self.oy + self.src_rect.height / 2
          sprite.y -= self.src_rect.height / 4 if position == 0
          sprite.y += self.src_rect.height / 4 if position == 2
        end
        sprite.x += cell_data[i, 1]
        sprite.y += cell_data[i, 2]
        sprite.z = 2000
        sprite.ox = 96
        sprite.oy = 96
        sprite.zoom_x = cell_data[i, 3] / 100.0
        sprite.zoom_y = cell_data[i, 3] / 100.0
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
        sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
        sprite.blend_type = cell_data[i, 7]
      end
    end
  end
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 追加・公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :x_pos                    # バトルフィールド 横 位置(+が右 )
  attr_accessor :y_pos                    # バトルフィールド 高さ 位置(+が上 )
  attr_accessor :z_pos                    # バトルフィールド奥行き位置(+が手前)
  attr_accessor :zoom                     # 現在のズーム倍率
  attr_accessor :x_destination            # X 目的地
  attr_accessor :y_blow                   # 現在Y 吹っ飛び速度
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 追加・公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :actor_in_battlefield     # アクターもフィールドに
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias xrxs_bp12_setup setup
  def setup(actor_id)
    xrxs_bp12_setup(actor_id)
    # 機能"アクターもフィールドに"
    # ここを true にすると、 ↓「アクターもフィールドに」が有効になる。
    @actor_in_battlefield = true
    @x_pos          =    0
    @y_pos          =    0
    @field_x_offset = -224
    @field_y_offset = -144
    @z_pos          =    0
    @zoom           = 1.00
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標の取得
  #--------------------------------------------------------------------------
  alias xrxs_bp12_screen_x screen_x
  def screen_x
    # パーティ内の並び順から X 座標を計算して返す
    if self.index != nil
      if @actor_in_battlefield
        return  96 - @field_x_offset + (@x_pos.to_i - $xcam_x.to_i) * @zoom
      else
        return xrxs_bp12_screen_x
      end
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Y 座標の取得
  #--------------------------------------------------------------------------
  def screen_y
    if @actor_in_battlefield
      return  96 - @field_y_offset + (-@y_pos.to_i + 64 + $xcam_y.to_i) * @zoom
    else
      return 464
    end
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias xrxs_bp12_main main
  def main
    # バトラー位置
    for battler in $game_party.actors
      case battler.index
      when 0 # パーティ1人目の位置
        battler.x_pos  = -304
        battler.z_pos  = -24
      when 1 # パーティ2人目の位置
        battler.x_pos  = -240
        battler.z_pos  = 0
      when 2 # パーティ3人目の位置
        battler.x_pos  = -192
        battler.z_pos  = -24
      when 3 # パーティ4人目の位置
        battler.x_pos  = -128
        battler.z_pos  = 0
      end
      battler.x_destination = battler.x_pos
      battler.y_blow = 0
      battler.y_pos  = 0
    end
    # 戻す
    xrxs_bp12_main
  end
end

#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class Scene_Battle
  # 「状況に応じたフォーム変化を行う」
  #    (基本的に true で使用しますが、"待機アニメ"だけ使用したいとき、または
  #     Full-Move Battle Systemを使用する場合、false に設定して下さい。)
  DO_FORM_UPDATE = true
  # "バッドステート"であると判断するステートのIDの配列
  BAD_STATE_IDS = [1, 2, 3, 4, 5, 6, 7, 8]
  # 「自動アニメ」稼動
  AUTO_UPDATE_DECPLACE = true
end
#==============================================================================
# □ 固定値の設定
#==============================================================================
class Scene_Battle
  # フォームIDリスト
  FORM_ID_BASIC        =   1              # 待機:基本(1に固定)
  FORM_ID_BAD_STATE    =  31              # 待機:バッドステート
  FORM_ID_STEP3_ATTACK =   1              # 通常攻撃   :行動側アニメ時
  FORM_ID_STEP4_ATTACK = 121              # 通常攻撃   :対象側アニメ時
  FORM_ID_STEP3_GUARD  =  61              # 防御選択   :行動側アニメ時
  FORM_ID_STEP4_GUARD  =  61              # 防御選択   :対象側アニメ時
  FORM_ID_STEP3_ESCAPE =  51              # 逃げる    :行動側アニメ時
  FORM_ID_STEP4_ESCAPE =  51              # 逃げる    :対象側アニメ時
  FORM_ID_STEP3_NOMOVE =   1              # なにもしない :行動側アニメ時
  FORM_ID_STEP4_NOMOVE =   1              # なにもしない :対象側アニメ時
  FORM_ID_STEP3_SKILL  = 201              # スキル(非魔法):行動側アニメ時
  FORM_ID_STEP4_SKILL  = 211              # スキル(非魔法):対象側アニメ時
  FORM_ID_STEP3_MAGIC  = 221              # スキル( 魔法 ):行動側アニメ時
  FORM_ID_STEP4_MAGIC  = 231              # スキル( 魔法 ):対象側アニメ時
  FORM_ID_STEP3_ITEM   = 241              # アイテム使用 :行動側アニメ時
  FORM_ID_STEP4_ITEM   = 251              # アイテム使用 :対象側アニメ時
  FORM_ID_STEP4_DAMAGE =  71              # ダメージ受け
  FORM_ID_STEP4_GUARD  =  61              # 攻撃を防御時
  FORM_ID_STEP4_HEALED = 251              # 非ダメージ受け時(回復等)
  FORM_ID_STEP4_AVOID  =  51              # 回避時
  FORM_ID_WIN_ACTION   = 991              # 戦闘勝利時
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 追加・公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :now_form_id              # フォームID
  attr_accessor :battler_name_basic_form  # バトラーの基本バトラーグラフィック
  #--------------------------------------------------------------------------
  # ● フォームID
  #--------------------------------------------------------------------------
  def now_form_id
    if @now_form_id != nil
      return @now_form_id
    else
      return 1
    end
  end
  #--------------------------------------------------------------------------
  # ● バトラーグラフィックの変更
  #    form_id : 変更後のフォームのID
  #--------------------------------------------------------------------------
  def transgraphic(form_id)
    # now_form_id の更新。
    @now_form_id = form_id
    # 0 が指定された場合、グラフィックを消す
    if form_id == 0
      @battler_name = ""
      return
    end
    # 0の付加
    form_id_s = ""
    if form_id < 100
      form_id_s += "0"
    end
    if form_id < 10
      form_id_s += "0"
    end
    form_id_s += form_id.to_s
    battler_form_name = @battler_name_basic_form.to_s + "_" + form_id_s.to_s
    if FileTest.exist?("Graphics/Battlers/" + battler_form_name + ".png")
      @battler_name = battler_form_name
    elsif form_id == 1
      if FileTest.exist?("Graphics/Battlers/" + @battler_name_basic_form.to_s + ".png")
        @battler_name = @battler_name_basic_form.to_s
      end
    end
    if FileTest.exist?("Audio/SE/" + battler_form_name + ".wav")
      Audio.se_play("Audio/SE/" + battler_form_name)
    end
  end
end

#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :battler_name_basic_form      # バトラー ファイル名:基本
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias xrxs_bp11_setup setup
  def setup(actor_id)
    xrxs_bp11_setup(actor_id)
    @battler_name_basic_form = @battler_name
  end
  #--------------------------------------------------------------------------
  # ● グラフィックの変更
  #--------------------------------------------------------------------------
  alias xrxs_bp11_set_graphic set_graphic
  def set_graphic(character_name, character_hue, battler_name, battler_hue)
    xrxs_bp11_set_graphic(character_name, character_hue, battler_name, battler_hue)
    @battler_name_basic_form = @battler_name
  end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bp11_initialize initialize
  def initialize(troop_id, member_index)
    xrxs_bp11_initialize(troop_id, member_index)
    @battler_name_basic_form = @battler_name
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias xrxs_bp11_main main
  def main
    @wait_count_motion = 0
    xrxs_bp11_main
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bp11_update update
  def update
    xrxs_bp11_update
    # バトラーグラフィック表示更新
    if @wait_count_motion > 0
      # ウェイトカウントを減らす
      @wait_count_motion -= 1
    elsif AUTO_UPDATE_DECPLACE
      for battler in $game_party.actors + $game_troop.enemies
        # バトラー待機グラフィックの更新
        trance_id = battler.now_form_id
        # 一つ進める
        trance_id += 1
        # 循環
        trance_id -= 8 if trance_id%10 == 9
        battler.transgraphic(trance_id)
      end
      @wait_count_motion = 2
    end
  end
  #--------------------------------------------------------------------------
  # ● プレバトルフェーズ開始
  #--------------------------------------------------------------------------
  alias xrxs_bp11_start_phase1 start_phase1
  def start_phase1
    xrxs_bp11_start_phase1
    # モーションをリセット
    actors_motion_reset
  end
  #--------------------------------------------------------------------------
  # ● アクター達のモーションをリセット
  #--------------------------------------------------------------------------
  def actors_motion_reset
    for actor in $game_party.actors
      form_id = FORM_ID_BASIC
      for state in actor.states
        form_id = FORM_ID_BAD_STATE if BAD_STATE_IDS.include?(state.id)
      end
      actor.transgraphic(form_id)
    end
  end
  #DO_FORM_UPDATE---
  if DO_FORM_UPDATE
  #--------------------------------------------------------------------------
  # ● 勝敗判定
  #--------------------------------------------------------------------------
  alias xrxs_bp11_judge judge
  def judge
    bool = xrxs_bp11_judge
    if bool
      for battler in $game_party.actors
        if battler.dead? == false
          battler.transgraphic(FORM_ID_WIN_ACTION)
        end
      end
    end
    return bool
  end
  #--------------------------------------------------------------------------
  # ● バトル終了
  #--------------------------------------------------------------------------
  alias xrxs_bp11_battle_end battle_end
  def battle_end(result)
    # モーションを基本に戻す
    for actor in $game_party.actors
      actor.set_graphic(actor.character_name, actor.character_hue, actor.battler_name_basic_form, actor.battler_hue)
    end
    # 呼び戻す
    xrxs_bp11_battle_end(result)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  #--------------------------------------------------------------------------
  alias xrxs_bp11_update_phase4_step3 update_phase4_step3
  def update_phase4_step3
    # モーション:行動側のモーション
    # アクションの種別で分岐
    case @active_battler.current_action.kind
    when 0  # 基本
      # 攻撃の場合
      if @active_battler.current_action.basic == 0
        @active_battler.transgraphic(FORM_ID_STEP3_ATTACK)
      end
      # 防御の場合
      if @active_battler.current_action.basic == 1
        @active_battler.transgraphic(FORM_ID_STEP3_GUARD)
      end
      # 逃げるの場合
      if @active_battler.is_a?(Game_Enemy) and @active_battler.current_action.basic == 2
        @active_battler.transgraphic(FORM_ID_STEP3_ESCAPE)
      end
      # 何もしないの場合
      if @active_battler.current_action.basic == 3
        @active_battler.transgraphic(FORM_ID_STEP3_NOMOVE)
      end
    when 1  # スキル時、魔法判別
      if skill_is_a_magic?(@skill)
        @active_battler.transgraphic(FORM_ID_STEP3_MAGIC)
      else
        @active_battler.transgraphic(FORM_ID_STEP3_SKILL)
      end
    when 2  # アイテム
      @active_battler.transgraphic(FORM_ID_STEP3_ITEM)
    end
    # 戻す
    xrxs_bp11_update_phase4_step3
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  #--------------------------------------------------------------------------
  alias xrxs_bp11_update_phase4_step4 update_phase4_step4
  def update_phase4_step4
    # モーション:行動側のモーション
    # アクションの種別で分岐
    case @active_battler.current_action.kind
    when 0  # 基本
      # 攻撃の場合
      if @active_battler.current_action.basic == 0
        @active_battler.transgraphic(FORM_ID_STEP4_ATTACK)
      end
      # 防御の場合
      if @active_battler.current_action.basic == 1
        @active_battler.transgraphic(FORM_ID_STEP4_GUARD)
      end
      # 逃げるの場合
      if @active_battler.is_a?(Game_Enemy) and @active_battler.current_action.basic == 2
        @active_battler.transgraphic(FORM_ID_STEP4_ESCAPE)
      end
      # 何もしないの場合
      if @active_battler.current_action.basic == 3
        @active_battler.transgraphic(FORM_ID_STEP4_NOMOVE)
      end
    when 1  # スキル時、魔法判別
      if skill_is_a_magic?(@skill)
        @active_battler.transgraphic(FORM_ID_STEP4_MAGIC)
      else
        @active_battler.transgraphic(FORM_ID_STEP4_SKILL)
      end
    when 2  # アイテム
      @active_battler.transgraphic(FORM_ID_STEP4_ITEM)
    end
    # モーション:対象側のダメージ
    for target in @target_battlers
      if target.damage == "Miss"
        target.transgraphic(FORM_ID_STEP4_AVOID)
      elsif target.damage.is_a?(Numeric) and target.damage > 0
        if target.guarding?
          target.transgraphic(FORM_ID_STEP4_GUARD)
        else
          target.transgraphic(FORM_ID_STEP4_DAMAGE)
        end
      else
        target.transgraphic(FORM_ID_STEP4_HEALED)
      end
    end
    # 戻す
    xrxs_bp11_update_phase4_step4
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  #--------------------------------------------------------------------------
  alias xrxs_bp11_update_phase4_step6 update_phase4_step6
  def update_phase4_step6
    # 行動者のモーションのリセット
    form_id = FORM_ID_BASIC
    for state in @active_battler.states
      form_id = FORM_ID_BAD_STATE if BAD_STATE_IDS.include?(state.id)
    end
    @active_battler.transgraphic(form_id)
    # 対象のモーションリセット
    if @target_battlers != nil
      for target in @target_battlers
        form_id = FORM_ID_BASIC
        for state in target.states
          form_id = FORM_ID_BAD_STATE if BAD_STATE_IDS.include?(state.id)
        end
        target.transgraphic(form_id)
      end
    end
    xrxs_bp11_update_phase4_step6
  end
  end #---DO_FORM_UPDATE
  #--------------------------------------------------------------------------
  # ● スキルが魔法スキルがどうか判別
  #--------------------------------------------------------------------------
  def skill_is_a_magic?(skill)
    return false if skill == nil
    return true if skill.str_f < skill.int_f
    return false
  end
end
 
Hay quá ,bạn có thể cho tên của trang web đó ko ? đó là 1 bước tiến đó , rpg maker xp có thể dùng để làm cả game [RPG]Action , quá hay !
 
Ừm cái script này tốt lém đó.Nhưng mình không chuyên thể loại RPG chứ không dùng action

http://s15.yousendit.com/d.aspx?id=374SDY1DZFQZU3IWYYE0AIRQKM

Cái đó là mẫu . Cái này xuất xứ bến JP tui hông rõ nó nữa, chỉ biết thằng viết ra cái này cũng có 1 trang web riêng .Lúc trước tui post hình trong cái topic "download soure" + trailer đó tự làm hết , viết nhạc ...... đến giờ cũng chưa có Demo chính thức và chỉ có tin tức thông báo bình thường (bằng tiếng JP) ....

=> Ông đó giỏi thật !!
 
Ai có thì up ảnh demo lên cho xem dzới , chứ ko bít gì mà đem êề xài thử mệt lém
 
Ken à , ông cũng cho lại cái link đi nha , cái link kia die lâu roài . Tiện thể nếu được thì giới thiệu luôn chút :D
 
Back
Top