#==============================================================================
# ボスをボス然とさせる By 貪藻矢射妥←
#------------------------------------------------------------------------------
# ボスキャラを主人公ズのレベルに応じてパワーアップさせます。
# (と、いうか、トループのイベントでボスのステータスを加算していたんだけど
# それにTYPE74RX-T様のスクリプト、バトルのリトライ/リセットを併用すると
# ボスキャラの能力が際限なく能力が上がることなっていた自分の不手際に対する
# 修正だったり・・・)
#
# デフォルトで腕力、魔力、攻撃力をセーブしていますが、それ以外もセーブしたい
# 場合はご自由に増やしてください
#
# 使用方法(トループのイベントにて・・・ターンの一番最初に行うのがベスト)
#
# change_str(ID, def倍率, agi倍率[, atk倍率])
#
# にてエネミーのステータスを変更します。
#
#==============================================================================
# 更新っぽいもの
#
# 2008:04:11
# ・トループのイベントで設定をしなかった場合、次の戦闘で同じエネミーが出ると
# エラー落ちするバグを修正
# ・イベントコマンドを1つに統合
#
# 2008:10:05
# ・複数のボスとのバトル時にボスの攻撃力を低く設定できるように改良
#
# 2008:11:16
# ・装備によって勝てなくなる場合の救済っぽいものを追加
# ・カスタマイズポイントを設定
#
# 2011:03:05
# ・インタープリターに関数を追加することで、呼び出し関数名を省略化
#
# 2016:08:01
# ・エネミーステータス保存領域拡張
#
# 2017:11:03
# ・エネミーステータス保存領域を統合(変数削減)
# ・初期化されない場合でもエラー落ちしないように修正
#
# 2021:02:01
# ・不要な変数を削除
#
# 2024:11:01
# ・エネミーのオリジナルステータス配列をハッシュに変更
module DIAMOND
# レベルによる補正の最小値/最大値
MIN_LV_F = Math.sqrt(5) / 2
MAX_LV_F = 2 * Math.sqrt(6)
# 防御補正値の最小値/最大値
MIN_DEF_F = 1 / 3
MAX_DEF_F = Math.sqrt(5)
end
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :Change_org_sts # オリジナルステータス
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_diamond_boss_hyper initialize
def initialize
# 元の処理を実施
initialize_diamond_boss_hyper
@Change_org_sts = {}
end
#--------------------------------------------------------------------------
# ● ボスの能力の初期化
#--------------------------------------------------------------------------
def init_str(id)
# バトルの始まりで無理だった場合の救済処置
if @Change_org_sts[id] == nil
@Change_org_sts[id] = [false, 0, 0, 0, 0, 0, 0, 0]
end
if @Change_org_sts[id][0] == true
return_str(id)
end
save_str(id)
@Change_org_sts[id][0] = true
end
#--------------------------------------------------------------------------
# ● ボスのオリジナルの能力値のセーブ
#--------------------------------------------------------------------------
def save_str(id)
enemy = $data_enemies[id]
@Change_org_sts[id][1] = enemy.str
@Change_org_sts[id][2] = enemy.int
@Change_org_sts[id][3] = enemy.atk
@Change_org_sts[id][4] = enemy.agi
@Change_org_sts[id][5] = enemy.dex
@Change_org_sts[id][6] = enemy.pdef
@Change_org_sts[id][7] = enemy.mdef
end
#--------------------------------------------------------------------------
# ● ボスのオリジナルの能力値のロード
#--------------------------------------------------------------------------
def return_str(id)
enemy = $data_enemies[id]
enemy.str = @Change_org_sts[id][1]
enemy.int = @Change_org_sts[id][2]
enemy.atk = @Change_org_sts[id][3]
enemy.agi = @Change_org_sts[id][4]
enemy.dex = @Change_org_sts[id][5]
enemy.pdef = @Change_org_sts[id][6]
enemy.mdef = @Change_org_sts[id][7]
end
#--------------------------------------------------------------------------
# ● ボスの能力値の変更
#--------------------------------------------------------------------------
def change_str(id, tdef, agi, atk=1)
init_str(id)
enemy = $data_enemies[id]
$game_party.init_avg
enemy.pdef = Integer($game_party.C_pdef_plus * tdef)
enemy.mdef = Integer($game_party.C_mdef_plus * tdef)
enemy.agi = Integer($game_party.avg_agi * agi)
enemy.str += Integer($game_party.C_atk_plus * atk)
enemy.int += Integer($game_party.C_pdef_plus * atk)
enemy.atk += Integer($game_party.C_mdef_plus * atk)
end
end
class Game_Party
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :avg_lv
attr_accessor :avg_agi
attr_accessor :avg_pdef
attr_accessor :avg_mdef
attr_accessor :avg_atk
attr_accessor :C_pdef_plus
attr_accessor :C_mdef_plus
attr_accessor :C_lv_plus
attr_accessor :C_atk_plus
#--------------------------------------------------------------------------
# ● 主人公ズの能力値の平均値をリセット+
#--------------------------------------------------------------------------
def init_avg
@avg_lv = 0
@avg_pdef = 0
@avg_mdef = 0
@avg_agi = 0
@avg_atk = 0
@C_pdef_plus = 0
@C_mdef_plus = 0
@C_atk_plus = 0
avg_set
end
include DIAMOND
#--------------------------------------------------------------------------
# ● 主人公ズの能力値の平均値を算出
#--------------------------------------------------------------------------
def avg_set
pas = $game_party.actors.size
for i in 0...pas
@avg_lv += @actors[i].level
@avg_pdef += @actors[i].pdef
@avg_mdef += @actors[i].mdef
@avg_agi += @actors[i].agi
@avg_atk += @actors[i].str
end
@avg_lv /= pas
@avg_pdef /= pas
@avg_mdef /= pas
@avg_agi /= pas
@avg_atk /= pas
log10_avg_lv = Math.log10(@avg_lv)
@C_atk_plus = log10_avg_lv * @avg_atk / 4.12
@C_lv_plus = [[log10_avg_lv * 2 - Math::E, MIN_LV_F].max, MAX_LV_F].min
def_factor = [[log10_avg_lv - Math.sqrt(2), MIN_DEF_F].max, MAX_DEF_F].min
if @avg_pdef / @avg_mdef < 1.5
@C_pdef_plus = Integer(@avg_pdef * @C_lv_plus * def_factor)
@C_mdef_plus = Integer(@avg_mdef * @C_lv_plus)
else
@C_pdef_plus = Integer(@avg_pdef * @C_lv_plus)
@C_mdef_plus = Integer(@avg_mdef * @C_lv_plus * def_factor)
end
end
end
#==============================================================================
# ■ Scene_Battle (分割定義 1)
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● バトル終了
# result : 結果 (0:勝利 1:敗北 2:逃走)
#--------------------------------------------------------------------------
alias battle_end_diamond_boss_hyper battle_end
def battle_end(result)
for enemy in $game_troop.enemies
if $game_system.Change_org_sts[enemy.id] != nil &&
$game_system.Change_org_sts[enemy.id][0] == true
$game_system.return_str(enemy.id)
$game_system.Change_org_sts[enemy.id][0] = false
end
end
battle_end_diamond_boss_hyper(result)
end
end
class Interpreter
#--------------------------------------------------------------------------
# ● ボスの能力値の変更
#--------------------------------------------------------------------------
def change_str(id, tdef, agi, atk=1)
if id.is_a?(Numeric) && tdef.is_a?(Numeric) && agi.is_a?(Numeric) &&
atk.is_a?(Numeric)
$game_system.change_str(id, tdef, agi, atk)
else
p "入力パラメーターが不正です。"
end
end
end
|