#◆◇◆◇◆ 影描写スクリプトVX ver 1.01 ◇◆◇◆◇ # 全マスタースクリプト共通スクリプト # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin ■ 更新履歴 ○ ver 1.01(2011/04/09) エラー落ちする場合があるミスを修正。 ■ 説明 キャラクターに影を描写します。 プレイヤーの場合は自動で、 イベントの場合は名前に 影 の文字が含まれていれば影を描写します。 影はグラフィックが存在しない場合は描写しません。 画像はピクチャーフォルダにインポートしてください。 =end #============================================================================== # ☆ MINTO #------------------------------------------------------------------------------ # 様々なフラグを扱うメインモジュールです。 #============================================================================== module MINTO # 影描写スクリプトを有効化 ( true で有効 / false で無効 ) RGSS["Character_Shadow"] = true end if MINTO::RGSS["Character_Shadow"] == true then #============================================================================== # ■ Sprite_Shadow_Module #------------------------------------------------------------------------------ #  影表示用のスプライトです。 # Game_Character クラスのインスタンスを監視し、 # スプライトの状態を自動的に変化させます。 #============================================================================== module Sprite_Shadow_Module #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose # 影が存在する場合 unless @character_shadow.nil? then # 影を解放 @character_shadow.bitmap.dispose @character_shadow.dispose end # 継承先の処理に移行 super end #-------------------------------------------------------------------------- # ● 影の作成 #-------------------------------------------------------------------------- def character_shadow_set # 影用のスプライトを生成 @character_shadow = Sprite.new(self.viewport) # 影用の画像を読み込む @character_shadow.bitmap = Cache.picture("Shadow") # 影を半透明にする @character_shadow.opacity = (self.character.opacity / 2) # 座標を調節する @shadow_size = @character_shadow.bitmap.width @character_shadow.zoom_x = ((@cw * 100) / @shadow_size) / 100.0 @character_shadow.zoom_y = @character_shadow.zoom_x ox_rate = ((32 * 100) / @cw) / 100.0 oy_rate = ((48 * 100) / @ch) / 100.0 @character_shadow.ox = self.ox * ox_rate @character_shadow.oy = ((self.oy * oy_rate) / 2) - 4 @last_character_name = @character_name.dup # 影を更新 update_character_shadow end #-------------------------------------------------------------------------- # ● 影の更新 #-------------------------------------------------------------------------- def update_character_shadow # 元々影が存在しない場合 if @character_shadow == nil then # 処理を終了 return end # 解放済みの場合 unless @character_shadow.bitmap.nil? if @character_shadow.bitmap.disposed? then # 処理を終了 return end end # ジャンプ中の場合 if @character.jumping? then # 影を非表示にする @character_shadow.visible = false # 処理を終了 return end # タイル ID、ファイル名、色相のどれかが現在のものと異なる場合 if @last_character_name_shadow != @character_name @last_character_name_shadow = @character_name # 座標を調節する @shadow_size = @character_shadow.bitmap.width @character_shadow.zoom_x = ((@cw * 100) / @shadow_size) / 100.0 @character_shadow.zoom_y = @character_shadow.zoom_x @zoom_ox = @character_shadow.zoom_x @zoom_oy = @character_shadow.zoom_y ox_rate = ((32 * 100) / @cw) / 100.0 oy_rate = ((48 * 100) / @ch) / 100.0 @character_shadow.ox = self.ox * ox_rate @character_shadow.oy = ((self.oy * oy_rate) / 2) - 4 end # 各情報を更新する @character_shadow.x = self.x @character_shadow.y = self.y @character_shadow.zoom_x = @zoom_ox * self.zoom_x @character_shadow.zoom_y = @zoom_oy * self.zoom_y @character_shadow.visible = (self.visible and @character_name != "") @character_shadow.opacity = (self.character.opacity / 2) end end #============================================================================== # ■ Game_Event #------------------------------------------------------------------------------ #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理 # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。 #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :event # イベント end #============================================================================== # ■ Sprite_Character #------------------------------------------------------------------------------ #  キャラクター表示用のスプライトです。Game_Character クラスのインスタンスを # 監視し、スプライトの状態を自動的に変化させます。 #============================================================================== class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● システムインクルード #-------------------------------------------------------------------------- include(Sprite_Shadow_Module) # 影描写モジュール #-------------------------------------------------------------------------- # ● オブジェクト初期化 # character : キャラクター (Game_Character) #-------------------------------------------------------------------------- alias :MINTO_Character_Shadow_initialize :initialize def initialize(viewport, character = nil) # 元の処理を実行 MINTO_Character_Shadow_initialize(viewport, character) # キャラクターのタイプに応じて分岐 case @character # プレイヤー when Game_Player then # 影を作成 character_shadow_set # イベント when Game_Event then # イベントの名前に 影 が含まれている場合 if @character.event.name.include?("影") == true then # 影を作成 character_shadow_set end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias :update_MINTO_Character_Shadow :update def update # 元の処理を実行 update_MINTO_Character_Shadow # 影を更新 update_character_shadow end end end