オーバードライブカスタム



オーバードライブ2の改造スクリプト

改造内容:
・OD条件を一番前に持ってくることでマジックナンバーを定義値に変更
・OverDrive ゲージ増加量をハッシュに変更
・敵を撃破した際にもODゲージが増えるように対応
・ODコストをスキル名付与から属性に変更

※このスクリプトの原作者はTOMY様です。

変更点
2016:08:01
・アイテムによるOD回復を実装
・OD条件に敗北を追加(イベント戦闘などで使ってください)
・オーバードライブ譲渡スキルを実装

#----------------------------------------------------------------------------
# オーバードライブカスタム 『歪曲王』 by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作:     ◆ オーバードライブ2 - KGC_OverDrive2 ◆
#           ◇ Last update : 2008/08/10 ◇
# 原作者:   TOMY様
# HP:       Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# ≪消費SP改造[SPCostAlter]≫より下
# ≪オーバードライブ[OverDrive]≫との併用不可
# 
# 改造内容:
# ・OD条件を一番前に持ってくることでマジックナンバーを定義値に変更
# ・OverDrive ゲージ増加量をハッシュに変更
# ・敵を撃破した際にもODゲージが増えるように対応
# ・ODコストをスキル名付与から属性に変更
# 
# メモ
# ・アイテムによるOD回復ですが、HP、SP回復を0にしておくとmiss表示になってしまい
#  ます。いずれ修正とかしようかと思いますが、とりあえずは戦闘不能を回復する
#  けと、戦闘不能以外を対象としてください。
# 
#============================================================================
# 変更点
# 2016:08:01
# ・アイテムによるOD回復を実装
# ・OD条件に敗北を追加(イベント戦闘などで使ってください)
# ・オーバードライブ譲渡スキルを実装

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["OverDrive2"] = true

#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================

# OD条件
module ODType
  ATTACK  = "attack"
  DAMAGE  = "damage"
  VICTORY = "victory"
  ESCAPE  = "escape"
  ALONE   = "alone"
  ACTION  = "action"
  FATAL   = "fatal"
  GUARD   = "guard"
  DEFEAT  = "defeat"
  LOSE    = "lose"
end

module KGC
module OverDrive2
  # ◆ OverDrive ゲージ最大値
  #  普通はこのままでOK。微調整したい場合に変更。
  GAUGE_MAX = 1000
  
  # ◆ OverDrive ゲージ増加量
  #  高いほどゲージが溜まりやすい。
  #  (500 だと、最大HP相当のダメージで 500 溜まる)
  GAIN_RATEs = {
    ODType::ATTACK  =>   80, # 攻撃
    ODType::DAMAGE  =>  500, # 被ダメージ
    ODType::VICTORY =>  200, # 勝利
    ODType::ESCAPE  => -200, # 逃走
    ODType::ALONE   =>  160, # 孤独
    ODType::ACTION  =>   40, # 行動
    ODType::FATAL   =>  160, # 瀕死
    ODType::GUARD   =>   50, # 防御
    ODType::DEFEAT  =>  200, # 撃破
    ODType::LOSE    => -200, # 敗北
  }
  
  # ◆デフォルトの OverDrive タイプ
  #  複数指定可能。
  DEFAULT_OD_TYPE = [ODType::ATTACK, ODType::DAMAGE, ODType::DEFEAT, ODType::ESCAPE]

  # ◆ OverDrive ゲージ画像
  #  "Graphics/Pictures" から読み込む。
  #  拡張子省略可。
  OD_GAUGE  = "gauge_od2"

  # ◆非戦闘時 OverDrive ゲージ位置 [x, y]
  #  アクター名表示位置からの相対座標。
  GAUGE_POSITION = [-28, 0]
  
  # ◆非戦闘時 OverDrive ゲージ長補正
  #  ゲージの長さに加算。(負にすれば短くなる)
  GAUGE_LENGTH   = 52

  # ◆戦闘時 OverDrive ゲージ位置 [x, y]
  GAUGE_POSITION_BATTLE = [-28, 2]
  
  # ◆非戦闘時 OverDrive ゲージ長補正
  GAUGE_LENGTH_BATTLE   = 52

  # ◆死亡(HP 0)時に OverDrive ゲージを 0 にする
  EMPTY_ON_DEAD = true

  # ◆ OverDrive ゲージを表示しないアクター
  #  ゲージを隠すアクターのIDを配列に格納。
  HIDE_GAUGE_ACTOR = []

  # ◆非戦闘時は OverDrive ゲージを隠す
  HIDE_GAUGE_NOT_IN_BATTLE = false
  
  # ◆オーバードライブ属性
  OVERDRIVE_ID    = 78
  # ◆オーバードライブ譲渡属性
  OVERDRIVE_HO_ID = 79
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

