RPGツクールXP/VX用のRGSS素材です。
一部英語版対応です。
(A few materials can be used for English RPG MAKER XP/VX.)
競合率はルファーの独断と偏見なのでたまにハズレます。
#==============================================================================
# ■ SEエコー
#------------------------------------------------------------------------------
# SE にエコーをかけます。
# (C) ルファー
# WebSite https://tkoolerlufar.pages.dev/
#==============================================================================
=begin
=対応RGSS
2
=他の素材との競合の可能性
... 多分しないと思います
=使い方
イベントコマンド [スクリプト] などで、エコーを再生したくなったら
RPG::SE.echo = true
という処理を実行すればエコーするようになります。
元に戻すときは
RPG::SE.echo = false
を実行してください。
=上級者向けの使い方
RPG::SE#echo? メソッド (174行目以降) の処理を変更すれば、
自動でエコーの再生を切り替えてくれます。
真のときにエコーが鳴ります。
デフォルトではクラス変数 @@_Lufar_SEe_Echo の値をそのまま返します。
=更新履歴
2010/03/19 同じファイル名、同じピッチ、異なるボリュームの SE を
時間差で鳴らすときの処理を変更
2010/03/04 RPG::SE#echo?メソッドの宣言開始行の表記が誤っているのを訂正
ロード SE がうまく鳴らないバグを修正
2010/03/01 公開
=再定義しているメソッド
RPG::SE#play (エイリアス使用)
RPG::SE.stop (エイリアス使用)
Scene_Base#main
Scene_Title#open_command_window
Scene_Title#close_command_window
Scene_Title#command_new_game
Scene_Map#update_basic (エイリアス使用)
Scene_File#do_load (エイリアス使用)
Scene_End#open_command_window
Scene_End#close_command_window
Scene_End#command_to_title
Scene_Battle#update_basic (エイリアス使用)
=新規定義しているメソッド
RPG::SE#echo?
=新規定義しているプロパティ
RPG::SE.echo
=end
#----------------------------------------------------------------------------
# ◇ SoundEcho モジュール
#----------------------------------------------------------------------------
module SoundEcho
#--------------------------------------------------------------------------
# ○ モジュール変数
#--------------------------------------------------------------------------
@@playing_sounds = Array.new
#--------------------------------------------------------------------------
# ◇ SE クラス
#--------------------------------------------------------------------------
class SE
#------------------------------------------------------------------------
# ○ 公開インスタンス変数
#------------------------------------------------------------------------
attr_reader :se
attr_reader :duration
#------------------------------------------------------------------------
# ● オブジェクト初期化
#------------------------------------------------------------------------
def initialize(se)
@se = se.clone
@duration = 30
end
#------------------------------------------------------------------------
# ● 比較演算 (等しい)
#------------------------------------------------------------------------
def ==(other)
case other
when self.class
return (
@se.name == other.se.name &&
@se.volume * @duration == other.se.volume * other.duration &&
@se.pitch == other.se.pitch)
when ::RPG::SE
return (
@se.name == other.name &&
@se.volume * @duration == other.volume &&
@se.pitch == other.pitch)
else
return false
end
end
#------------------------------------------------------------------------
# ○ フレーム更新
#------------------------------------------------------------------------
def update
return if @duration == 0
if @duration % 6 == 0
Audio.se_play(
"Audio/SE/" + @se.name, @se.volume * @duration / 30, @se.pitch)
end
@duration -= 1
end
end
#--------------------------------------------------------------------------
# ○ モジュール関数
#--------------------------------------------------------------------------
module_function
#--------------------------------------------------------------------------
# ○ SE の再生
# se : 再生する SE
#--------------------------------------------------------------------------
def play(se)
return if not se.kind_of?(RPG::SE) or se.name.empty?
@@playing_sounds.delete(se)
@@playing_sounds.push(SE.new(se))
end
#--------------------------------------------------------------------------
# ○ SE の停止
#--------------------------------------------------------------------------
def stop
Audio.se_stop
@@playing_sounds.clear
end
#--------------------------------------------------------------------------
# ○ SE エコー中判定
#--------------------------------------------------------------------------
def empty?
@@playing_sounds.empty?
end
#--------------------------------------------------------------------------
# ○ フレーム更新
#--------------------------------------------------------------------------
def update
@@playing_sounds.each {|se| se.update }
@@playing_sounds.delete_if {|se| se.duration == 0 }
end
end
#----------------------------------------------------------------------------
# ◆ RPG モジュール
#----------------------------------------------------------------------------
module RPG
#--------------------------------------------------------------------------
# ◆ SE クラス
#--------------------------------------------------------------------------
class SE < AudioFile
#------------------------------------------------------------------------
# ○ クラス変数
#------------------------------------------------------------------------
@@_Lufar_SEe_Echo = false
#------------------------------------------------------------------------
# ○ エコーフラグの取得
#------------------------------------------------------------------------
def self.echo
@@_Lufar_SEe_Echo
end
#------------------------------------------------------------------------
# ○ エコーフラグの設定
# flag : 設定するフラグ
#------------------------------------------------------------------------
def self.echo=(flag)
@@_Lufar_SEe_Echo = flag
end
#------------------------------------------------------------------------
# ○ エコー判定
#------------------------------------------------------------------------
def echo?
@@_Lufar_SEe_Echo
end
#------------------------------------------------------------------------
# ○ SE の再生
#------------------------------------------------------------------------
unless method_defined? :_Lufar_SEe_PrototypeOfPlaying
alias _Lufar_SEe_PrototypeOfPlaying play
end
def play
echo? ? SoundEcho.play(self) : _Lufar_SEe_PrototypeOfPlaying
end
#------------------------------------------------------------------------
# ○ SE の停止
#------------------------------------------------------------------------
def self.stop
SoundEcho.stop
end
end
end
#----------------------------------------------------------------------------
# ◆ Scene_Base クラス
#----------------------------------------------------------------------------
class Scene_Base
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
start # 開始処理
perform_transition # トランジション実行
post_start # 開始後処理
Input.update # 入力情報を更新
while $scene.equal?(self) # 画面が切り替わるまでループ
SoundEcho.update ## エコーする SE を更新
Graphics.update # ゲーム画面を更新
Input.update # 入力情報を更新
update # フレーム更新
end
begin
SoundEcho.update
Graphics.update
Graphics.frame_count -= 1
end until SoundEcho.empty?
pre_terminate # 終了前処理
Graphics.freeze # トランジション準備
terminate # 終了処理
end
end
#----------------------------------------------------------------------------
# ● Scene_Title クラス
#----------------------------------------------------------------------------
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● コマンドウィンドウを開く
#--------------------------------------------------------------------------
def open_command_window
@command_window.open
begin
@command_window.update
SoundEcho.update
Graphics.update
end until @command_window.openness == 255
end
#--------------------------------------------------------------------------
# ● コマンドウィンドウを閉じる
#--------------------------------------------------------------------------
def close_command_window
@command_window.close
begin
@command_window.update
SoundEcho.update
Graphics.update
end until @command_window.openness == 0
end
#--------------------------------------------------------------------------
# ● コマンド : ニューゲーム
#--------------------------------------------------------------------------
def command_new_game
confirm_player_location
Sound.play_decision
$game_party.setup_starting_members # 初期パーティ
$game_map.setup($data_system.start_map_id) # 初期位置のマップ
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$scene = Scene_Map.new
RPG::BGM.fade(1500)
close_command_window
until SoundEcho.empty?
SoundEcho.update
Graphics.update
Graphics.frame_count -= 1
end
Graphics.fadeout(60)
Graphics.wait(40)
Graphics.frame_count = 0
RPG::BGM.stop
$game_map.autoplay
end
end
#----------------------------------------------------------------------------
# ◆ Scene_Map クラス
#----------------------------------------------------------------------------
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 基本更新処理
#--------------------------------------------------------------------------
alias _Lufar_SEe_PrototypeOfUb update_basic
def update_basic
SoundEcho.update
_Lufar_SEe_PrototypeOfUb
end
end
#----------------------------------------------------------------------------
# ◆ Scene_End クラス
#----------------------------------------------------------------------------
class Scene_End < Scene_Base
#--------------------------------------------------------------------------
# ● コマンドウィンドウを開く
#--------------------------------------------------------------------------
def open_command_window
@command_window.open
begin
@command_window.update
SoundEcho.update
Graphics.update
end until @command_window.openness == 255
end
#--------------------------------------------------------------------------
# ● コマンドウィンドウを閉じる
#--------------------------------------------------------------------------
def close_command_window
@command_window.close
begin
@command_window.update
SoundEcho.update
Graphics.update
end until @command_window.openness == 0
end
#--------------------------------------------------------------------------
# ● コマンド [タイトルへ] 選択時の処理
#--------------------------------------------------------------------------
def command_to_title
Sound.play_decision
RPG::BGM.fade(800)
RPG::BGS.fade(800)
RPG::ME.fade(800)
$scene = Scene_Title.new
close_command_window
until SoundEcho.empty?
SoundEcho.update
Graphics.update
Graphics.frame_count -= 1
end
Graphics.fadeout(60)
end
end
#----------------------------------------------------------------------------
# ◆ Scene_Load クラス
#----------------------------------------------------------------------------
class Scene_File < Scene_Base
#--------------------------------------------------------------------------
# ● ロードの実行
#--------------------------------------------------------------------------
alias _Lufar_SEe_PrototypeOfDl do_load
def do_load
until SoundEcho.empty?
SoundEcho.update
Graphics.update
Graphics.frame_count -= 1
end
_Lufar_SEe_PrototypeOfDl
end
end
#----------------------------------------------------------------------------
# ◆ Scene_Battle クラス
#----------------------------------------------------------------------------
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 基本更新処理
# main : メインの update メソッドからの呼び出し
#--------------------------------------------------------------------------
alias _Lufar_SEe_PrototypeOfUb update_basic
def update_basic(main = false)
SoundEcho.update unless main
_Lufar_SEe_PrototypeOfUb(main)
end
end
戻る