#◆◇◆◇◆ ☆☆ アクティブ・バトルステータス ver 1.22 ◇◆◇◆◇ # ☆ マスタースクリプト ver 3.00 以降専用 # 開発者用・高速数字描写機構 ver 1.10 以降必須 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.22 5桁以上の表記に対応 ver 1.21 戦闘開始時の演出を変更 ver 1.20 処理を大幅に効率化。 ゲージの規格を変更。 ver 1.11 スリップダメージに不対応だったミスを修正。 ver 1.10 SSPの消し忘れと細かい部分を修正。 説明 このスクリプト素材には 開発者用・高速数字描写機構 ver 1.10 以降が別途必須となります。 バトルステータスの数値をピクチャー表示にして、 さらにアクティブで変動させます。 色も、現在の値に応じて4段階に変化します。 ピクチャーはサンプルのものを使用していただいて構いません。 独自のものを使用する場合は、本体ゲージは 100 * 1 ピクセル規格で作成してください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # アクティブ・バトルステータスを有効化 ( true で有効 / false で無効 ) RGSS["Active_Battle_Status"] = true end #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 空ゲージの名前 Base_Gauge = "gauge" # 本体HPゲージの名前 A_HP_Gauge = "gauge_hp2" # 本体SPゲージの名前 A_SP_Gauge = "gauge_sp2" # 本体SSPゲージの名前 A_SSP_Gauge = "gauge_ssp2" # 確保する桁数 #(他サイトさんの限界突破などで、 # 1万以上にまで達する場合はその桁数を記入してください) Number_Size = 4 end if MINTO::RGSS["Active_Battle_Status"] #============================================================================== # ■ Mint_Gauge_System #------------------------------------------------------------------------------ #  ピクチャーゲージのスプライト表示を扱うクラスです。 # このクラスはゲージの高速再描写に特化したクラスとなっています。 #============================================================================== class Mint_Gauge_System #-------------------------------------------------------------------------- # ● オブジェクト初期化 # gauge : ゲージ画像 #-------------------------------------------------------------------------- def initialize(x, y, z = 500, type = 0) # 空ゲージを読み込む gauge_base = RPG::Cache.picture(MINTO::Base_Gauge) # 空ゲージ用のスプライトを作成 @sprite_gauge_base = Sprite.new # 座標を設定 @sprite_gauge_base.x = x @sprite_gauge_base.y = y @sprite_gauge_base.z = z # スプライトを作成 @sprite = @sprite_gauge_base.dup @sprite.x -= 16 @sprite.y -= 16 @sprite.z += 1 @sprite.bitmap = Bitmap.new(64, 32) @sprite.bitmap.font.color.set(0, 200, 250) # 空ゲージを描写 @sprite_gauge_base.bitmap = gauge_base # 本体ゲージを読み込む @gauge = gauge_initialize(type) # 本体ゲージ用の配列を作成 @sprite_gauge = [Sprite.new] (1..6).each do |i| # 本体ゲージ用のスプライトを作成 @sprite_gauge[i] = Sprite.new # 座標を設定 @sprite_gauge[i].x = (x - i) + 8 @sprite_gauge[i].y = y + i @sprite_gauge[i].z = z end end #-------------------------------------------------------------------------- # ● ゲージ用ビットマップの作成 #-------------------------------------------------------------------------- def gauge_initialize(type) # タイプに応じて分岐 case type when 0 # ゲージの読み込み gauge = RPG::Cache.picture(MINTO::A_HP_Gauge) # 用語を描写 draw_frame_text(0, 0, 64, 32, Data_System.data.words.hp) when 1 # ゲージの読み込み gauge = RPG::Cache.picture(MINTO::A_SP_Gauge) # 用語を描写 draw_frame_text(0, 0, 64, 32, Data_System.data.words.sp) when 2 # ゲージの読み込み gauge = RPG::Cache.picture(MINTO::A_SSP_Gauge) # 用語を描写 draw_frame_text(0, 0, 64, 32, MINTO::SSP_NAME) end # 本体ゲージ用のスプライトを作成 sprite_gauge = [] (1..100).each do |i| # 本体ゲージ用のビットマップを作成 sprite_gauge[i] = Bitmap.new(i, 1) # 本体ゲージ用の描写範囲を計算 dest_rect = Rect.new(0, 0, i, 1) sprite_gauge[i].stretch_blt(dest_rect, gauge, gauge.rect) end return sprite_gauge end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # スプライトを解放 for s in @sprite_gauge s.dispose end @sprite_gauge_base.bitmap.dispose @sprite_gauge_base.dispose @sprite.bitmap.dispose @sprite.dispose end #-------------------------------------------------------------------------- # ● 縁文字描写 #-------------------------------------------------------------------------- def draw_frame_text(x, y, width, height, text, ag = 0) # 元の色を保存 ori_color = @sprite.bitmap.font.color.clone # 縁の色を定義 @sprite.bitmap.font.color.set(0, 0, 0) # 縁文字を描写 @sprite.bitmap.draw_text(x-1, y, width, height, text, ag) @sprite.bitmap.draw_text(x+1, y, width, height, text, ag) @sprite.bitmap.draw_text(x, y-1, width, height, text, ag) @sprite.bitmap.draw_text(x, y+1, width, height, text, ag) # 元の色に戻す @sprite.bitmap.font.color = ori_color # 本体の文字を描写 @sprite.bitmap.draw_text(x, y, width, height, text, ag) end #-------------------------------------------------------------------------- # ● 可視状態の取得 #-------------------------------------------------------------------------- def visible # 先頭の可視状態を返す return @sprite_gauge[1].visible end #-------------------------------------------------------------------------- # ● 可視状態の変更 # visible : 新しい可視状態 #-------------------------------------------------------------------------- def visible=(visible) # 可視状態の変更(イテレータ) (1..6).each{|i| @sprite_gauge[i].visible = visible} @sprite_gauge_base.visible = visible end #-------------------------------------------------------------------------- # ● レートの設定 # rate : ゲージの減少率 #-------------------------------------------------------------------------- def set_rate(rate) rate = [[rate, 100].min, 0].max # ゲージを実際に描写 @sprite_gauge[1].bitmap = @gauge[rate] @sprite_gauge[2].bitmap = @gauge[rate] @sprite_gauge[3].bitmap = @gauge[rate] @sprite_gauge[4].bitmap = @gauge[rate] @sprite_gauge[5].bitmap = @gauge[rate] @sprite_gauge[6].bitmap = @gauge[rate] end end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # ● 解放 # alias : dispose_Active_Battle_Status #-------------------------------------------------------------------------- alias :dispose_Active_Battle_Status :dispose def dispose # 元の処理を実行 dispose_Active_Battle_Status # HP用のスプライトが有効な場合 if @status_hp != nil then # HP用のスプライトを解放 @status_hp.dispose @hp_gauge.dispose end # SP用のスプライトが有効な場合 if @status_sp != nil then # SP用のスプライトを解放 @status_sp.dispose @sp_gauge.dispose end # SSP用のスプライトが有効な場合 if @status_ssp != nil then # SSP用のスプライトを解放 @status_ssp.dispose @ssp_gauge.dispose end end #-------------------------------------------------------------------------- # ● ステータススプライトの初期定義 #-------------------------------------------------------------------------- def status_set # HP描写用の座標を定義 x = @battler.screen_x-16 y = @battler.screen_y # HP用のスプライトが無効な場合 if @status_hp == nil then # パラメータ追加が有効な場合 if MINTO::RGSS["parameter_addition"] # 基本座標を定義 plus = 24 else plus = 32 end # HP用のスプライトを作成 @status_hp = Mint_Picture_Number.new(x, 338 + plus, MINTO::Number_Size, 103) @status_hp.refresh(@battler.hp, @battler.maxhp) # HPゲージを作成 @hp_gauge = Mint_Gauge_System.new(x-32, 352 + plus, 102) # 初期描写 @hp_gauge.set_rate(@battler.hp * 100 / @battler.maxhp) 40.times {@status_hp.update @status_hp.active_refresh} end # SP用のスプライトが無効な場合 if @status_sp == nil then # SP用のスプライトを作成 @status_sp = Mint_Picture_Number.new(x, 338 + plus * 2, MINTO::Number_Size, 103) @status_sp.refresh(@battler.sp, @battler.maxsp) # SPゲージを作成 @sp_gauge = Mint_Gauge_System.new(x-32, 352 + plus * 2, 102, 1) # 初期描写 @sp_gauge.set_rate(@battler.sp * 100 / @battler.maxsp) 40.times {@status_sp.update @status_sp.active_refresh} end # SSP用のスプライトが無効な場合 if MINTO::RGSS["parameter_addition"] and @status_ssp == nil then # SSP用のスプライトを作成 @status_ssp = Mint_Picture_Number.new(x, 338 + plus * 3, MINTO::Number_Size, 103) @status_ssp.refresh(@battler.ssp, @battler.maxssp) # SSPゲージを作成 @ssp_gauge = Mint_Gauge_System.new(x-32, 352 + plus * 3, 102, 2) # 初期描写 @ssp_gauge.set_rate(@battler.ssp * 100 / @battler.maxssp) 40.times {@status_ssp.update @status_ssp.active_refresh} end end #-------------------------------------------------------------------------- # ● ステータススプライトの更新 #-------------------------------------------------------------------------- def status_update # ダメージが無効な場合 if @battler.damage == nil then # HP用のスプライトが有効な場合 if @status_hp != nil then # HPが更新されている場合 if @status_hp.after_number != @battler.hp then # HP用のスプライトをリフレッシュ @status_hp.refresh(@battler.hp, @battler.maxhp) end # HP用のスプライトを更新 @status_hp.update @status_hp.active_refresh # ゲージを更新 @hp_gauge.set_rate(@status_hp.new_number * 100 / @battler.maxhp) # レベルが変更されている場合 if @last_level != @battler.level # レベルアップポップ @status_hp.string_pop("lvup", -48, 32) # レベルを保存 @last_level = @battler.level # HP用のスプライトをリフレッシュ @status_hp.refresh(@battler.hp, @battler.maxhp) # SP用のスプライトをリフレッシュ @status_sp.refresh(@battler.sp, @battler.maxsp) # SSP用のスプライトが有効な場合 if MINTO::RGSS["parameter_addition"] # SSP用のスプライトをリフレッシュ @status_ssp.refresh(@battler.ssp, @battler.maxssp) end end end # SP用のスプライトが有効な場合 if @status_sp != nil then # SPが更新されている場合 if @status_sp.after_number != @battler.sp then # SP用のスプライトをリフレッシュ @status_sp.refresh(@battler.sp, @battler.maxsp) end # SP用のスプライトを更新 @status_sp.update @status_sp.active_refresh # ゲージを更新 @sp_gauge.set_rate(@status_sp.new_number * 100 / @battler.maxsp) end # SSP用のスプライトが有効な場合 if MINTO::RGSS["parameter_addition"] and @status_ssp != nil then # SSPが更新されている場合 if @status_ssp.after_number != @battler.ssp then # SSP用のスプライトをリフレッシュ @status_ssp.refresh(@battler.ssp, @battler.maxssp) end # SSP用のスプライトを更新 @status_ssp.update @status_ssp.active_refresh # ゲージを更新 @ssp_gauge.set_rate(@status_ssp.new_number * 100 / @battler.maxssp) end end end #-------------------------------------------------------------------------- # ● フレーム更新 # alias : update_Active_Battle_Status #-------------------------------------------------------------------------- alias :update_Active_Battle_Status :update def update # 元の処理を実行 update_Active_Battle_Status # 無効なバトラーの場合 if @battler == nil then # メソッドを返す return end # バトラーがアクターの場合 if @battler.class == Game_Actor then # レベルを保存 @last_level ||= @battler.level # ステータス用のスプライトを作成 status_set # ステータス用のスプライトを更新 status_update end end end #============================================================================== # ■ Window_BattleStatus #------------------------------------------------------------------------------ #  バトル画面でステータスの用語を表示するウィンドウです。 #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :item_max # 項目数 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 320, 640, 160) self.contents = Bitmap.new(width - 32, height - 32) @level_up_flags = [false, false, false, false] @item_max = $game_party.actors.size # スプライトを作成 @sprite = Sprite.new # スプライトの座標を定義 @sprite.x = self.x + 16 @sprite.y = self.y + 16 @sprite.z = self.z + 16 @sprite.bitmap = self.contents.dup refresh refresh_words end #-------------------------------------------------------------------------- # ● 解放 # alias : dispose_Active_Battle_Status #-------------------------------------------------------------------------- alias :dispose_Active_Battle_Status :dispose def dispose # 元の処理を実行 dispose_Active_Battle_Status # スプライトを解放 @sprite.bitmap.dispose @sprite.dispose end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh # 一旦ビットマップをクリア self.contents.clear # パーティー人数分だけ繰り返す for i in 0...$game_party.actors.size do # アクターを取得 actor = $game_party.actors[i] # X座標の設定 actor_x = i * 160 + 4 # ステートを描写 draw_actor_state(actor, actor_x, 96) end end #-------------------------------------------------------------------------- # ● リフレッシュ_ワーズ #-------------------------------------------------------------------------- def refresh_words @item_max = $game_party.actors.size # 一旦ビットマップをクリア @sprite.bitmap.clear # パーティー人数分だけ繰り返す for i in 0...$game_party.actors.size do # アクターを取得 actor = $game_party.actors[i] # X座標の設定 actor_x = i * 160 + 4 # 縁取りの色 @sprite.bitmap.font.color = Color.new(5, 5, 5) # 名前の縁取り @sprite.bitmap.draw_text(actor_x+1, 1+1, 120, 32, actor.name) @sprite.bitmap.draw_text(actor_x+1, 1-1, 120, 32, actor.name) @sprite.bitmap.draw_text(actor_x-1, 1-1, 120, 32, actor.name) @sprite.bitmap.draw_text(actor_x-1, 1+1, 120, 32, actor.name) # 本体色をセット(システムカラー) @sprite.bitmap.font.color = system_color # 名前の描写 @sprite.bitmap.font.color = normal_color @sprite.bitmap.draw_text(actor_x, 1, 120, 32, actor.name) end end end #============================================================================== # ■ Scene_Battle (分割定義 1) #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_Active_Battle_Status update def update # メンバーの入れ替えが行われた場合は用語を再描写 if @status_window.item_max != $game_party.actors.size @status_window.refresh_words end # 元の処理を実行 update_Active_Battle_Status end end end