module OD_Cost_Gain
  OD_COST_WD = "OD消費"
  OD_GAIN_WD = "OD積算"
  #--------------------------------------------------------------------------
  # ○ ODコスト取得
  #--------------------------------------------------------------------------
  def get_od_cost(type)
    od_cost_val = 0
    case type
    when OD_COST_WD
      for j in @element_set 
        ele_set = $data_system.elements[j]
        if ele_set != nil
          if ele_set =~ /^#{OD_COST_WD}([0-9]+)$/
            od_cost_val += $1.to_i
          end
        end
      end
    when OD_GAIN_WD
      for j in @element_set
        ele_set = $data_system.elements[j]
        if ele_set != nil
          if ele_set =~ /^#{OD_GAIN_WD}([0-9]+)$/
            od_cost_val += $1.to_i
          end
        end
      end
    else
      p "typeが不正です"
    end
    return [od_cost_val, 100].min
  end
  
  #--------------------------------------------------------------------------
  # ○ 消費ゲージ量取得
  #--------------------------------------------------------------------------
  def od_cost
    od_cost_val = get_od_cost(OD_COST_WD)
    
    # コストが0の場合
    if od_cost_val == 0
      return KGC::OverDrive2::GAUGE_MAX
    else
      return KGC::OverDrive2::GAUGE_MAX / 100 * od_cost_val
    end
  end
  #--------------------------------------------------------------------------
  # ○ ゲージ増加率取得
  #--------------------------------------------------------------------------
  def od_gain_rate
    od_cost_val = get_od_cost(OD_GAIN_WD)
    
    # コストが0の場合
    if od_cost_val == 0
      return 100
    else
      return od_cost_val
    end
  end
  #--------------------------------------------------------------------------
  # ○ OverDriveか判定
  #--------------------------------------------------------------------------
  def overdrive?
    if self.element_set.include?(KGC::OverDrive2::OVERDRIVE_ID)
      return true
    end
    return false
  end
end

#==============================================================================
# ■ RPG::Item
#==============================================================================

class RPG::Item
  include OD_Cost_Gain
end

#==============================================================================
# ■ RPG::Skill
#==============================================================================

