#----------------------------------------------------------------------------
# スリップダメージ改造 By 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作: ▼▲▼ XRXS17. スリップダメージ防御/効果量詳細化 ver.2 ▼▲▼ built101021
# 原作者: 森穂様、XRXS.様
# HP: 小さな本屋
# アドレス: http://xrxs.at-ninja.jp/
#
# 必須ライブラリ
# XRXS. 装備属性取得機構
#
# 改造内容:
# (・マップでのスリップダメージ(回復)ができるように改良)
# ・SPのスリップダメージも設定できるように改良
#==============================================================================
# 更新っぽいもの
# 2007:02:13
# ・スリップダメージ防御/効果量詳細化 ver.2に対応(というかそれを改造)
# ・ややこしかったマップでのスリップダメージの設定を簡略化(と、いうか省略化)
#
# 2007:02:15
# ・微修正
#
# 2007:04:23
# ・SPスリップ回復のみを設定するとSPスリップダメージになるバグを修正
#
# 2012:03:03
# ・スリップダメージ用文字列を直値から定数に変更
#
# 2015:10:01
# ・VXA風Sound対応
#==============================================================================
# --- XRXS. スリップダメージ詳細化 ---
#==============================================================================
module XRXS17
HP_SLIP_WD = "HPスリップ"
SP_SLIP_WD = "SPスリップ"
#--------------------------------------------------------------------------
# ○ 指定バトラーのスリップダメージの効果量の取得
#--------------------------------------------------------------------------
def self.slip_amount(battler)
# 数値の初期化
slip_damage_HP = 0
slip_damage_SP = 0
slip_damage_H_Val = 0
slip_damage_S_Val = 0
# バトラーのステートを取得
for state_id in battler.states
# ステートの取得
state = $data_states[state_id]
# スリップダメージ有りの場合
if state.slip_damage
# そのステートが持っているスリップダメージの
# LvプラスステートまたはLvマイナスステートを判定。
for j in state.plus_state_set
# プラスステートの取得
plus_state = $data_states[j]
if plus_state != nil
if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_HP += $1.to_i
end
if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_SP += $1.to_i
end
if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/
slip_damage_H_Val += $1.to_i
end
if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/
slip_damage_S_Val += $1.to_i
end
end
end
for j in state.minus_state_set
# マイナスステートの取得
minus_state = $data_states[j]
if minus_state != nil
if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_HP -= $1.to_i
end
if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_SP -= $1.to_i
end
if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/
slip_damage_H_Val -= $1.to_i
end
if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/
slip_damage_S_Val -= $1.to_i
end
end
end
end
end
# スリップの設定を特にしなかった場合デフォルトのHPスリップダメージ10%に設定する
if slip_damage_HP == 0 && slip_damage_H_Val == 0 && slip_damage_SP == 0 && slip_damage_S_Val
slip_damage_HP = 10
else
# ダメージを計算
damage = battler.maxhp * slip_damage_HP / 100 + slip_damage_H_Val
damage2 = battler.maxsp * slip_damage_SP / 100 + slip_damage_S_Val
return damage, damage2
end
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :states # ステート
attr_accessor :damage # HPダメージ値
attr_accessor :damage2 # SPダメージ値
#--------------------------------------------------------------------------
# ● スリップダメージの効果適用 [条件付再定義]
#--------------------------------------------------------------------------
alias xrxs17_slip_damage_effect slip_damage_effect
def slip_damage_effect
# スリップ効果量の取得
slip_damage = XRXS17.slip_amount(self)
# スリップダメージが指定されていなかった場合
if slip_damage[0] == 0 && slip_damage[1] == 0
return xrxs17_slip_damage_effect
else
# ダメージを設定
self.damage = slip_damage[0]
self.damage2 = slip_damage[1]
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
if self.damage2.abs > 0
amp = [self.damage2.abs * 15 / 100, 1].max
self.damage2 += rand(amp+1) + rand(amp+1) - amp
end
# HP&SP からダメージを減算
if self.damage != 0
self.hp -= self.damage
end
if self.damage2 != 0
self.sp -= self.damage2
end
# メソッド終了
return true
end
end
=begin
#--------------------------------------------------------------------------
# ● ステート [スリップダメージ] 判定
#--------------------------------------------------------------------------
alias xrxs17_slip_damage? slip_damage?
def slip_damage?
if @xrxs17_minus_slip_check_ban
# スリップ効果量の取得
slip_damage = XRXS17.slip_amount(self)
# HPが減少しないスリップタメージの場合
if slip_damage[0] <= 0# || slip_damage[1] <= 0
return false
end
end
# 呼び戻す
return xrxs17_slip_damage?
end
#--------------------------------------------------------------------------
# ○ 回復スリップをスリップダメージ判定から一時的に除外
#--------------------------------------------------------------------------
def xrxs17_minus_slip_check_ban=(b)
@xrxs17_minus_slip_check_ban = b
end
=end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :actors # アクター
attr_reader :states # ステート
#--------------------------------------------------------------------------
# ● スリップダメージチェック (マップ用)
#--------------------------------------------------------------------------
include BM
alias xrxs17_check_map_slip_damage check_map_slip_damage
def check_map_slip_damage
for actor in @actors
if actor.hp > 0 and actor.slip_damage?
# 初期化
slip_damage = XRXS17.slip_amount(actor)
#HPのスリップダメージを実行
actor.hp -= slip_damage[0]
if slip_damage[0] > 0
if actor.hp == 0
Sound.play_actor_collapse
end
$game_screen.start_flash(Color.new(255, 0, 0, HARF8BIT), 4)
$game_temp.gameover = $game_party.all_dead?
end
#SPのスリップダメージを実行
actor.sp -= slip_damage[1]
end
end
end
end
|