#◆◇◆◇◆ ☆ FE式レベルアップ ver 2.00 ◇◆◇◆◇ # ☆ マスタースクリプト ver 2.00 以降専用 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ ver 2.00(2011/11/22) 新バージョン公開 ■ 説明 某・有名SLGのように、成長率でパラメータがあがるようになります。 パラメータの成長率を設定できるのは HP、SP、腕力、器用さ、素早さ、魔力、防御力、魔法防御力 以上の8つで、それぞれクラスごとに成長率を設定できます。 100%以上の成長率にも対応しています。 例えば125%なら、一回は必ず上がり、 残りの25%でもう一回上がる可能性があります。 各パラメータ上限値もクラスごとに設定できます。 (ただし、HPとSPは全クラス共通) また、Lvが上がった際の上昇値も、全クラス共通です。 初期パラメータは「レベル1」のものを参照します。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # FE式LvUpを有効化 ( true で有効 / false で無効 ) RGSS["FE式LvUp"] = true end # FE式LvUpが有効な場合に以降の処理を実行する if MINTO::RGSS["FE式LvUp"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズをここで行います。 #============================================================================== module MINTO # パラメータ上昇時のSE(名前、音量、ピッチ) SE_Data = ["Audio/SE/002-System02", 100, 120] # スキル習得時のSE(名前、音量、ピッチ) Skill_SE_Data = ["Audio/SE/157-Skill01", 100, 200] # スキル習得時のメッセージ末尾 LearningMessage = "を習得した!" # HPの上限値 HpMax = 9999 # SPの上限値 SpMax = 999 # 各パラメータの一回の上昇値(Hp、Sp、防御力、他の能力) LvUp_Point = [100, 10, 10, 1] #-------------------------------------------------------------------------- # ● クラス別パラメータ上昇率 #-------------------------------------------------------------------------- def self.lv_up_status(id) # クラスIDで分岐ID case id # クラスID_1 when 1 # 能力上昇率 # data = [HP, MP, # 腕力, 器用さ, 素早さ, 魔力, # 防御力, 魔法防御力] data = [65, 45, 60, 55, 50, 30, 45, 55] # クラスID_2 when 2 data = [300, 300, 300, 300, 300, 300, 300, 300] # それ以外 else data = [50, 50, 30, 30, 30, 30, 20, 20] end return data end #-------------------------------------------------------------------------- # ● クラス上限値 #-------------------------------------------------------------------------- def self.class_status_max(id) # クラスIDで分岐ID case id # クラスID_1 when 1 # 能力上限値 # data = [ # 腕力, 器用さ, 素早さ, 魔力, # 防御力, 魔法防御力] data = [ 50, 50, 75, 75, 999, 999] # クラスID_2 when 2 data = [ 65, 80, 70, 70, 999, 999] # それ以外 else data = [ 99, 99, 99, 99, 999, 999] end return data end end #============================================================================== # ■ Object #------------------------------------------------------------------------------ #  全てのクラスのスーパークラス。オブジェクトの一般的な振舞いを定義します。 #============================================================================== class Object #-------------------------------------------------------------------------- # ● 深い複製の作成 #-------------------------------------------------------------------------- def dec # Marshalモジュールを経由して、完全な複製を作成 return Marshal.load(Marshal.dump(self)) end end #============================================================================== # ■ Bitmap #------------------------------------------------------------------------------ #  画像そのものを扱う組み込みクラスです。 #============================================================================== class Bitmap #-------------------------------------------------------------------------- # ● 指定範囲のクリア #-------------------------------------------------------------------------- def rect_clear(x, y, width, height) # 対象の範囲を消す rect = Rect.new(x, y, width, height) self.fill_rect(rect, Color.new(0, 0, 0, 0)) end end #============================================================================== # ■ Window #------------------------------------------------------------------------------ #  ゲーム内の全てのウィンドウのスーパークラスです。 # 内部的には複数のスプライトで構成されています。 #============================================================================== class Window #-------------------------------------------------------------------------- # ● ウィンドウのセンタリング #-------------------------------------------------------------------------- def centering # ウィンドウを画面の中央に配置する self.x = (640 - self.width) / 2 self.y = (480 - self.height) / 2 end end #============================================================================== # ■ Game_Battler (分割定義 1) #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :lv_up_damage_pop # Lv_Upダメージ表示フラグ end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors) # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :maxhp_plus # HP attr_accessor :maxsp_plus # SP attr_accessor :str_plus # 腕力 attr_accessor :dex_plus # 器用さ attr_accessor :agi_plus # 素早さ attr_accessor :int_plus # 魔力 attr_accessor :pdef_plus # 物理防御 attr_accessor :mdef_plus # 魔法防御 #-------------------------------------------------------------------------- # ● セットアップ # actor_id : アクター ID #-------------------------------------------------------------------------- alias setup_FE_Lv_Up setup def setup(actor_id) # 元の処理を実行 setup_FE_Lv_Up(actor_id) @maxhp_plus = $data_actors[actor_id].parameters[0, 1] @maxsp_plus = $data_actors[actor_id].parameters[1, 1] @str_plus = $data_actors[actor_id].parameters[2, 1] @dex_plus = $data_actors[actor_id].parameters[3, 1] @agi_plus = $data_actors[actor_id].parameters[4, 1] @int_plus = $data_actors[actor_id].parameters[5, 1] @pdef_plus = ((MINTO.lv_up_status(@class_id)[6] * @level) / 100) * 10 @mdef_plus = ((MINTO.lv_up_status(@class_id)[7] * @level) / 100) * 10 @hp = maxhp @sp = maxsp end #-------------------------------------------------------------------------- # ● 基本 MaxHP の取得 #-------------------------------------------------------------------------- def base_maxhp n = 0 n += MINTO.class_status_plus(@class_id)[0] if MINTO::RGSS["クラス補正値"] return [n, MINTO::HpMax].min end #-------------------------------------------------------------------------- # ● 基本 MaxSP の取得 #-------------------------------------------------------------------------- def base_maxsp n = 0 n += MINTO.class_status_plus(@class_id)[1] if MINTO::RGSS["クラス補正値"] return [n, MINTO::SpMax].min end #-------------------------------------------------------------------------- # ● 基本腕力の取得 #-------------------------------------------------------------------------- def base_str n = 0 weapon = Data_Weapons.data[@weapon_id] armor1 = Data_Armors.data[@armor1_id] armor2 = Data_Armors.data[@armor2_id] armor3 = Data_Armors.data[@armor3_id] armor4 = Data_Armors.data[@armor4_id] n += weapon != nil ? weapon.str_plus : 0 n += armor1 != nil ? armor1.str_plus : 0 n += armor2 != nil ? armor2.str_plus : 0 n += armor3 != nil ? armor3.str_plus : 0 n += armor4 != nil ? armor4.str_plus : 0 n += MINTO.class_status_plus(@class_id)[2] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[0]].min end #-------------------------------------------------------------------------- # ● 基本器用さの取得 #-------------------------------------------------------------------------- def base_dex n = 0 weapon = Data_Weapons.data[@weapon_id] armor1 = Data_Armors.data[@armor1_id] armor2 = Data_Armors.data[@armor2_id] armor3 = Data_Armors.data[@armor3_id] armor4 = Data_Armors.data[@armor4_id] n += weapon != nil ? weapon.dex_plus : 0 n += armor1 != nil ? armor1.dex_plus : 0 n += armor2 != nil ? armor2.dex_plus : 0 n += armor3 != nil ? armor3.dex_plus : 0 n += armor4 != nil ? armor4.dex_plus : 0 n += MINTO.class_status_plus(@class_id)[3] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[1]].min end #-------------------------------------------------------------------------- # ● 基本素早さの取得 #-------------------------------------------------------------------------- def base_agi n = 0 weapon = Data_Weapons.data[@weapon_id] armor1 = Data_Armors.data[@armor1_id] armor2 = Data_Armors.data[@armor2_id] armor3 = Data_Armors.data[@armor3_id] armor4 = Data_Armors.data[@armor4_id] n += weapon != nil ? weapon.agi_plus : 0 n += armor1 != nil ? armor1.agi_plus : 0 n += armor2 != nil ? armor2.agi_plus : 0 n += armor3 != nil ? armor3.agi_plus : 0 n += armor4 != nil ? armor4.agi_plus : 0 n += MINTO.class_status_plus(@class_id)[4] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[2]].min end #-------------------------------------------------------------------------- # ● 基本魔力の取得 #-------------------------------------------------------------------------- def base_int n = 0 weapon = Data_Weapons.data[@weapon_id] armor1 = Data_Armors.data[@armor1_id] armor2 = Data_Armors.data[@armor2_id] armor3 = Data_Armors.data[@armor3_id] armor4 = Data_Armors.data[@armor4_id] n += weapon != nil ? weapon.int_plus : 0 n += armor1 != nil ? armor1.int_plus : 0 n += armor2 != nil ? armor2.int_plus : 0 n += armor3 != nil ? armor3.int_plus : 0 n += armor4 != nil ? armor4.int_plus : 0 n += MINTO.class_status_plus(@class_id)[5] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[3]].min end #-------------------------------------------------------------------------- # ● 基本攻撃力の取得 #-------------------------------------------------------------------------- def base_atk weapon = Data_Weapons.data[@weapon_id] n = weapon != nil ? weapon.atk : 0 n += MINTO.class_status_plus(@class_id)[6] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, 999].min end #-------------------------------------------------------------------------- # ● 基本物理防御の取得 #-------------------------------------------------------------------------- def base_pdef n = @pdef_plus weapon = Data_Weapons.data[@weapon_id] armor1 = Data_Armors.data[@armor1_id] armor2 = Data_Armors.data[@armor2_id] armor3 = Data_Armors.data[@armor3_id] armor4 = Data_Armors.data[@armor4_id] pdef1 = weapon != nil ? weapon.pdef : 0 pdef2 = armor1 != nil ? armor1.pdef : 0 pdef3 = armor2 != nil ? armor2.pdef : 0 pdef4 = armor3 != nil ? armor3.pdef : 0 pdef5 = armor4 != nil ? armor4.pdef : 0 n += pdef1 + pdef2 + pdef3 + pdef4 + pdef5 n += MINTO.class_status_plus(@class_id)[7] if MINTO::RGSS["クラス補正値"] return [n, MINTO.class_status_max(@class_id)[4]].min end #-------------------------------------------------------------------------- # ● 基本魔法防御の取得 #-------------------------------------------------------------------------- def base_mdef n = @mdef_plus weapon = Data_Weapons.data[@weapon_id] armor1 = Data_Armors.data[@armor1_id] armor2 = Data_Armors.data[@armor2_id] armor3 = Data_Armors.data[@armor3_id] armor4 = Data_Armors.data[@armor4_id] mdef1 = weapon != nil ? weapon.mdef : 0 mdef2 = armor1 != nil ? armor1.mdef : 0 mdef3 = armor2 != nil ? armor2.mdef : 0 mdef4 = armor3 != nil ? armor3.mdef : 0 mdef5 = armor4 != nil ? armor4.mdef : 0 n += mdef1 + mdef2 + mdef3 + mdef4 + mdef5 n += MINTO.class_status_plus(@class_id)[8] if MINTO::RGSS["クラス補正値"] return [n, MINTO.class_status_max(@class_id)[5]].min end #-------------------------------------------------------------------------- # ● オリジナルMaxHP の取得 #-------------------------------------------------------------------------- def ori_maxhp n = [@maxhp_plus, MINTO::HpMax].min n += MINTO.class_status_plus(@class_id)[0] if MINTO::RGSS["クラス補正値"] return [n, MINTO::HpMax].min end #-------------------------------------------------------------------------- # ● オリジナルMaxSP の取得 #-------------------------------------------------------------------------- def ori_maxsp n = [@maxsp_plus, MINTO::SpMax].min n += MINTO.class_status_plus(@class_id)[1] if MINTO::RGSS["クラス補正値"] return [n, MINTO::SpMax].min end #-------------------------------------------------------------------------- # ● オリジナル腕力の取得 #-------------------------------------------------------------------------- def ori_str n = @str_plus n += MINTO.class_status_plus(@class_id)[2] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[0]].min end #-------------------------------------------------------------------------- # ● オリジナル器用さの取得 #-------------------------------------------------------------------------- def ori_dex n = @dex_plus n += MINTO.class_status_plus(@class_id)[3] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[1]].min end #-------------------------------------------------------------------------- # ● オリジナル素早さの取得 #-------------------------------------------------------------------------- def ori_agi n = @agi_plus n += MINTO.class_status_plus(@class_id)[4] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[2]].min end #-------------------------------------------------------------------------- # ● オリジナル魔力の取得 #-------------------------------------------------------------------------- def ori_int n = @int_plus n += MINTO.class_status_plus(@class_id)[5] if MINTO::RGSS["クラス補正値"] return [[n, 1].max, MINTO.class_status_max(@class_id)[3]].min end #-------------------------------------------------------------------------- # ● オリジナル物理防御の取得 #-------------------------------------------------------------------------- def ori_pdef n = @pdef_plus n += MINTO.class_status_plus(@class_id)[7] if MINTO::RGSS["クラス補正値"] return [n, MINTO.class_status_max(@class_id)[4]].min end #-------------------------------------------------------------------------- # ● オリジナル魔法防御の取得 #-------------------------------------------------------------------------- def ori_mdef n = @mdef_plus n += MINTO.class_status_plus(@class_id)[8] if MINTO::RGSS["クラス補正値"] return [n, MINTO.class_status_max(@class_id)[5]].min end #-------------------------------------------------------------------------- # ● 能力値の成長判定 #-------------------------------------------------------------------------- def lv_up_parameter # ループ処理 for i in (0..7) do # 成長率を取得 percent = MINTO.lv_up_status(@class_id)[i] # 成長率が存在する限り繰り返す while percent >= 1 do # 成長した場合 if rand(100) < percent # パラメータを上げる parameter_up(i) end # 成長率から100を減算 percent -= 100 end end end #-------------------------------------------------------------------------- # ● 能力値の成長 #-------------------------------------------------------------------------- def parameter_up(parameter_id) case parameter_id # HP when 0 if ori_maxhp < MINTO::HpMax @maxhp_plus += MINTO::LvUp_Point[0] end # SP when 1 if ori_maxsp < MINTO::SpMax @maxsp_plus += MINTO::LvUp_Point[1] end # 腕力 when 2 if ori_str < MINTO.class_status_max(@class_id)[0] @str_plus += MINTO::LvUp_Point[3] end # 器用さ when 3 if ori_dex < MINTO.class_status_max(@class_id)[1] @dex_plus += MINTO::LvUp_Point[3] end # 素早さ when 4 if ori_agi < MINTO.class_status_max(@class_id)[2] @agi_plus += MINTO::LvUp_Point[3] end # 魔力 when 5 if ori_int < MINTO.class_status_max(@class_id)[3] @int_plus += MINTO::LvUp_Point[3] end # 物理防御 when 6 if ori_pdef < MINTO.class_status_max(@class_id)[4] @pdef_plus += MINTO::LvUp_Point[2] end # 魔法防御 when 7 if ori_mdef < MINTO.class_status_max(@class_id)[5] @mdef_plus += MINTO::LvUp_Point[2] end end end #-------------------------------------------------------------------------- # ● EXP の変更 # exp : 新しい EXP #-------------------------------------------------------------------------- def exp=(exp) @exp = [[exp, 999999999].min, 0].max # レベルアップ while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0 @level += 1 lv_up_parameter # スキル習得 for j in Data_Classes.data[@class_id].learnings if j.level == @level learn_skill(j.skill_id) end end end # レベルダウン while @exp < @exp_list[@level] @level -= 1 end # 現在の HP と SP が最大値を超えていたら修正 @hp = [@hp, self.maxhp].min @sp = [@sp, self.maxsp].min end end #============================================================================== # ■ Window_BattleStatus #------------------------------------------------------------------------------ #  バトル画面でパーティメンバーのステータスを表示するウィンドウです。 #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :level_up_flags # レベルアップフラグ end #============================================================================== # ■ Window_Lvup_Data #------------------------------------------------------------------------------ # Lvup時のデータを表示するウィンドウです。 #============================================================================== class Window_Lvup_Data < Window_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :data # データ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 512, 256) self.contents = Bitmap.new(width - 32, height - 32) self.z = 10016 self.visible = false @data = {} centering end #-------------------------------------------------------------------------- # ● リフレッシュ # actor : アクター #-------------------------------------------------------------------------- def refresh(actor) x = 160 self.contents.clear # アクター名を描写 self.contents.font.color = normal_color self.contents.draw_text(x * 0, 32 * 0, 224, 32, actor.name) # アクターグラフィックを描写 battler_name = actor.battler_name battler_hue = actor.battler_hue bitmap = RPG::Cache.battler(battler_name, battler_hue) self.contents.blt(336, 256 - bitmap.rect.height - 32, bitmap, bitmap.rect) # 用語を描写 self.contents.font.color = system_color self.contents.draw_text(x * 0, 32 * 1, 96, 32, "Level") self.contents.draw_text(x * 0, 32 * 2, 48, 32, $data_system.words.hp) self.contents.draw_text(x * 0, 32 * 3, 48, 32, $data_system.words.sp) self.contents.draw_text(x * 1, 32 * 1, 48, 32, $data_system.words.str) self.contents.draw_text(x * 1, 32 * 2, 48, 32, $data_system.words.dex) self.contents.draw_text(x * 1, 32 * 3, 48, 32, $data_system.words.agi) self.contents.draw_text(x * 1, 32 * 4, 48, 32, $data_system.words.int) self.contents.draw_text(x * 1, 32 * 5, 48, 32, $data_system.words.pdef) self.contents.draw_text(x * 1, 32 * 6, 48, 32, $data_system.words.mdef) self.contents.font.color = normal_color # パラメータを描写 for i in 0...@data[actor].size do draw_status(actor, i) end end #-------------------------------------------------------------------------- # ● 能力の描写 # actor : アクター # index : 項目 #-------------------------------------------------------------------------- def draw_status(actor, index) # 描写座標を設定 x = 60 + ((index / 6) * 160) + ((index / 6) * 8) y = 32 + ((index % 6) * 32) # 描写範囲をクリア self.contents.rect_clear(x, y, 48, 32) # 能力値を描写 self.contents.draw_text(x, y, 96, 32, @data[actor][index].to_s) end end #============================================================================== # ■ Window_BattleCenter_Help #------------------------------------------------------------------------------ #  戦闘画面で任意の文章を表示するウィンドウです。 #============================================================================== class Window_BattleCenter_Help < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 64, 56) self.z = 20000 self.visible = false create_contents @message_duration = 0 @save_text = "" @text = [] @text_y = 0 @text_x = 0 @text_type = 0 @text_index = 0 @text_width = [] @speed = 1 end #-------------------------------------------------------------------------- # ● ウィンドウ内容の作成 #-------------------------------------------------------------------------- def create_contents unless self.contents.nil? self.contents.dispose self.contents = nil end self.contents = Bitmap.new(width - 32, height - 32) end #-------------------------------------------------------------------------- # ● テキスト設定 # text : スプライトに表示する文字列 #-------------------------------------------------------------------------- def set_text(text) # 求められたテキストが無効な場合 if text.to_s == "" then # 表示カウントを設定 @message_duration = 8 # メソッドを終了 return end self.active = true # 終了記号を追加 text += "\\bw" # スプライトを可視状態にする self.visible = true # 各データを初期化 @save_text = "" @text = [] @text_width = [] @text_index = 0 @text_type = 0 @speed = 1 self.pause = false self.opacity = 192 self.contents_opacity = 255 # 表示カウントを設定 @message_duration = 16 # 文字を複製 data = text.dup # 各制御文字を仮変換 data.gsub!(/\\\\/) { "\000" } data.gsub!(/\\[Cc]\[([0-9]+)\]/) { "" } data.gsub!(/\\[Bb][Ww]/) { "" } # ウィンドウのサイズを調節 self.width = 32 + (self.contents.text_size(data).width) self.height = 56 # センター表示 centering # ビットマップを再作成 create_contents refresh(text.dup) end #-------------------------------------------------------------------------- # ● リフレッシュ # text : スプライトに表示する文字列 #-------------------------------------------------------------------------- def refresh(text) # 基本情報を初期化 self.contents.clear self.contents.font.color = normal_color self.contents.font.bold = false self.contents.font.italic = false @text_x = 0 @text_y = 0 # 文章のインデックスを初期化 @text_index = 0 # 便宜上、"\\\\" を "\000" に変換 text.gsub!(/\\\\/) { "\000" } # 各制御文字を実際のものに変換 text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } text.gsub!(/\\[Bb][Ww]/) { "\017" } @save_text = text.dup end #-------------------------------------------------------------------------- # ● テキストの更新 #-------------------------------------------------------------------------- def text_update @text = @save_text.split(//) # 無効な文字列の場合 if @text[@text_index] == nil then # メソッドを返す return false end # スプライトを可視状態にする self.visible = true # テキストを取得 c = @text[@text_index] # \\ の場合 if c == "\000" then # 本来の文字に戻す c = "\\" # \C[n] の場合 elsif c == "\001" then # 制御文字を処理 @save_text.sub!(/\[([0-9]+)\]/, "") # 文字色のIDを取得 color = $1.to_i # 文字色のIDが有効な場合 if color >= 0 then # 文字色を変更 self.contents.font.color = text_color(color) end # インデックスを進める @text_index += 1 # メソッドを返す return true # \BW の場合 elsif c == "\017" then # 文章の表示速度を初期化 @speed = 0 # ポーズサインを表示する self.pause = true # ボタン待ちフラグをオン @press = true # インデックスを進める @text_index += 1 # メソッドを返す return true end # 文字を描画 self.contents.draw_text(@text_x, 0, 40, 24, c) # @text_x に描画した文字の幅を加算 @text_x += self.contents.text_size(c).width # インデックスを進める @text_index += 1 return true end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # ボタン入力待ちフラグがオンの場合 if @press == true then super # C ボタンが押された場合 if Input.trigger?(Input::C) == true then # ボタン入力待ちフラグをオフ @press = false # ポーズサインを非表示にする self.pause = false # ウィンドウを不可視にする self.visible = false # ボタン入力待ちフラグをオフ @press = false end # メソッドを返す return end # 更新が可能なフレームでない場合 if @speed != 0 and (Graphics.frame_count % @speed != 0) then # メソッドを返す return end # テロップを更新中の場合 if text_update == true then # スピードが 0 の場合 if @speed == 0 then update end # メソッドを返す return else # 文章の表示速度を最速化 @speed = 1 end end end #============================================================================== # ■ Scene_Battle (分割定義 1) #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- alias main_MITO_RGSS_120 main def main # 元の処理を実行 main_MITO_RGSS_120 # レベルアップウィンドウが有効な場合 unless @lvup_window.nil? # レベルアップウィンドウを解放 @lvup_window.dispose # センターヘルプウィンドウを解放 @center_help_window.dispose end end end #============================================================================== # ■ Scene_Battle (分割定義 2) #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● アフターバトルフェーズ開始 #-------------------------------------------------------------------------- alias start_phase5_MITO_RGSS_120 start_phase5 def start_phase5 @last_skills_array = [] # フラグを設定 @levelup_effect = false # レベルアップウィンドウを作成 @lvup_window = Window_Lvup_Data.new # センターヘルプウィンドウを作成 @center_help_window = Window_BattleCenter_Help.new # ループ処理(パーティー) for i in 0...$game_party.actors.size do # アクターを取得 actor = $game_party.actors[i] # 最終能力値を保存 save_last_parameter(actor) @last_skills_array[i] = [] # ループ処理 for skill in $data_classes[actor.class_id].learnings do # レベル条件を満たしている場合 if skill.level <= actor.level then # 習得スキルに追加 @last_skills_array[i].push(skill.skill_id) end end # 習得スキルに追加 @last_skills_array[i] += actor.skills # 重複する要素を除外 @last_skills_array[i].uniq! end # 元の処理を実行 start_phase5_MITO_RGSS_120 end #-------------------------------------------------------------------------- # ● 最終能力値の記憶 # actor : アクター #-------------------------------------------------------------------------- def save_last_parameter(actor) @lvup_window.data[actor] = [] @lvup_window.data[actor][0] = actor.level @lvup_window.data[actor][1] = actor.maxhp @lvup_window.data[actor][2] = actor.maxsp @lvup_window.data[actor][3] = nil @lvup_window.data[actor][4] = nil @lvup_window.data[actor][5] = nil @lvup_window.data[actor][6] = actor.str @lvup_window.data[actor][7] = actor.dex @lvup_window.data[actor][8] = actor.agi @lvup_window.data[actor][9] = actor.int @lvup_window.data[actor][10] = actor.pdef @lvup_window.data[actor][11] = actor.mdef end #-------------------------------------------------------------------------- # ● 現在のパラメータの取得 # actor : アクター # index : 項目 #-------------------------------------------------------------------------- def look_parameter(actor, index) # 項目に応じて分岐 case index when 0 then return actor.level when 1 then return actor.maxhp when 2 then return actor.maxsp when 3 then return nil when 4 then return nil when 5 then return nil when 6 then return actor.str when 7 then return actor.dex when 8 then return actor.agi when 9 then return actor.int when 10 then return actor.pdef when 11 then return actor.mdef end end #-------------------------------------------------------------------------- # ● 習得したスキルの表示 # actor : アクター #-------------------------------------------------------------------------- def learning_skills_pop(actor) # 最新のスキル learning_skills = [] # ループ処理 for skill in $data_classes[actor.class_id].learnings do # レベル条件を満たしている場合 if skill.level <= actor.level then # 最新のスキルに追加 learning_skills.push(skill.skill_id) end end # 最新のスキルにアクターのスキルを追加 learning_skills += actor.skills # 重複する要素を除外 learning_skills.uniq! # 習得済みスキルを除外 learning_skills -= @last_skills_array[actor.index] # スキルを習得していない場合 if learning_skills.empty? # メソッドを返す return end # ループ処理 for id in learning_skills do # スキルを取得 skill = $data_skills[id] # 習得MEを演奏 data = MINTO::Skill_SE_Data Audio.se_play(data[0], data[1], data[2]) text = "\\c[1]#{skill.name}\\c[0]#{MINTO::LearningMessage}" # スキル名を表示 @center_help_window.set_text(text) # 表示が終わるまでループ while @center_help_window.visible == true # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # センターヘルプウィンドウを更新 @center_help_window.update end end end #-------------------------------------------------------------------------- # ● レベルアップモーション #-------------------------------------------------------------------------- def level_up_motion # ポップ作成 @pop = Mint_Pop.new # ループ処理(パーティー) for id in 0...$game_party.actors.size do # アクターを取得 actor = $game_party.actors[id] # パラメータウィンドウをリフレッシュ @lvup_window.refresh(actor) # レベルが上がっている場合 if actor.level > @lvup_window.data[actor][0] then # パラメータウィンドウを表示 @lvup_window.visible = true # ループ処理 for i in (0..11) do # 描写座標を設定 x = 168 + ((i / 6) * 160) y = 140 + ((i % 6) * 32) # 上昇したパラメータを読み込む parameter = look_parameter(actor, i) # 結果を収納する string = "+#{parameter.to_i - @lvup_window.data[actor][i].to_i}" # 無効なパラメータの場合 if parameter.nil? then # 次のパラメータへ next end # 能力が上がった場合 if string != "+0" # 上昇後のパラメータを設定 @lvup_window.data[actor][i] = parameter # パラメータウィンドウをリフレッシュ @lvup_window.draw_status(actor, i) # ポップ描写 @pop.string_pop(string, x, y) # ポップSEを演奏 data = MINTO::SE_Data Audio.se_play(data[0], data[1], data[2]) end # ウェイトカウントを設定 wait = i == 11 ? 160 : 6 # フレーム更新 wait.times do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # スプライトセットを更新 @spriteset.update # ポップを更新 @pop.update # パラメータウィンドウを更新 @lvup_window.update # 最終インデックスの場合 if i == 11 then # ポーズサインを表示する @lvup_window.pause = true # C ボタンが押された場合 if Input.trigger?(Input::C) == true then # ポーズサインを非表示にする @lvup_window.pause = false # 更新を中断 break end end end end end # 習得したスキルを表示 learning_skills_pop(actor) # ポップを解放 @pop.dispose # パラメータウィンドウを閉じる @lvup_window.visible = false end end #-------------------------------------------------------------------------- # ● フレーム更新 (アフターバトルフェーズ) #-------------------------------------------------------------------------- alias update_phase5_MITO_RGSS_120 update_phase5 def update_phase5 # 元の処理を実行 update_phase5_MITO_RGSS_120 # ウェイトカウントが0の場合 if @phase5_wait_count.zero? == true then # 演出未実行の場合 unless @levelup_effect then # レベルアップモーション level_up_motion # フラグをオンにする @levelup_effect = true end end end end #============================================================================== # ■ Mint_Pop #------------------------------------------------------------------------------ #  数字のスプライト表示を扱うクラスです。 #============================================================================== class Mint_Pop #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize @string_pop_sprite = [] @string_pop_duration = [] end #-------------------------------------------------------------------------- # ● ストリングポップ # string : 求められた文字列 # x : X座標 # y : Y座標 #-------------------------------------------------------------------------- def string_pop(string = "", x = 0, y = 0) # string が無効なら処理を終了 return if string == "" # スプライトを生成 string_pop_sprite = Sprite.new # 文字を描写 string_pop_sprite.bitmap = Bitmap.new(96, 40) string_pop_sprite.bitmap.font.size = 17 string_pop_sprite.bitmap.font.color.set(0, 0, 0) string_pop_sprite.bitmap.draw_text(-1, 12-1, 96, 32, string, 1) string_pop_sprite.bitmap.draw_text(+1, 12-1, 96, 32, string, 1) string_pop_sprite.bitmap.draw_text(-1, 12+1, 96, 32, string, 1) string_pop_sprite.bitmap.draw_text(+1, 12+1, 96, 32, string, 1) string_pop_sprite.bitmap.font.color.set(176, 255, 144) string_pop_sprite.bitmap.draw_text(0, 12, 96, 32, string, 1) # 座標データを代入 string_pop_sprite.x = x string_pop_sprite.y = y string_pop_sprite.z = 10032 # 配列の先頭にシフト @string_pop_sprite.unshift(string_pop_sprite) @string_pop_duration.unshift(40) end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # ループ処理 for i in 0...@string_pop_sprite.size do # 有効なスプライトの場合 unless @string_pop_sprite[i].nil? then # スプライトを解放 @string_pop_sprite[i].bitmap.dispose @string_pop_sprite[i].dispose @string_pop_sprite[i] = nil @string_pop_duration[i] = nil end end # 配列内容をクリア @string_pop_sprite.clear @string_pop_duration.clear end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # 1つでもストリングポップが表示中の場合 if @string_pop_sprite.size > 0 # 表示中のストリングポップを1つずつ処理する for i in 0...@string_pop_sprite.size # ストリングポップを代入 string = @string_pop_sprite[i] # カウントが0の場合 if @string_pop_duration[i] == 0 # 次の処理へ next end # カウントを減らす @string_pop_duration[i] -= 1 # 残りカウントに応じて分岐 case @string_pop_duration[i] when 36..39 string.y -= 4 when 33..37 string.y -= 2 when 32..34 string.y += 2 when 25..32 string.y += 4 end end end end end end