#============================================================================== # ■ RGSS3 新マップ数上限突破 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # VXAceのマップ上限999を超えたプロジェクトの作成が可能になります。 # ただし、プロジェクト上で表示可能なマップは1〜999までとなる為 # 別のプロジェクトを使用し1001を超えるマップIDのデータを作成する必要があります。 # なお、動作の仕様上ID1000やID2000等、1000の倍数のマップIDは作成できません。 # 1001〜1999、2001〜2999といったルールになります。 #============================================================================== # 要注意事項 #------------------------------------------------------------------------------ # 導入後にゲームを公開し、マップID1000以上のマップでセーブした後 # バージョンアップでこのスクリプトの導入を止めた場合等は # そのセーブデータが使用できなくなるという問題がどうしても発生します。 # また、通常の製作上あまり行わないPC上でのファイル操作が必要になりますので # 謝って必要なデータを上書きしたり消したりしないように注意して下さい。 # # このスクリプトの使用は本当に最後の手段であり # どうしてもマップ数が999では足りないという場合にのみ使用して下さい。 # 本スクリプトの利用でプロジェクトファイルが破損した場合でも # 当方は責任を負いかねますので、あらかじめご了承ください。 #============================================================================== # 作業手順 #------------------------------------------------------------------------------ # 1.!!!事故防止を兼ねてバックアップを取って下さい!!! # # 2.製作のメインとなる1〜999までのマップデータのあるプロジェクトファイルの # Dataフォルダ内にOverThousand1というフォルダを作成します。 # このフォルダは必要に応じてOverThousand2以降も作成して下さい。 # # 3.バックアップを取っておいたプロジェクトデータを複製し # マップデータのみ全てエディタ上で消去するか # 新規プロジェクトにDataフォルダ内の必要なデータをコピーする等して # マップ関係以外がメインのプロジェクトと同じ環境を用意して下さい。 # これでサブプロジェクトの出来あがりです。 # # 4.ID1001以上のマップデータをサブプロジェクトファイルで製作して # プロジェクトファイルを一旦保存して下さい。 # その後、そのプロジェクトファイルのDataフォルダから # MapXXX.rvdata2(XXX部分は001〜999の数字)のファイルと # MapInfos.rvdata2をコピーし # メインのプロジェクトファイルのDataフォルダ内に先程用意した # OverThousand1フォルダの中にコピーします。 # # これで、OverThousand1のフォルダ内のマップは全てID+1000のマップとして扱われ # OverThousand1のMapInfoデータに関してもそのようになります。 # 2001以上のマップデータに関しても必要な場合は同じように製作し # MapInfoデータと共に、今度はOverThousand2フォルダにコピーして下さい。 #============================================================================== module OverThousandMap #1001マップ以上を格納するフォルダ用のフォーマットを指定。 Format = "OverThousand%s" #1001マップ以上のマップを保存するフォルダをいくつ用意するかを指定。 #1フォルダに対し999マップまでと、対応するMapInfoの、最大1000ファイルを格納。 #例えば2000未満(1999まで)で済むなら1、3000未満(2999まで)で済むなら2、など。 FFC = 1 #移動先のマップIDに対して1000倍の加算を行う変数IDを指定。 #例.変数IDの値が1でなおかつ移動先のマップIDが20の場合 # 移動先のマップIDはDataフォルダ内のOverThousand1フォルダ内の # Map020.rvdata2が読み込まれる。 # MapInfoも同じくDataフォルダ内のOverThousand1フォルダ内の # MapInfos[20]を読み込む。 VID = 50 end class << DataManager #-------------------------------------------------------------------------- # 通常のデータベースをロード #-------------------------------------------------------------------------- alias load_normal_database_over_thousand_map load_normal_database def load_normal_database load_normal_database_over_thousand_map if OverThousandMap::FFC > 0 OverThousandMap::FFC.times {|n| c = n + 1 mi = load_data("Data/" + sprintf(OverThousandMap::Format,c) + "/MapInfos.rvdata2") mi.each_with_index {|f,i| $data_mapinfos[i + 1000 * c] = f}} end end end class Game_Map #-------------------------------------------------------------------------- # セットアップ #-------------------------------------------------------------------------- alias setup_over_thousand_map setup def setup(map_id) new_map_id = (map_id < 1000 && $game_variables && ($game_variables[OverThousandMap::VID] > 0)) ? ((map_id % 1000) + $game_variables[OverThousandMap::VID] * 1000) : map_id setup_over_thousand_map(new_map_id) end end class Game_Player #-------------------------------------------------------------------------- # 場所移動の予約 #-------------------------------------------------------------------------- alias reserve_transfer_over_thousand_map reserve_transfer def reserve_transfer(map_id, x, y, d = 2) new_map_id = (map_id < 1000 && $game_variables && ($game_variables[OverThousandMap::VID] > 0)) ? ((map_id % 1000) + $game_variables[OverThousandMap::VID] * 1000) : map_id reserve_transfer_over_thousand_map(new_map_id, x, y, d) end end #-------------------------------------------------------------------------- # データのロード #-------------------------------------------------------------------------- alias :load_data_over_thousand_map :load_data unless $! def load_data(filename) flag = false if /#{"Data/Map"}(\d+)#{".rvdata2"}/ =~ filename map_id = $1.to_i if map_id > 1000 flag = true true_filename = sprintf("Data/OverThousand%s/Map%03d.rvdata2",map_id / 1000,map_id % 1000) end end true_filename = filename unless flag load_data_over_thousand_map(true_filename) end