【やりたいこと】
ゲーム内容の一部の外部ファイル化(MOD対応)
理想の動作としては、
ゲームの既存ファイルを上書きしない形で、
専用フォルダにファイルを任意で投下/削除することで、
ゲーム内容を追加/削除する、というものです。
【追加コンテンツの内容想定】
・(*1)マップデータ(&マップイベント)
・(*2)タイルセット
・(*3)コモンイベント
※データベース関連は、データ数を増やすことはあってもデータタイプを拡張しない
あるいは文字列で万能DBを設定できる
特に高負荷となりえるマップ描画は、ウディタ標準機能を活用したいです。
追加コンテンツを実装する場合に、
最低限の独自システムで、どこまで外部化できるか
現在versionでの技術限界を教えていただけると助かります。
【詳細】
※追記0907
※誤情報修正:タイルセットは、ゲームの起動タイミングに読み込まれるため、ファイルが実在する必要あり
※
(*1)マップデータと(*2)タイルセットについては、
該当マップに移動するタイミングで必要ファイルが読み込まれるため、逆を言えば、初期設定したファイル名が実在しなくても、ゲーム起動中にエラーは発生しない。
規則性のある名前を設定しておき、追加コンテンツ側のリソース名をそれに合わせることで、任意の追加/削除が可能になる。
ただし、リソース名を固定する都合で、ファイル不在エラーの回避のために、マップ上で使用しないタイル番号にもそれ専用の画像を用意する必要がある。
加えて、追加コンテンツのファイルを削除した場合でも、ロード時点で追加マップにいなければエラーは生じないことから、セーブ時には専用マップに一旦移動して、マップ番号&座標を保存し、ロード時には改めて追加コンテンツの有無を取得して、存在しないマップへの移動回避を行うことになる。
あとは、追加コンテンツで使用するマップ番号を本体側に認識させる用のテキストファイルを同封すれば、追加マップへの誘導が可能。
※追記0907
※誤情報修正:タイルセットは、ゲームの起動タイミングに読み込まれるため、ファイルが実在する必要あり
※
[Data] バニラ環境は、Data.wolf暗号化して追加コンテンツを空Dataに投下
├[MapData]-(*マップ番号).mps
├[MapChip]-[*タイルセット番号].wolf(タイル画像)
└[ModInfo]-[*任意].wolf(マップ番号を記したテキスト、チップ通行設定など)
マップ番号とタイルセット番号が不一致のため、一つの暗号化ファイルにまとめることはできず、チップ設定(通行など)は、マップへ侵入する度に「チップ処理」コマンドでバニラ設定から上書き更新する必要がある。
※マップ、タイルセット番号の重複には対応できない。
(*3)コモンイベントについては単体ファイルに保存されるため、後から追加はできない。
テキスト→コマンドの変換実行コモンを本体に組み込むしかなさそう。
※現在versionでは外部.Commonを指定実行する機能が削除されている
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
標準のマップ描画システムを借りない場合は、文字列ピクチャを利用して、
アニメーションパターン数 * レイヤー数 個のピクチャ番号だけでマップを表現できますが、カウンター属性をピクチャ番号で表現するなら、マップイベントのグラフィックをピクチャリンクに置換する必要がありそう。
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
ウディタ環境でできないこと
・マップデータやタイルセット画像の参照パスの動的変更
・コモンイベントの動的追加
……くらいの理解度なのですが、
本体ファイルの上書きなし、ウディタのマップ処理システムを利用する場合、
かつ、ユーザー側の手間を最小限にする方法は、どのようなものになりますか?
ここまでするなら、DXライブラリ/C++で構築しろとも思うのですが、
JRPGに限れば、制作コストの見積もりで、ウディタを手放すのが惜しいです