#◆◇◆◇◆ ☆ アクティブ・エネミーHPゲージ ver 1.51 ◇◆◇◆◇ # ☆ マスタースクリプト ver 2.00 以降専用 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.51 汎用性を向上させました。 ver 1.50 ゲージの常時表示機能を設置。 ver 1.40 処理を効率化、おかしな挙動を修正。 ver 1.30 F12リセットでエラー落ちするミスを修正。 ver 1.20 更新処理を効率化。 多段攻撃にも対応。 ver 1.10 味方を対象としたアイテムなどを使用した際に エラー落ちするミスを修正。 説明 戦闘時、エネミーのHPが変動した際、 ダメージ表示中にエネミーの画像の下にHPゲージを表示し、 ゲージを徐々にHPに合わせて変動させます。 ゲージ画像はサンプルのものを使用していただいて構いませんが、 独自の本体ゲージの場合は、 規格は 100 * 1 ピクセル以内で作成してください。 また、画像はPictureフォルダに収納してください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # アクティブ・エネミーHPゲージを有効化 ( true で有効 / false で無効 ) RGSS["Active_Enemy_Hp"] = true end if MINTO::RGSS["Active_Enemy_Hp"] #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行うモジュールです。 #============================================================================== module MINTO # 変動に掛ける時間(フレーム) # 値が多ければ、それだけゆっくり変動する # デフォルトでは、ダメージの表示フレームは40フレーム HP_Frame = 40 # 空ゲージの名前 HP_Base = "gauge" # 本体ゲージの名前 HP_Gauge = "gauge_hp2" # ゲージの常時表示フラグ ( true で有効 / false で無効 ) Gauge_Visible = false end #============================================================================== # ■ Mint_Gauge_System_Enemy #------------------------------------------------------------------------------ #  ピクチャーゲージのスプライト表示を扱うクラスです。 # このクラスはゲージの高速再描写に特化したクラスとなっています。 #============================================================================== class Mint_Gauge_System_Enemy #-------------------------------------------------------------------------- # ● オブジェクト初期化 # gauge : ゲージ画像 #-------------------------------------------------------------------------- def initialize(gauge, x, y, z = 500, viewport = nil) # 空ゲージを読み込む gauge_base = RPG::Cache.picture(MINTO::HP_Base) # 空ゲージ用のスプライトを作成 @sprite_gauge_base = Sprite.new(viewport) # 座標を設定 @sprite_gauge_base.x = x @sprite_gauge_base.y = y @sprite_gauge_base.z = z # 空ゲージを描写 @sprite_gauge_base.bitmap = gauge_base # 本体ゲージを読み込む @gauge = gauge # 本体ゲージ用の配列を作成 @sprite_gauge = [Sprite.new(viewport)] (1..6).each do |i| # 本体ゲージ用のスプライトを作成 @sprite_gauge[i] = Sprite.new(viewport) # 座標を設定 @sprite_gauge[i].x = (x - i) + 8 @sprite_gauge[i].y = y + i @sprite_gauge[i].z = z end end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # スプライトを解放 for sprite in @sprite_gauge do sprite.dispose end @sprite_gauge_base.dispose end #-------------------------------------------------------------------------- # ● 可視状態の取得 #-------------------------------------------------------------------------- def visible # 先頭の可視状態を返す return @sprite_gauge[1].visible end #-------------------------------------------------------------------------- # ● 可視状態の変更 # visible : 新しい可視状態 #-------------------------------------------------------------------------- def visible=(visible) # 可視状態の変更(イテレータ) (1..6).each do |i| @sprite_gauge[i].visible = visible end @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 #============================================================================== # ■ Status_Enemy #------------------------------------------------------------------------------ #  エネミーゲージのスプライト表示を扱うクラスです。 # このクラスはゲージの高速再描写に特化したクラスとなっています。 #============================================================================== class Status_Enemy #-------------------------------------------------------------------------- # ● オブジェクト初期化 # enemy : エネミー # viewport : ビューポート #-------------------------------------------------------------------------- def initialize(enemy, viewport) # ゲージ画像を読み込む gauge = gauge_initialize # エネミーを取得 @enemy = enemy # ゲージの描写座標をセット x = @enemy.screen_x - @enemy.bit_width / 2 y = @enemy.screen_y - @enemy.bit_height / 4 # ゲージを作成 @gauge = Mint_Gauge_System_Enemy.new(gauge.dup, x, y, 900, viewport) @gauge.set_rate(100) # ゲージを可視状態を設定 @gauge.visible = (MINTO::Gauge_Visible == true) # フレーム更新 update end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # ゲージを解放 @gauge.dispose end #-------------------------------------------------------------------------- # ● ゲージ用ビットマップの作成 #-------------------------------------------------------------------------- def gauge_initialize # ゲージの読み込み gauge = RPG::Cache.picture(MINTO::HP_Gauge) # 本体ゲージ用のスプライトを作成 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 update_enemy_gauge # エネミ−のHPと最終HPが異なる場合 if @enemy.hp != @enemy.last_hp2 # ゲージを可視状態にする @gauge.visible = true # 最終HPと現在HPの差を求める gap = (@enemy.last_hp - @enemy.hp) # 差分を差分の絶対値で割った数で最終HPを引く @enemy.last_hp2 -= gap / [gap.abs, MINTO::HP_Frame].min # ゲージ減少中の場合 if gap >= 1 then # 表現上の最低値をエネミーの本来のHPに設定 @enemy.last_hp2 = [@enemy.last_hp2, @enemy.hp].max # ゲージ増加中の場合 else # 表現上の最高値をエネミーの本来のHPに設定 @enemy.last_hp2 = [@enemy.last_hp2, @enemy.hp].min end # ゲージを更新 @gauge.set_rate(@enemy.last_hp2.rate(@enemy.maxhp)) else # 最終HPに現在HPを代入 @enemy.last_hp = @enemy.hp.to_i @enemy.last_hp2 = @enemy.hp.to_i # ゲージを不可視にする @gauge.visible = false if MINTO::Gauge_Visible == false end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # ゲージを更新 update_enemy_gauge end end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ #  エネミーを扱うクラスです。 # このクラスは Game_Troop クラス (RPG_Troop::data) の内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :last_hp # 最終HP attr_accessor :last_hp2 # 最終HP2 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # troop_id : トループ ID # member_index : トループメンバーのインデックス # alias : initialize_Active_Enemy_Hp #-------------------------------------------------------------------------- alias :initialize_Active_Enemy_Hp :initialize def initialize(troop_id, member_index) # 元の処理を実行 initialize_Active_Enemy_Hp(troop_id, member_index) # 最終HPを初期化 @last_hp = maxhp @last_hp2 = maxhp end #-------------------------------------------------------------------------- # ● HP の変更 # hp : 新しい HP #-------------------------------------------------------------------------- def hp=(hp) # 最終HPを保存 @last_hp = @last_hp2.to_i # スーパークラスを実行 super end #-------------------------------------------------------------------------- # ● 画像の幅の取得 #-------------------------------------------------------------------------- def bit_width # エネミーのグラフィックを読み込んで、その画像の幅を取得する width = RPG::Cache.battler(battler_name, battler_hue).width # 画像の幅を返す return width end #-------------------------------------------------------------------------- # ● 画像の高さの取得 #-------------------------------------------------------------------------- def bit_height # エネミーのグラフィックを読みンで、その画像の高さを取得 height = RPG::Cache.battler(battler_name, battler_hue).height # 画像の高さを返す return height end end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # battler : バトラー (Game_Battler) # alias : initialize_Active_Enemy_Hp #-------------------------------------------------------------------------- alias :initialize_Active_Enemy_Hp :initialize def initialize(viewport, battler = nil) # 元の処理を実行 initialize_Active_Enemy_Hp(viewport, battler) # バトラーがエネミーの場合 if @battler.class == Game_Enemy then # HPゲージを作成 @hp_gauge = Status_Enemy.new(@battler, viewport) end end #-------------------------------------------------------------------------- # ● 解放 # alias : dispose_MINTO_Real_Shadow #-------------------------------------------------------------------------- alias :dispose_Active_Enemy_Hp :dispose def dispose # 元の処理を実行 dispose_Active_Enemy_Hp # バトラーがエネミーの場合 if @battler.class == Game_Enemy then # HPゲージを解放 @hp_gauge.dispose end end #-------------------------------------------------------------------------- # ● フレーム更新 # alias : update_Active_Enemy_Hp #-------------------------------------------------------------------------- alias :update_Active_Enemy_Hp :update def update # 元の処理を実行 update_Active_Enemy_Hp # バトラーがエネミーの場合 if @battler.class == Game_Enemy then # ダメージが無効な場合 if not Scene_Battle.rtab? and @battler.damage == nil or Scene_Battle.rtab? then # HPゲージを更新 @hp_gauge.update end end end end #============================================================================== # ■ Scene_Battle (分割定義 1) #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :spriteset # スプライトセット #-------------------------------------------------------------------------- # ● RTABフラグの取得 #-------------------------------------------------------------------------- def self.rtab? return method_defined?("synthe?") end end end