#============================================================================== # ■ VXAce-RGSS3-45 音楽館 [Ver1.0.0] by Claimh #------------------------------------------------------------------------------ # 音楽を再生する音楽館を作ります。 # なお、音楽館の管理情報は全セーブデータで共通となります。 #------------------------------------------------------------------------------ # ●音楽館の表示許可(タイトルやメニュー上に音楽館を追加) # $game_exmusic.enable = true # ●音楽の表示許可 # $game_exmusic[id].enable = true # ●イベント等から呼び出す # SceneManager.call(Scene_ExMusic) #============================================================================== class MFile attr_reader :name attr_reader :bgm attr_reader :text attr_reader :enable def initialize(name, filename, text="", vol=100, pitch=100, enable=false) @name = name @bgm = RPG::BGM.new(filename, vol, pitch) @text = text @enable = enable end end module ExMusic # 音楽の設定 LIST = { # ID => MFile.new(曲名, "ファイル名(Audio/BGM/)", 説明, # ボリューム(0..100), ピッチ(50..150), 初期表示), 1 => MFile.new("空の旅", "Airship", "Airship\n改行"), 2 => MFile.new("通常戦闘曲", "Battle1", "戦闘曲"), 3 => MFile.new("ボス戦", "Battle8", "\\C[2]ラストバトル\\C[0]", 110, 120), 4 => MFile.new("回想", "Scene5", "回想シーン"), } # ヘルプウィンドウの行数(0:非表示) HELP_LINES = 2 # 初期表示状態 ENABLE = false # 非表示状態の曲をリストに表示しない NOT_SHOW = false end #============================================================================== # ■ ExMusic #============================================================================== module ExMusic #-------------------------------------------------------------------------- # ● ファイル名 #-------------------------------------------------------------------------- def self.filename "exmusic.rvdata2" end #-------------------------------------------------------------------------- # ● セーブの実行 #-------------------------------------------------------------------------- def self.save_exdata(obj) save_data(obj, filename) end #-------------------------------------------------------------------------- # ● ロードの実行 #-------------------------------------------------------------------------- def self.load_exdata exist? ? load_data(filename) : Game_ExMusicList.new end #-------------------------------------------------------------------------- # ● ファイル削除 #-------------------------------------------------------------------------- def self.delete_exdata return unless exist? File.delete(filename) rescue nil end #-------------------------------------------------------------------------- # ● ファイルの有無チェック #-------------------------------------------------------------------------- def self.exist? FileTest.exist?(filename) end end #============================================================================== # ■ DataManager #============================================================================== class << DataManager #-------------------------------------------------------------------------- # ● 各種ゲームオブジェクトの作成 #-------------------------------------------------------------------------- alias create_game_objects_exmusic create_game_objects def create_game_objects create_game_objects_exmusic load_music end #-------------------------------------------------------------------------- # ● セーブの実行 #-------------------------------------------------------------------------- alias save_game_exmusic save_game def save_game(index) r = save_game_exmusic(index) save_music if r r end #-------------------------------------------------------------------------- # ● ロードの実行 #-------------------------------------------------------------------------- alias load_game_exmusic load_game def load_game(index) r = load_game_exmusic(index) load_music if r r end #-------------------------------------------------------------------------- # ● ミュージックライブラリ情報load #-------------------------------------------------------------------------- def load_music $game_exmusic = ExMusic.load_exdata end #-------------------------------------------------------------------------- # ● ミュージックライブラリ情報load #-------------------------------------------------------------------------- def save_music ExMusic.save_exdata($game_exmusic) end #-------------------------------------------------------------------------- # ● ミュージックライブラリ情報削除 #-------------------------------------------------------------------------- def delete_music ExMusic.delete_exdata load_music end end #============================================================================== # ■ Game_ExMusic #============================================================================== class Game_ExMusic attr_writer :name # 曲名 attr_accessor :bgm # RPG:BGM attr_accessor :text # 表示文字 attr_accessor :enable # 表示可否 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(file) @name = file.name @bgm = file.bgm @text = file.text @enable = file.enable end #-------------------------------------------------------------------------- # ● 曲名 #-------------------------------------------------------------------------- def name return "--------" unless @enable @name end def enable=(v) p v @enable = v end end #============================================================================== # ■ Game_ExMusicList : 音楽館情報 # $game_exmusic で参照できます。 #============================================================================== class Game_ExMusicList LIST = ExMusic::LIST attr_accessor :enable attr_reader :size #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize clear end #-------------------------------------------------------------------------- # ● クリア #-------------------------------------------------------------------------- def clear @size = LIST.size @data = {} @enable = ExMusic::ENABLE end #-------------------------------------------------------------------------- # ● 参照 #-------------------------------------------------------------------------- def [](id) return nil if LIST[id].nil? and @data[id].nil? @data[id] = Game_ExMusic.new(LIST[id]) if @data[id].nil? @data[id] end #-------------------------------------------------------------------------- # ● 表示許可/禁止 #-------------------------------------------------------------------------- def []=(id, val) return nil if LIST[id].nil? and @data[id].nil? if val @data[id] = Game_ExMusic.new(LIST[id]) if @data[id].nil? @data[id].enable = val else @data.delete(id) unless @data[id].nil? end end #-------------------------------------------------------------------------- # ● リスト #-------------------------------------------------------------------------- def list (@data.keys+LIST.keys).uniq.sort.collect {|id| self.[](id) } end #-------------------------------------------------------------------------- # ● ミュージック追加 #-------------------------------------------------------------------------- def push(id, bgm, enable=true) unless @data[id].nil? @data[id] = Game_ExMusic.new(bgm, enable) @size += 1 if LIST[id].nil? end end end #============================================================================== # ■ Window_ExMusic #============================================================================== class Window_ExMusic < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(y) make_list super(0, y, 180, window_height(h=Graphics.height-y)) activate.select(0) refresh end #-------------------------------------------------------------------------- # ● Window高さ #-------------------------------------------------------------------------- def window_height(h=Graphics.height) l = fitting_height(item_max) l < h ? l : h end #-------------------------------------------------------------------------- # ● 項目数の取得 #-------------------------------------------------------------------------- def item_max @list.size end #-------------------------------------------------------------------------- # ● リスト生成 #-------------------------------------------------------------------------- def make_list if ExMusic::NOT_SHOW @list = $game_exmusic.list.select {|d| d.enable} else @list = $game_exmusic.list end end #-------------------------------------------------------------------------- # ● 選択中アイテム #-------------------------------------------------------------------------- def item(i) @list[i] end def citem; item(@index); end #-------------------------------------------------------------------------- # ● 選択項目の有効状態を取得 #-------------------------------------------------------------------------- def current_item_enabled? !citem.nil? and citem.enable end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect_for_text(index) draw_text_ex(rect.x, rect.y, @list[index].name) end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help text = ((!citem.nil? and citem.enable) ? citem.text : "") @help_window.set_text(text) end end #============================================================================== # ■ Scene_ExMusic #============================================================================== class Scene_ExMusic < Scene_MenuBase #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start @saved_bgm = RPG::BGM.last super line = ExMusic::HELP_LINES @help_window = Window_Help.new(line == 0 ? 1 : line) @help_window.hide if line == 0 create_list_window end #-------------------------------------------------------------------------- # ● リストウィンドウ生成 #-------------------------------------------------------------------------- def create_list_window y = @help_window.visible ? @help_window.height : 0 @list_window = Window_ExMusic.new(y) @list_window.set_handler(:ok, method(:on_ok)) @list_window.set_handler(:cancel, method(:return_scene)) @list_window.help_window = @help_window end #-------------------------------------------------------------------------- # ● リストウィンドウ生成 #-------------------------------------------------------------------------- def on_ok @list_window.citem.bgm.play @list_window.activate end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super @saved_bgm.replay if @saved_bgm end end