=begin RGSS3    ★ 個体差エネミー ★ 同じエネミーでも能力値が微妙に異なる個体が出現するようになります。 ● 使い方 ●======================================================== 敵キャラのメモ欄に「個体差」という文字列を含ませてください。 ==================================================================== ver1.00 Last Update : 2015/03/19 3/19 : 新規 ろかん   http://kaisou-ryouiki.sakura.ne.jp/ =end #=================================== # ●設定箇所 #=================================== module Individual_Enemy # 個体差の範囲を定義します # 【例】0.20 を設定した場合 # 最弱個体はデータベース上の値を 0.80 倍したパラメータに # 最強個体はデータベース上の値を 1.20 倍したパラメータに # # 尚、負の値を設定すると範囲が反転します。 # 【例】-0.15 を設定した場合 # 最弱個体はデータベース上の値を 1.15 倍したパラメータに # 最強個体はデータベース上の値を 0.85 倍したパラメータに INDIVIDUAL_DIFF = [ 0.20, # グラフィックサイズ 0.20, # 最大HP 0.15, # 最大MP 0.15, # 攻撃力 0.15, # 防御力 0.15, # 魔法力 0.15, # 魔法防御 -0.15, # 敏捷性 0.20, # 経験値 0.20, # 取得金 ] # 個体差の範囲内での多様性 # 【例】5 の場合は、標準 1 種、弱個体 5 種、強個体 5 種 が出現します DIVERSITY = 5 end #=================================== # ここまで #=================================== $rsi ||= {} $rsi["個体差エネミー"] = true class RPG::Enemy < RPG::BaseItem def individual? self.note.include?("個体差") end end class Game_Enemy < Game_Battler def mhp; (super * @individual[1]).round; end def mmp; (super * @individual[2]).round; end def atk; (super * @individual[3]).round; end def def; (super * @individual[4]).round; end def mat; (super * @individual[5]).round; end def mdf; (super * @individual[6]).round; end def agi; (super * @individual[7]).round; end #-------------------------------------------------------------------------- # ● インクルード Individual_Enemy #-------------------------------------------------------------------------- include Individual_Enemy #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias individual_enemy_initialize initialize def initialize(index, enemy_id) @enemy_id = enemy_id @individual = get_individual individual_enemy_initialize(index, enemy_id) end #-------------------------------------------------------------------------- # ● 個体差倍率の取得 #-------------------------------------------------------------------------- def get_individual if enemy.individual? n = rand(DIVERSITY.next) # 0 の場合は倍率 1.0、大きいほど倍率が 1.0 から離れる m = rand(2).zero? # true の場合は強個体、false の場合は弱個体 result = [] INDIVIDUAL_DIFF.each{|range| rate = range / DIVERSITY * n result << 1.0 + (m ? rate : -rate) } result else Array.new(10, 1.0) end end #-------------------------------------------------------------------------- # ● 経験値の取得 #-------------------------------------------------------------------------- alias individual_enemy_exp exp def exp (individual_enemy_exp * @individual[8]).round end #-------------------------------------------------------------------------- # ● お金の取得 #-------------------------------------------------------------------------- alias individual_enemy_gold gold def gold (individual_enemy_gold * @individual[9]).round end #-------------------------------------------------------------------------- # ● グラフィックサイズの倍率を取得 #-------------------------------------------------------------------------- def get_graphic_size_rate @individual[0] end end class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias individual_enemy_initialize initialize def initialize(viewport, battler = nil) individual_enemy_initialize(viewport, battler) self.zoom_x = self.zoom_y *= @battler.get_graphic_size_rate if @battler end end