class RPG::Skill
  include OD_Cost_Gain
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Temp
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :overdrive_used           # OverDrive スキル使用フラグ (非戦闘)
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_OverDrive2 initialize
  def initialize
    initialize_KGC_OverDrive2

    @overdrive_used = false
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Battler (分割定義 1)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「攻撃」
  #--------------------------------------------------------------------------
  def drive_attack?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「被ダメージ」
  #--------------------------------------------------------------------------
  def drive_damage?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「勝利」
  #--------------------------------------------------------------------------
  def drive_victory?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「逃走」
  #--------------------------------------------------------------------------
  def drive_escape?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「孤独」
  #--------------------------------------------------------------------------
  def drive_alone?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「行動」
  #--------------------------------------------------------------------------
  def drive_action?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「瀕死」
  #--------------------------------------------------------------------------
  def drive_fatal?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「防御」
  #--------------------------------------------------------------------------
  def drive_guard?
    return false
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「撃破」
  #--------------------------------------------------------------------------
  def drive_defeat?
    return false
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Battler (分割定義 3)
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルの使用可能判定
  #--------------------------------------------------------------------------
  alias skill_can_use_KGC_OverDrive2? skill_can_use?
  def skill_can_use?(skill_id)
    return skill_can_use_KGC_OverDrive2?(skill_id) if self.is_a?(Game_Enemy)

    skill = $data_skills[skill_id]
    return false if skill == nil

    if skill.overdrive?
      return false if self.overdrive < skill.od_cost
    end
    return skill_can_use_KGC_OverDrive2?(skill_id)
  end
  #--------------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #--------------------------------------------------------------------------
  alias attack_effect_KGC_OverDrive2 attack_effect
  def attack_effect(attacker)
    result = attack_effect_KGC_OverDrive2(attacker)

    # ダメージを受けた場合
    if result && self.damage.is_a?(Numeric)
      overdrive_increase(attacker)
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ○ ODゲージ増加処理
  #--------------------------------------------------------------------------
  def overdrive_increase(attacker, skill = nil)
    if self.class != attacker.class && self.damage > 0
      # 攻撃時増加判定
      if attacker.drive_attack?
        od_gain = [KGC::OverDrive2::GAIN_RATEs[ODType::ATTACK], 1].max
        if skill != nil
          od_gain = od_gain * skill.od_gain_rate / 100
        end
        attacker.overdrive += od_gain
      end
      # 被ダメージ時増加判定
      if self.drive_damage?
        od_gain = self.damage *
          KGC::OverDrive2::GAIN_RATEs[ODType::DAMAGE] / self.maxhp
        self.overdrive += [od_gain, 1].max
      end
    end

    # 死亡判定
    if KGC::OverDrive2::EMPTY_ON_DEAD && self.is_a?(Game_Actor) && self.dead?
      self.overdrive = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_OverDrive2 skill_effect
  def skill_effect(user, skill)
    result = skill_effect_KGC_OverDrive2(user, skill)

    # ダメージを受けた場合
    if result && self.damage.is_a?(Numeric)
      overdrive_increase(user, skill)
    end
    # 非戦闘中に OverDrive スキルを使用した場合
    if !$game_temp.in_battle && !$game_temp.overdrive_used &&
        user.is_a?(Game_Actor) && skill.overdrive?
      user.overdrive -= skill.od_cost
      $game_temp.overdrive_used = true
    end
    return result
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  attr_writer :overdrive_type
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias setup_KGC_OverDrive2 setup
  def setup(actor_id)
    setup_KGC_OverDrive2(actor_id)

    @overdrive = 0
    @overdrive_type = [KGC::OverDrive2::DEFAULT_OD_TYPE].flatten
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive ゲージの取得
  #--------------------------------------------------------------------------
  def overdrive
    @overdrive = 0 if @overdrive == nil
    return @overdrive
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive ゲージの操作
  #--------------------------------------------------------------------------
  def overdrive=(value)
    @overdrive = [[value, 0].max, KGC::OverDrive2::GAUGE_MAX].min
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive タイプの取得
  #--------------------------------------------------------------------------
  def overdrive_type
    if !@overdrive_type.is_a?(Array)
      @overdrive_type = [KGC::OverDrive2::DEFAULT_OD_TYPE].flatten
    end
    return @overdrive_type
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「攻撃」
  #--------------------------------------------------------------------------
  def drive_attack?
    return overdrive_type.include?(ODType::ATTACK)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「被ダメージ」
  #--------------------------------------------------------------------------
  def drive_damage?
    return overdrive_type.include?(ODType::DAMAGE)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「勝利」
  #--------------------------------------------------------------------------
  def drive_victory?
    return overdrive_type.include?(ODType::VICTORY)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「逃走」
  #--------------------------------------------------------------------------
  def drive_escape?
    return overdrive_type.include?(ODType::ESCAPE)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「孤独」
  #--------------------------------------------------------------------------
  def drive_alone?
    return overdrive_type.include?(ODType::ALONE)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「行動」
  #--------------------------------------------------------------------------
  def drive_action?
    return overdrive_type.include?(ODType::ACTION)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「瀕死」
  #--------------------------------------------------------------------------
  def drive_fatal?
    return overdrive_type.include?(ODType::FATAL)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「防御」
  #--------------------------------------------------------------------------
  def drive_guard?
    return overdrive_type.include?(ODType::GUARD)
  end
  #--------------------------------------------------------------------------
  # ○ ドライブタイプ「撃破」
  #--------------------------------------------------------------------------
  def drive_defeat?
    return overdrive_type.include?(ODType::DEFEAT)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 名前の描画
  #--------------------------------------------------------------------------
  alias draw_actor_name_KGC_OverDrive2 draw_actor_name
  def draw_actor_name(actor, x, y)
    if $game_temp.in_battle || !KGC::OverDrive2::HIDE_GAUGE_NOT_IN_BATTLE
      pw = 120
      if defined?(get_parameter_width)
        pw = get_parameter_width
      end
      draw_actor_od_gauge(actor, x, y, pw)
    end

    draw_actor_name_KGC_OverDrive2(actor, x, y)
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive ゲージの描画
  #--------------------------------------------------------------------------
  def draw_actor_od_gauge(actor, x, y, in_width)
    if KGC::OverDrive2::HIDE_GAUGE_ACTOR.include?(actor.id)
      return
    end

    bitmap = self.contents
    gauge = RPG::Cache.picture(KGC::OverDrive2::OD_GAUGE)
    nx = x
    ny = y
    nw = in_width
    if $game_temp.in_battle
      nx += KGC::OverDrive2::GAUGE_POSITION_BATTLE[0]
      ny += KGC::OverDrive2::GAUGE_POSITION_BATTLE[1]
      nw += KGC::OverDrive2::GAUGE_LENGTH_BATTLE
    else
      nx += KGC::OverDrive2::GAUGE_POSITION[0]
      ny += KGC::OverDrive2::GAUGE_POSITION[1]
      nw += KGC::OverDrive2::GAUGE_LENGTH
    end
    gauge_width = calc_od_gauge_width(actor, nw)
    full = (gauge_width == nw - 64)
    draw_od_gauge_back(bitmap, gauge, nx, ny, nw)
    draw_od_gauge_inside(bitmap, gauge, nx, ny, nw, gauge_width, full)
    draw_od_gauge_fore(bitmap, gauge, nx, ny, nw)
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive ゲージ背景の描画
  #     bitmap : 描画先画像
  #     image  : ゲージ画像
  #     in_width : ゲージ内部の幅
  #--------------------------------------------------------------------------
  def draw_od_gauge_back(bitmap, image, x, y, in_width)
    src_rect = Rect.new(0, 0, 32, 32)
    bitmap.blt(x, y, image, src_rect)
    src_rect.set(32, 0, 96, 32)
    dest_rect = Rect.new(x + 32, y, in_width - 64, 32)
    bitmap.stretch_blt(dest_rect, image, src_rect)
    src_rect.set(128, 0, 32, 32)
    bitmap.blt(x + in_width - 32, y, image, src_rect)
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive ゲージ内部の描画
  #     bitmap : 描画先画像
  #     image  : ゲージ画像
  #     in_width    : ゲージ内部の幅
  #     gauge_width : ゲージ長
  #     full : ゲージ満タンフラグ
  #--------------------------------------------------------------------------
  def draw_od_gauge_inside(bitmap, image, x, y, in_width, gauge_width, full)
    src_rect = Rect.new(0, (full ? 64 : 32), 0, 32)
    src_rect.width = gauge_width * 96 / (in_width - 64)
    dest_rect = Rect.new(x + 32, y, gauge_width, 32)
    bitmap.stretch_blt(dest_rect, image, src_rect)
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive ゲージ前景の描画
  #     bitmap : 描画先画像
  #     image  : ゲージ画像
  #     in_width : ゲージ内部の幅
  #--------------------------------------------------------------------------
  def draw_od_gauge_fore(bitmap, image, x, y, in_width)
    src_rect = Rect.new(160, 0, 32, 32)
    bitmap.blt(x, y, image, src_rect)
    src_rect.set(192, 0, 96, 32)
    dest_rect = Rect.new(x + 32, y, in_width - 64, 32)
    bitmap.stretch_blt(dest_rect, image, src_rect)
    src_rect.set(288, 0, 32, 32)
    bitmap.blt(x + in_width - 32, y, image, src_rect)
  end
  #--------------------------------------------------------------------------
  # ○ OverDrive ゲージ幅の計算
  #--------------------------------------------------------------------------
  def calc_od_gauge_width(actor, in_width)
    gw = actor.overdrive * (in_width - 64) / KGC::OverDrive2::GAUGE_MAX
    return [[gw, 0].max, in_width - 64].min
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_BattleStatus
#==============================================================================

