#◆◇◆◇◆ リアル・シャドウシステム ver 1.14 ◇◆◇◆◇ # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.14 RTAB(歯車の城)に再対応。 ver 1.13 RTAB(歯車の城)にも対応。 ver 1.12 前回更新時のミスを修正。 ver 1.11 途中出現のエネミーにも 影が表示されていたミスを修正。 ver 1.10 アクターにも設定できるように改良。 ver 1.01 スプライト解放時のミスを修正。 説明 バトラーのグラフィックから、 影を作成し、自動描写するスクリプトです。 通常タイプ、浮遊タイプ、影無しを敵ごとに設定できます。 浮遊タイプの場合、バトラーグラフィックは上下に動き 浮遊している感じに演出され、 影も、バトラーが下に動けば大きくなり、 上に動けば小さくなります。 通常タイプの場合はバトラーの動きにあわせて動きます。 セクション指定上下関係 コラプス改造α ↓ 反転表示バトラー ↓ このスクリプト 導入場所の注意 上記の条件をクリアし、且つシステム下部推奨 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # リアル・シャドウシステムを有効化 ( true で有効 / false で無効 ) RGSS["Real_Shadow"] = true # 影を描写しない背景の名前の配列 # 戦闘背景のグラフィック名がこの配列の中に存在する場合は、 # 影が描写されません。 Not_Shadow_Back_Array = [ "001-Grassland01", "002-Woods01"] end if MINTO::RGSS["Real_Shadow"] == true then #============================================================================== # ☆ カスタマイズ #------------------------------------------------------------------------------ # 機能のカスタマイズを行います。 #============================================================================== module Battler_Shadow #-------------------------------------------------------------------------- # ● 影の作成パターンの設定 #-------------------------------------------------------------------------- def shadow_pattern # 説明 # @shadow_x と @shadow_y は影の倍率です。 # 1 の場合は本来のバトラーグラフィックと同じ大きさになります。 # @shadow_x は横ズーム率 # @shadow_y は縦ズーム率です。 # 設定がよく分からない場合は # 浮遊敵でない場合は # @shadow_x = 1.35 # @shadow_y = 0.25 を # 逆に浮遊敵の場合は # @shadow_x = 0.65 # @shadow_y = 0.12 が開発者的にベストです。 # @shadow_oy は影の縦の描写位置の補正値です # 本来のバトラーグラフィックの「余白」次第では、 # 影の位置に違和感が生じるので、その際はここで微調節してください。 # 整数なら下に負数なら上に補正されます。 # 浮遊敵なら128と言った感じでかなり下の方に設定すれば、 # リアルな感じになります。 # @float は浮遊フラグです。 # true でオン false でオフです。 # オンにすると敵は上下に、ゆっくり移動を繰り返します。 # その際、影もそれに合わせて大きくなったり、小さくなったりします。 # 影そのものを表示したくない敵の場合は # @float に nil を代入してください。 # エネミーの名前によって分岐 case @battler.name # 通常タイプサンプル設定 when "テストさん" then # 影のパターンを設定 @shadow_x = 1.35 @shadow_y = 0.25 @shadow_oy = 0 @float = false # 浮遊敵サンプル設定 when "巨大蜂" then # 影のパターンを設定 @shadow_x = 0.65 @shadow_y = 0.12 @shadow_oy = 128 @float = true # それ以外のエネミーの場合 else # 影のパターンを設定 @shadow_x = 1.35 @shadow_y = 0.25 @shadow_oy = 0 @float = false end end #-------------------------------------------------------------------------- # ● 影の作成パターンの設定(アクター) #-------------------------------------------------------------------------- def shadow_pattern_actor # 説明 # @shadow_x と @shadow_y は影の倍率です。 # 1 の場合は本来のバトラーグラフィックと同じ大きさになります。 # @shadow_x は横ズーム率 # @shadow_y は縦ズーム率です。 # 設定がよく分からない場合は # 浮遊アクターでない場合は # @shadow_x = 1.35 # @shadow_y = 0.25 を # 逆に浮遊アクターの場合は # @shadow_x = 0.65 # @shadow_y = 0.12 が開発者的にベストです。 # @shadow_oy は影の縦の描写位置の補正値です # 本来のバトラーグラフィックの「余白」次第では、 # 影の位置に違和感が生じるので、その際はここで微調節してください。 # 整数なら下に負数なら上に補正されます。 # 浮遊アクターなら128と言った感じでかなり下の方に設定すれば、 # リアルな感じになります。 # @float は浮遊フラグです。 # true でオン false でオフです。 # オンにするとアクターは上下に、ゆっくり移動を繰り返します。 # その際、影もそれに合わせて大きくなったり、小さくなったりします。 # 影そのものを表示したくないアクターの場合は # @float に nil を代入してください。 # アクターの名前によって分岐 case @battler.name # 通常タイプサンプル設定 when "デバッグくん" then # 影のパターンを設定 @shadow_x = 1.35 @shadow_y = 0.25 @shadow_oy = 0 @float = false # 浮遊アクターサンプル設定 when "デバッグさん" then # 影のパターンを設定 @shadow_x = 0.65 @shadow_y = 0.12 @shadow_oy = 128 @float = true # それ以外のアクターの場合 else # 影のパターンを設定 @shadow_x = 1.35 @shadow_y = 0.25 @shadow_oy = 0 @float = nil end end end #============================================================================== # ■ Sprite #------------------------------------------------------------------------------ #  スプライト表示を扱う組み込みクラスです。 #============================================================================== class Sprite #-------------------------------------------------------------------------- # ● 複製の作成 #-------------------------------------------------------------------------- def dup # 各データをコピー sprite = Sprite.new(self.viewport) sprite.bitmap = self.bitmap.dup if self.bitmap != nil sprite.x = self.x sprite.y = self.y sprite.z = self.z sprite.visible = self.visible sprite.ox = self.ox sprite.oy = self.oy sprite.angle = self.angle sprite.mirror = self.mirror sprite.opacity = self.opacity sprite.blend_type = self.blend_type sprite.color = self.color.dup sprite.src_rect = self.src_rect.dup sprite.zoom_x = self.zoom_x sprite.zoom_y = self.zoom_y return sprite end end #============================================================================== # ☆ Battler_Shadow #------------------------------------------------------------------------------ # 影の演出を管理するシステムモジュールです。 #============================================================================== module Battler_Shadow #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # 元の処理を実行 super # 影が存在する場合 if @shadow_sprite != nil then # 影を解放 @shadow_sprite.bitmap.dispose @shadow_sprite.dispose end end #-------------------------------------------------------------------------- # ● セルリンク更新 # alias : cell_link_update_MINTO_Real_Shadow #-------------------------------------------------------------------------- # ACAシステムを導入している場合 if MINTO::RGSS["A・C・A・システム"] == true then alias cell_link_update_MINTO_Real_Shadow cell_link_update def cell_link_update(id, cell_data, i = 0) # 元の処理を実行 cell_link_update_MINTO_Real_Shadow(id, cell_data, i) # 影を更新 update_shadow_base end end #-------------------------------------------------------------------------- # ● バトラーグラフィックの描写 #-------------------------------------------------------------------------- def bitmap_set # ビットマップを取得、設定 @battler_name = @battler.battler_name @battler_hue = @battler.battler_hue self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue) @width = bitmap.width @height = bitmap.height self.ox = @width / 2 self.oy = @height # バトラーがエネミーの場合 if @battler.is_a?(Game_Enemy) then # 高さを設定 @battler.height = @height end # 戦闘不能または隠れ状態なら不透明度を 0 にする if @battler.dead? or @battler.hidden then self.opacity = 0 end end #-------------------------------------------------------------------------- # ● Y座標の取得 #-------------------------------------------------------------------------- def y # スパークラスを実行 bool = super # アニメーション表示中の場合 if (@_animation_duration >= 1) or (@_animation.to_a.size >= 1) then # もともとのY座標を返す return bool end # Y座標に補正値をプラスして返す return bool + @y_plus end #-------------------------------------------------------------------------- # ● Y座標の変更 #-------------------------------------------------------------------------- def y=(n) # アニメ表示中の場合で、且つ位置に変化がない場合 # 又はコラプス実行中で位置に変化がない場合 if ((@_animation_duration >= 1 or @_animation.to_a.size >= 1) and n == @battler.screen_y) or (@_collapse_duration >= 1 and n == @battler.screen_y) # メソッドを返す return else # スーパークラスを実行 super(n) end end #-------------------------------------------------------------------------- # ● 影の更新可能フラグの取得 #-------------------------------------------------------------------------- def shadow_update_ok? # バトラーが存在する場合 @battler.exist? or # 又は、コラプス実行中かアニメ表示中でない場合 (@_collapse_duration > 0 or @_animation_duration == 0) or (@_animation.to_a.size >= 1) end #-------------------------------------------------------------------------- # ● 影の作成 #-------------------------------------------------------------------------- def shadow_set # バトラーがエネミーの場合 if @battler.is_a?(Game_Enemy) == true then # パターンを取得 shadow_pattern elsif @battler.is_a?(Game_Actor) == true then # パターンを取得 shadow_pattern_actor end # @float が nil の場合 if @float == nil then # 処理を返す return end # 影用のスプライトを生成 @shadow_sprite = self.dup # 座標を調節する @shadow_sprite.y = @battler.screen_y - (self.oy / 8) + @shadow_oy # 色を黒にする @shadow_sprite.tone.red = -250 @shadow_sprite.tone.green = -250 @shadow_sprite.tone.blue = -250 # バトラーが存在しない場合 if not @battler.exist? then # 不透明にする @shadow_sprite.opacity = 0 # バトラーが存在する場合 else # 半透明にする @shadow_sprite.opacity = 160 end # 180度回転させる @shadow_sprite.angle = 180 # 左右を反転させる @shadow_sprite.mirror = (!self.mirror == true) # 横長にズームさせる @shadow_sprite.zoom_x *= @shadow_x @shadow_sprite.zoom_y *= @shadow_y end #-------------------------------------------------------------------------- # ● 影の更新(分岐) # force : 強制更新フラグ( true / false ) #-------------------------------------------------------------------------- def update_shadow_base(force = false) # 強制更新か、もしくは影の更新が可能な場合 if force == true or shadow_update_ok? then # 浮遊フラグがオンの場合 if @float == true then # 補正値が8以上の場合 if @y_plus >= 8 then # 補正値を逆転 @plus *= -1 # 補正値が-8以下の場合 elsif @y_plus <= -8 then # 補正値を逆転 @plus *= -1 end # 浮遊補正値を加算 @y_plus += @plus # アニメ表示中でない場合 if @_animation_duration == 0 then # Y座標に補正値を加算 self.y += @plus - @y_plus / 2 end # 影が存在する場合 if @shadow_sprite != nil then # 影を更新(浮遊敵用) update_shadow_float end else # 影が存在する場合 if @shadow_sprite != nil then # 影を更新(通常敵用) update_shadow end end end end #-------------------------------------------------------------------------- # ● 影の更新 #-------------------------------------------------------------------------- def update_shadow # 各情報を更新する @shadow_sprite.x = self.x @shadow_sprite.y = self.y - (self.oy / 8) + @shadow_oy @shadow_sprite.opacity = self.opacity - 95 @shadow_sprite.zoom_x = (self.zoom_x * @shadow_x) @shadow_sprite.zoom_y = (self.zoom_y * @shadow_y) end #-------------------------------------------------------------------------- # ● 影の更新(浮遊敵) #-------------------------------------------------------------------------- def update_shadow_float # 本来のY座標との差を求める plus = (self.y * 100) / @battler.screen_y # 各情報を更新する @shadow_sprite.x = self.x @shadow_sprite.opacity = self.opacity - 95 @shadow_sprite.zoom_x = (self.zoom_x * @shadow_x) * plus / 100 @shadow_sprite.zoom_y = (self.zoom_y * @shadow_y) * plus / 100 end end #============================================================================== # ■ Game_Battler (分割定義 1) #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :height # 高さ end #============================================================================== # ■ Sprite_Battler #------------------------------------------------------------------------------ #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include(Battler_Shadow) # バトラーシャドウ #-------------------------------------------------------------------------- # ● オブジェクト初期化 # viewport : ビューポート # battler : バトラー (Game_Battler) # alias : initialize_MINTO_Real_Shadow #-------------------------------------------------------------------------- alias initialize_MINTO_Real_Shadow initialize def initialize(viewport, battler = nil) # 影用の情報を初期化 @y_plus = 0 @plus = 1 # 元の処理を実行 initialize_MINTO_Real_Shadow(viewport, battler) # 現在の戦闘背景の名前を取得 name = $game_temp.battleback_name # 戦闘背景の条件をクリアしている場合 if not MINTO::Not_Shadow_Back_Array.include?(name) then # バトラーが有効な場合 if @battler != nil then # バトラーグラフィックを描写 bitmap_set # 影を作成 shadow_set end end end #-------------------------------------------------------------------------- # ● フレーム更新 # alias : update_MINTO_Real_Shadow #-------------------------------------------------------------------------- alias update_MINTO_Real_Shadow update def update # 元の処理を実行 update_MINTO_Real_Shadow # バトラーが有効な場合 if @battler != nil then # 影を更新 update_shadow_base end end #-------------------------------------------------------------------------- # ● バトラーの変更 # battler : 新しいバトラー #-------------------------------------------------------------------------- def battler=(battler) @battler = battler # バトラーが有効な場合 if @battler != nil then # バトラーグラフィックを描写 bitmap_set # 影を作成 shadow_set end end end end