#============================================================================== # ■ RGSS3 キャラクターフェード Ver1.00 by 星潟 #------------------------------------------------------------------------------ # プレイヤーやイベントに対しフレームと処理終了時の不透明度を指定して # フェード効果を設定できるようになります。 # 明滅を繰り返すループフェードも指定出来ます。 # なお、フェード処理中に該当するキャラクターの不透明度が # フェード処理以外で変更された場合、フェード処理は中止されます。 #============================================================================== # イベントコマンドのスクリプトから指定 #------------------------------------------------------------------------------ # character_fade(-1,0,60) # # プレイヤーを60フレームかけて不透明度を0にします。 #------------------------------------------------------------------------------ # character_fade(0,255,30) # # このイベントコマンドを実行したイベントを30フレームかけて不透明度を255にします。 #------------------------------------------------------------------------------ # character_fade(1,128,120) # # イベントID1を120フレームかけて不透明度を128にします。 #------------------------------------------------------------------------------ # character_loop_fade(1,0,30) # # イベントID1を30フレームかけて不透明度を0にした後 # コマンドを実行する前の不透明度に30フレームかけて戻り # 再び30フレームかけて不透明度を0にするといった処理を繰り返します。 # 次に不透明度を変更されるか、character_fadeを実行されるか # 新たにcharacter_loop_fadeが実行されるまでの間、実行され続けます。 #============================================================================== # イベントコマンドの移動ルートの設定のスクリプトから指定 #------------------------------------------------------------------------------ # character_fade(0,60,true) # # 60フレームかけて不透明度を0にします。 # その間、指定キャラクターに対してウェイトをかけます。 #------------------------------------------------------------------------------ # character_fade(255,30,false) # # 30フレームかけて不透明度を255にします。 # その間、指定キャラクターに対してウェイトをかけません。 #------------------------------------------------------------------------------ # character_fade(128,120,true) # # 120フレームかけて不透明度を128にします。 # その間、指定キャラクターに対してウェイトをかけます。 #------------------------------------------------------------------------------ # character_loop_fade(0,30) # # 30フレームかけて不透明度を0にした後 # コマンドを実行する前の不透明度に30フレームかけて戻り # 再び30フレームかけて不透明度を0にするといった処理を繰り返します。 # 次に不透明度を変更されるか、character_fadeを実行されるか # 新たにcharacter_loop_fadeが実行されるまでの間、実行され続けます。 #============================================================================== # イベントの名前から指定 #------------------------------------------------------------------------------ # # # イベントの名前にこのような記述が含まれる場合 # このイベントの不透明度は120の状態でマップ上に配置される。 #------------------------------------------------------------------------------ # # # イベントの名前にこのような記述が含まれる場合 # このイベントはイベントコマンドの移動ルートの設定から # character_loop_fade(0,60)が指定されたのと同じループフェード設定を # 初期状態から持っているものとする。 # (扱いは通常のループフェードと同じなので、同じ条件で解除もされる) #============================================================================== module CharacterFade Word1 = "FO" Word2 = "LF" end class Game_Interpreter #-------------------------------------------------------------------------- # 指定キャラクターのフェード処理 #-------------------------------------------------------------------------- def character_fade(character_index,target,duration) c = get_character(character_index) return unless c c.character_fade(target,duration + 1) end #-------------------------------------------------------------------------- # 指定キャラクターのフェード処理 #-------------------------------------------------------------------------- def character_loop_fade(character_index,target,duration) c = get_character(character_index) return unless c c.character_loop_fade(target,duration + 1) end end class Game_CharacterBase #-------------------------------------------------------------------------- # 歩行/足踏みアニメの更新 #-------------------------------------------------------------------------- alias update_animation_fade_opacity update_animation def update_animation update_fade_opacity update_animation_fade_opacity end #-------------------------------------------------------------------------- # フェードの更新 #-------------------------------------------------------------------------- def update_fade_opacity end end class Game_Character < Game_CharacterBase attr_accessor :last_fade_opacity attr_accessor :fade_opacity_target attr_accessor :fade_opacity_duration attr_accessor :fade_opacity_power attr_accessor :loop_fade attr_accessor :loop_fade_duration #-------------------------------------------------------------------------- # フェードの設定 #-------------------------------------------------------------------------- def character_fade(target,duration,wait = false) @loop_fade = nil @loop_fade_duration = nil @wait_count = duration if wait common_character_fade(target,duration) end #-------------------------------------------------------------------------- # ループフェードの変更 #-------------------------------------------------------------------------- def character_loop_fade(target,duration) @loop_fade = @opacity @loop_fade_duration = duration common_character_fade(target,duration) end #-------------------------------------------------------------------------- # フェード共通設定 #-------------------------------------------------------------------------- def common_character_fade(target,duration) @last_fade_opacity = @opacity @fade_opacity_target = target @fade_opacity_duration = duration @fade_opacity_power = (target - @opacity).to_f / duration update_fade_opacity end #-------------------------------------------------------------------------- # フェードの更新 #-------------------------------------------------------------------------- def update_fade_opacity return unless @fade_opacity_target && @fade_opacity_duration && @fade_opacity_power if check_update_fade_opacity_continue? && @last_fade_opacity == @opacity @fade_opacity_duration -= 1 @opacity += @fade_opacity_power @last_fade_opacity = @opacity else return reset_fade_opacity end if @fade_opacity_duration <= 0 @opacity = @fade_opacity_target if @loop_fade @last_fade_opacity = @opacity @fade_opacity_target = @loop_fade @fade_opacity_duration = @loop_fade_duration @fade_opacity_power *= -1 @loop_fade = @opacity end end reset_fade_opacity unless check_update_fade_opacity_continue? end #-------------------------------------------------------------------------- # フェードのリセット #-------------------------------------------------------------------------- def reset_fade_opacity @last_fade_opacity = nil @fade_opacity_target = nil @fade_opacity_duration = nil @fade_opacity_power = nil @loop_fade = nil @loop_fade_duration = nil end #-------------------------------------------------------------------------- # フェードの更新 #-------------------------------------------------------------------------- def check_update_fade_opacity_continue? @fade_opacity_power > 0 ? @fade_opacity_target > @opacity : @fade_opacity_target < @opacity end end class Game_Event < Game_Character #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_fade_opacity initialize def initialize(map_id, event) initialize_fade_opacity(map_id, event) @opacity = @event.first_opacity if @event.first_opacity >= 0 a = @event.loop_fade character_loop_fade(a[0],a[1]) unless a.empty? end end class RPG::Event #-------------------------------------------------------------------------- # ループフェード設定取得 #-------------------------------------------------------------------------- def first_opacity @first_opacity ||= /<#{CharacterFade::Word1}[::](\d+)>/ =~ name ? $1.to_i : -1 end #-------------------------------------------------------------------------- # ループフェード設定取得 #-------------------------------------------------------------------------- def loop_fade @loop_fade ||= /<#{CharacterFade::Word2}[::](\d+),(\d+)>/ =~ name ? [$1.to_i,$2.to_i] : [] end end