if $imported["Base Reinforce"] && KGC::BR_SHADOW_TEXT_NAME_BATTLE
class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● 名前の描画
  #--------------------------------------------------------------------------
  alias draw_actor_name_KGC_OverDrive2 draw_actor_name
  def draw_actor_name(actor, x, y)
    pw = 120
    if defined?(get_parameter_width)
      pw = get_parameter_width
    end
    draw_actor_od_gauge(actor, x, y, pw)
    
    draw_actor_name_KGC_OverDrive2(actor, x, y)
  end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Skill
#==============================================================================

class Scene_Skill
  #--------------------------------------------------------------------------
  # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  alias update_target_KGC_OverDrive2 update_target
  def update_target
    $game_temp.overdrive_used = false

    update_target_KGC_OverDrive2

    $game_temp.overdrive_used = false
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 1)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● バトル終了
  #     result : 結果 (0:勝利 1:逃走 2:敗北)
  #--------------------------------------------------------------------------
  alias battle_end_KGC_OverDrive2 battle_end
  def battle_end(result)
    
    odtype_set = [ODType::VICTORY, ODType::ESCAPE, ODType::LOSE]
    
    $game_party.actors.each { |actor|
      if actor.exist? && KGC::OverDrive2::DEFAULT_OD_TYPE.include?(odtype_set[result])
        actor.overdrive += KGC::OverDrive2::GAIN_RATEs[odtype_set[result]]
      end
    }

    battle_end_KGC_OverDrive2(result)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 3)
