#=========================================================================== # ◆ A1 Scripts ◆ # タイルグラフィック毎の通行設定(RGSS3) # # バージョン : 1.00 (2011/12/17) # 作者 : A1 # URL     : http://a1tktk.web.fc2.com/ #--------------------------------------------------------------------------- # 機能: # ・ファイル毎に通行設定を取得します #--------------------------------------------------------------------------- # 更新履歴   :2011/12/17 Ver1.00 リリース #--------------------------------------------------------------------------- # 設置場所 #  RGSS3用A1共通スクリプトより下 # # 必要スクリプト # RGSS3用A1共通処理 #--------------------------------------------------------------------------- # 使い方 # 設定項目に記述 # # 設定項目の START_SAVE を true にしてゲームスタートすると # Data/passages ディレクトリにタイルファイル毎の通行設定が書き出されます # # 設定項目を書き出した後「データベース」「タイルセット」で # 「グラフィック」を変更 # # 設定項目の START_LOAD を true にしてゲームスタートすると # Data/passages ディレクトリに書き出した通行設定をデータベースに反映します # # データベースに反映したらプロジェクトのセーブをせずにプロジェクトを閉じて # 再起動させると、設定したグラフィックに合わせた通行設定が反映されています # # ※ゲームプレイにはこのスクリプト及び # Data/passages ディレクトリ内のファイルは必要ありませんので # 配布時には消去しても問題ありません # # タイルセットを変更し、データベースに反映したい時以外は # START_SAVE START_LOAD ともに false 設定にすることをお勧めします #--------------------------------------------------------------------------- # 注意事項 # ファイルに書き出す通行設定は、一番最初に現れた通行設定です # 通行設定を変更する場合タイルセットIDの一番若い番号のタイルセットを変更してください #--------------------------------------------------------------------------- # 免責 # このツールを使用したことにより何らかの損害が生じても、当方は一切責任を負いません # 自己責任でご利用ください # # 念のため、使用前には必ずバックアップを取っておいてください。 #============================================================================== $imported ||= {} $imported["A1_FilePassages"] = true if $imported["A1_Common_Script"] #============================================================================== # ■ 設定項目 #============================================================================== module A1_System::PassagesConfig #-------------------------------------------------------------------------- # ゲームスタート時にPassagesファイルを書き出す #-------------------------------------------------------------------------- START_SAVE = false #-------------------------------------------------------------------------- # ゲームスタート時にPassagesファイルをデータベースに反映する #-------------------------------------------------------------------------- START_LOAD = false end #============================================================================== # ■ DataManager #------------------------------------------------------------------------------ #  データベースとゲームオブジェクトを管理するモジュールです。ゲームで使用する # ほぼ全てのグローバル変数はこのモジュールで初期化されます。 #============================================================================== module DataManager #-------------------------------------------------------------------------- # ○ エイリアス用特異メソッド #-------------------------------------------------------------------------- class << self alias :a1_file_passages_create_game_objects :create_game_objects end #-------------------------------------------------------------------------- # ☆ 通常のデータベースをロード #-------------------------------------------------------------------------- def self.create_game_objects a1_file_passages_create_game_objects $a1_passages = A1_System::Passages.new if A1_System::PassagesConfig::START_SAVE or A1_System::PassagesConfig::START_LOAD $a1_passages.save_passages if A1_System::PassagesConfig::START_SAVE $a1_passages.load_passages if A1_System::PassagesConfig::START_LOAD end end #============================================================================== # ■ A1_System::Passages #============================================================================== class A1_System::Passages #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize @passages = {} end #-------------------------------------------------------------------------- # ○ 通行設定の保存 #-------------------------------------------------------------------------- def save_passages $a1_common.make_directory("Data/passages/") $data_tilesets.each {|tileset| read_file_passages(tileset) } msgbox("通行設定の書き出し完了") end #-------------------------------------------------------------------------- # ○ 通行設定の反映 #-------------------------------------------------------------------------- def load_passages load_passages_files if @passages.empty? msgbox("Passagesファイルがありません") return end $data_tilesets.each {|tileset| load_passages_database(tileset) } write_file($data_tilesets, "Data/Tilesets.rvdata2") msgbox("データベースへの反映完了") end #-------------------------------------------------------------------------- # ○ passagesファイルの読み込み #-------------------------------------------------------------------------- def load_passages_files Dir::glob("Data/passages/Passages*.*").each {|f| key = File.basename(f, ".*").gsub("Passages","") @passages[key] = load_file(f) } end #-------------------------------------------------------------------------- # ○ ファイルごとの通行設定のロード #-------------------------------------------------------------------------- def load_passages_database(tilest) return if tilest == nil for i in 0...tilest.tileset_names.size load_flgs(i, tilest, @passages[tilest.tileset_names[i]]) end end #-------------------------------------------------------------------------- # ○ フラグのロード #-------------------------------------------------------------------------- def load_flgs(index, tilest, passages) info = flg_index(index) start_id = info[0] end_id = info[1] (start_id..end_id).each {|i| tilest.flags[i] = passages[i - start_id] } end #-------------------------------------------------------------------------- # ○ ファイルごとの読み込み #-------------------------------------------------------------------------- def read_file_passages(tilest) return if tilest == nil for i in 0...tilest.tileset_names.size next if @passages[tilest.tileset_names[i]] != nil @passages[tilest.tileset_names[i]] = read_flgs(i, tilest) write_file(@passages[tilest.tileset_names[i]], sprintf("Data/passages/Passages%s.rvdata2", tilest.tileset_names[i])) end end #-------------------------------------------------------------------------- # ○ フラグの読み込み #-------------------------------------------------------------------------- def read_flgs(index, tilest) info = flg_index(index) start_id = info[0] end_id = info[1] flags = Table.new(end_id - start_id + 1) (start_id..end_id).each {|i| flags[i - start_id] = tilest.flags[i] } return flags end #-------------------------------------------------------------------------- # ○ フラグIndexの取得 #-------------------------------------------------------------------------- def flg_index(index) case index when 0; start_id = 2048; end_id = 2815 when 1; start_id = 2816; end_id = 4351 when 2; start_id = 4352; end_id = 5887 when 3; start_id = 5888; end_id = 8191 when 4; start_id = 1536; end_id = 1663 when 5; start_id = 0; end_id = 255 when 6; start_id = 256; end_id = 511 when 7; start_id = 512; end_id = 767 when 8; start_id = 768; end_id = 1023 end return [start_id, end_id] end #-------------------------------------------------------------------------- # ○ ファイルを読む #-------------------------------------------------------------------------- def load_file(file_name) source = File.open(file_name, "rb") @data = Marshal.load( source, ->(obj) { $a1_common.encoding_string(obj)} ) source.close return @data end #-------------------------------------------------------------------------- # ○ ファイルを書く #-------------------------------------------------------------------------- def write_file(data, file_name) File.open(file_name, "wb") { |f| Marshal.dump(data, f) } end end end