=begin RGSS3    ★ キャラクター入退場演出 ★ キャラクターがマップ内に入場する際や、マップから退場する際に、 特殊なフェードイン/アウト演出を与えます。 ● 仕様 ●========================================================== キャラクターが「歩いて」特定のリージョン内へ入ろうとした場合、 そのキャラクターに退場(フェードアウト)演出を与えます。※1,2,4 -------------------------------------------------------------------- キャラクターが「歩いて」特定のリージョン内から出ようとした場合、 そのキャラクターに入場(フェードイン)演出を与えます。 ※1,3,4 -------------------------------------------------------------------- ※1 プレイヤー操作や[移動ルートの設定]によりキャラクターが歩いている ことが動作条件です。 [場所移動]や[イベントの位置設定]によりキャラクターが移動した場合 には動作しません。 ※2 退場後のキャラクターは[透明化]をONにした場合と同じ状態になります。 ※3 入場時にキャラクターの[透明化]がOFFの場合は動作しません。 ※4 入場演出中に退場させようとしたり、退場演出中に入場させようとしても 正常に動作しません。 ==================================================================== ● 再定義情報 ●==================================================== Game_Follower の update を再定義しています。 ==================================================================== ver1.00 Last Update : 2018/04/20 4/20 : 新規 ろかん   http://kaisou-ryouiki.sakura.ne.jp/ =end $rsi ||= {} $rsi["キャラクター入退場演出"] = true #=========================================== # 設定箇所 #=========================================== module Entry_And_Exit_Effect # 入退場口となるリージョンID E2_REGION_ID = 10 end #=========================================== # ここまで #=========================================== class Game_CharacterBase #-------------------------------------------------------------------------- # ● インクルード Entry_And_Exit_Effect #-------------------------------------------------------------------------- include Entry_And_Exit_Effect #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :e2_effect # 入退場フラグ attr_accessor :original_opacity # オリジナルの透明度 attr_writer :opacity # 不透明度 #-------------------------------------------------------------------------- # ● 公開メンバ変数の初期化 #-------------------------------------------------------------------------- alias _e2_effect_init_public_members init_public_members def init_public_members _e2_effect_init_public_members @e2_effect = 0 @original_opacity = self.opacity end #-------------------------------------------------------------------------- # ● 非公開メンバ変数の初期化 #-------------------------------------------------------------------------- alias _e2_effect_init_private_members init_private_members def init_private_members _e2_effect_init_private_members @old_region_id = 0 end #-------------------------------------------------------------------------- # ● キャラクターのいるリージョンID #-------------------------------------------------------------------------- def get_character_region_id $game_map.region_id(self.x, self.y) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias _e2_effect_update update def update _e2_effect_update e2_effect_update unless self.is_a?(Game_Vehicle) end #-------------------------------------------------------------------------- # ● 入退場リージョン判定 #-------------------------------------------------------------------------- def e2_region?(region_id) E2_REGION_ID == region_id end #-------------------------------------------------------------------------- # ● 入場判定 #-------------------------------------------------------------------------- def entry?(region_id) e2_region?(@old_region_id) && !e2_region?(region_id) && transparent end #-------------------------------------------------------------------------- # ● 退場判定 #-------------------------------------------------------------------------- def exit?(region_id) e2_region?(region_id) && !e2_region?(@old_region_id) && !transparent end #-------------------------------------------------------------------------- # ● 入退場関連の更新 #-------------------------------------------------------------------------- def e2_effect_update unless @character_name.empty? nr = get_character_region_id if moving? && self.e2_effect.zero? if entry?(nr) self.e2_effect = 1 elsif exit?(nr) self.e2_effect = 2 end end @old_region_id = nr end end end class Game_Player < Game_Character #-------------------------------------------------------------------------- # ● メンバーの中に入退場演出中のキャラがいるか #-------------------------------------------------------------------------- def all_members_r2_effect? !(self.e2_effect.zero? && @followers.all_followers_r2_effect?) end end class Game_Follower < Game_Character #-------------------------------------------------------------------------- # ● フレーム更新 ※再定義 #-------------------------------------------------------------------------- def update @move_speed = $game_player.real_move_speed @transparent = $game_player.transparent unless $game_player.all_members_r2_effect? @walk_anime = $game_player.walk_anime @step_anime = $game_player.step_anime @direction_fix = $game_player.direction_fix @opacity = $game_player.opacity unless $game_player.all_members_r2_effect? @blend_type = $game_player.blend_type super end end class Game_Followers #-------------------------------------------------------------------------- # ● 隊列メンバーの中に入退場演出中のキャラがいるか #-------------------------------------------------------------------------- def all_followers_r2_effect? @data.all?{|follower| follower.e2_effect.zero? } end end class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● その他の更新 #-------------------------------------------------------------------------- alias _e2_effect_update_other update_other def update_other _e2_effect_update_other update_e2_effect unless @character.is_a?(Game_Vehicle) end #-------------------------------------------------------------------------- # ● 入退場関連の更新 #-------------------------------------------------------------------------- def update_e2_effect case @character.e2_effect when 1 # 入場開始 @character.original_opacity = self.opacity @character.transparent = false self.visible = true @character.opacity = 0 self.opacity = 0 self.color.set(0, 0, 0, 255) @character.e2_effect = 3 when 2 # 退場開始 @character.original_opacity = self.opacity self.color.set(0, 0, 0, 0) @character.e2_effect = 4 when 3 # 入場中 self.opacity = @character.opacity = [@character.original_opacity, @character.opacity + 20].min self.color.alpha -= 10 @character.e2_effect = 5 if self.color.alpha.zero? when 4 # 退場中 @character.opacity = self.opacity -= 10 self.color.alpha += 20 @character.e2_effect = 6 if self.opacity.zero? when 5 # 入場完了 @character.e2_effect = 0 when 6 # 退場完了 self.opacity = @character.original_opacity @character.transparent = true self.visible = false @character.opacity = 255 self.color.set(0, 0, 0, 0) @character.e2_effect = 0 end end end