#==============================================================================

class Scene_Battle
if $OuterFlgs["Scope_Extend"]
  #--------------------------------------------------------------------------
  # ● 自分以外除外
  # scopeが5の場合って戦闘不能の単体選択で自分が選択されない気がするけど・・・
  #--------------------------------------------------------------------------
  alias exclude_own_scope_KGC_OverDrive2 exclude_own_scope
  def exclude_own_scope
    case @active_battler.current_action.kind
    when 1 # スキル
      # 効果範囲が味方単体
      if @skill.scope == 3 or @skill.scope == 5
        if $game_party.actors[@actor_arrow.index] == @active_battler && 
          @skill.overdrive? && @skill.element_set.include?(KGC::OverDrive2::OVERDRIVE_HO_ID)
          return true
        end
      end
    when 2 # アイテム
      # 効果範囲が味方単体
      if @item.scope == 3 or @item.scope == 5
        if $game_party.actors[@actor_arrow.index] == @active_battler && 
          @item.overdrive? && @item.element_set.include?(KGC::OverDrive2::OVERDRIVE_HO_ID)
          return true
        end
      end
    end
    # ここまできたら元の処理を実施
    exclude_own_scope_KGC_OverDrive2
  end
else
  #--------------------------------------------------------------------------
  # ● 自分以外除外
  # scopeが5の場合って戦闘不能の単体選択で自分が選択されない気がするけど・・・
  #--------------------------------------------------------------------------
  def exclude_own_scope
    case @active_battler.current_action.kind
    when 1 # スキル
      # 効果範囲が味方単体
      if @skill.scope == 3 or @skill.scope == 5
        if $game_party.actors[@actor_arrow.index] == @active_battler && 
          @skill.element_set.include?(KGC::OverDrive2::OVERDRIVE_HO_ID)
          return true
        end
      end
    when 2 # アイテム
      # 効果範囲が味方単体
      if @item.scope == 3 or @item.scope == 5
        if $game_party.actors[@actor_arrow.index] == @active_battler && 
          @item.element_set.include?(KGC::OverDrive2::OVERDRIVE_HO_ID)
          return true
        end
      end
    end
    # ここまできて何もなければ false を返す
    return false
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクターコマンドフェーズ : アクター選択)
  #--------------------------------------------------------------------------
  def update_phase3_actor_select
    # アクターアローを更新
    @actor_arrow.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # アクターの選択を終了
      end_actor_select
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      if exclude_own_scope
        # ブザー SE を演奏
        Sound.play_buzzer
      else
        # 決定 SE を演奏
        Sound.play_ok
        # アクションを設定
        @active_battler.current_action.target_index = @actor_arrow.index
        # アクターの選択を終了
        end_actor_select
        # スキルウィンドウ表示中の場合
        if @skill_window != nil
          # スキルの選択を終了
          end_skill_select
        end
        # アイテムウィンドウ表示中の場合
        if @item_window != nil
          # アイテムの選択を終了
          end_item_select
        end
        # 次のアクターのコマンド入力へ
        phase3_next_actor
      end
    end
  end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #--------------------------------------------------------------------------
  alias update_phase4_step2_KGC_OverDrive2 update_phase4_step2
  def update_phase4_step2
    if @active_battler.is_a?(Game_Actor)
      overdrive_increase(@active_battler, $game_party.actors)
    end

    update_phase4_step2_KGC_OverDrive2
  end
  #--------------------------------------------------------------------------
  # ● 基本アクション 結果作成
  #--------------------------------------------------------------------------
  alias make_basic_action_result_KGC_OverDrive2 make_basic_action_result
  def make_basic_action_result
    make_basic_action_result_KGC_OverDrive2

    if @active_battler.is_a?(Game_Actor)
      od_gain = 0
      # 防御
      if @active_battler.drive_guard? && @active_battler.current_action.basic == 1
        od_gain += KGC::OverDrive2::GAIN_RATEs[ODType::GUARD]
      end
      @active_battler.overdrive += od_gain
    end
  end
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  alias make_skill_action_result_KGC_OverDrive2 make_skill_action_result
  def make_skill_action_result
    make_skill_action_result_KGC_OverDrive2

    if @phase4_step != 1
      # オーバードライブスキルを使用した場合
      if @active_battler.is_a?(Game_Actor) && @skill.overdrive?
        @active_battler.overdrive -= @skill.od_cost
        # オーバードライブ譲渡スキルの場合
        if @skill.element_set.include?(KGC::OverDrive2::OVERDRIVE_HO_ID)
