#----------------------------------------------------------------------------
# オーバードライブカスタム 『歪曲王』 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
|