if !$OuterFlgs["Scope_Extend"]
          # ターゲットから自分を除外
          @target_battlers.delete(@active_battler)
end
          for target in @target_battlers
            target.overdrive += @skill.od_cost / @target_battlers.size
          end
        end
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # ● アイテムアクション 結果作成
  #--------------------------------------------------------------------------
  alias make_item_action_result_KGC_OverDrive2 make_item_action_result
  def make_item_action_result
    make_item_action_result_KGC_OverDrive2
    
    if @phase4_step != 1
      # オーバードライブアイテムを使用した場合
      if @active_battler.is_a?(Game_Actor) && @item.overdrive?
        @active_battler.overdrive += KGC::OverDrive2::GAUGE_MAX / 100 * @item.od_gain_rate
      end
    end
  end
  
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias update_phase4_step5_KGC_OverDrive2 update_phase4_step5
  def update_phase4_step5
    for target in @target_battlers
      next if !target.is_a?(Game_Enemy)
      next if !target.dead?
      next if !@active_battler.is_a?(Game_Actor)
      # 撃破
      od_gain = 0
      if @active_battler.drive_defeat?
        od_gain += KGC::OverDrive2::GAIN_RATEs[ODType::DEFEAT]
      end
      @active_battler.overdrive += od_gain
    end
    update_phase4_step5_KGC_OverDrive2
  end
  #--------------------------------------------------------------------------
  # ○ ODゲージ増加処理
  #--------------------------------------------------------------------------
  def overdrive_increase(battler, battler_list)
    od_gain = 0
    # 孤独戦闘
    if battler.drive_alone?
      alone = true
      battler_list.each { |b|
        # 生存者がいる場合は孤独ではない
        if !b.equal?(battler) && b.exist?
          alone = false
          break
        end
      }
      if alone
        od_gain += KGC::OverDrive2::GAIN_RATEs[ODType::ALONE]
      end
    end

    # 行動
    if battler.drive_action?
      od_gain += KGC::OverDrive2::GAIN_RATEs[ODType::ACTION]
    end

    # 瀕死
    if battler.drive_fatal? && battler.hp <= battler.maxhp / 4
      od_gain += KGC::OverDrive2::GAIN_RATEs[ODType::FATAL]
    end

    battler.overdrive += od_gain
  end
end
ついでにゲージ素材もつくってみた ・・・ストライクウィッチーズのタイトルロゴの一部に見えるのは気のせいです

戻る