聖剣伝説 Visions of Manaのシステム系mod作成を行うにあたって、過去の聖剣伝説3 Trials of Manaの方法が活かせると思っていたが、 だいぶ違っていたため、備忘録として残しておく。
mod作成の流れについては、discordに記載があるため、リンク先を参照
ツールまとめ
- TOMのようにuasset + uexp形式ではなく、uassetのみとなっている
- FModelを用いて、pakファイルからuassetを抽出する
- uassetのバイナリを編集(HxD等のツールを利用)
- UnrealUnZenを用いて、リパック
- フォルダ構成は下記のようにすると良い
target_mod_folder/VisionsofMana/Content/X21/Data/Map/DT_WorldConfig.uasset
など。- 変更したいuassetファイルの位置によってフォルダを作成する
- UnrealUnZenでは、Load TOCでVisions of Manaのpakchunk0-WindowsNoEditor.pakを選択(間違って上書きしないように別フォルダにコピーしておくのも良い)
- Repack Filesで、
target_mod_folder/VisionsofMana/Content/X21/Data/Map
のうち、target_mod_folder
を選択し、your_mod_name_999_P.utocといったファイル名で保存する
- フォルダ構成は下記のようにすると良い
DataTableのバイナリ構造
- 【前提】
- namesキーとインデックスの関係を把握している必要がある
利用するファイル
- VisionsofMana/Content/X21/Data/Map/DT_WorldConfig.uasset
- 及び上記をFModelでJSONに出力したファイル
バイナリエディタで、DT_WorldConfig.uassetを開き、以下の16進数で検索するとヒットする
16進数(検索用)
71 00 00 00 00 00 00 00 0E 00 00 00 00 00 00 00 74 00 00 00 00 00 00 00 32 00 00 00 00 00 00 00 00 0E 00 00 00 40 00 00 00 00 00 00 00 69 00 00 00 00 00 00 00 5A 00 00 00 00 00 00 00 6A 00 00 00 00 00 00 00 41 00 00 00 00 00 00 00 5B 00 00 00 00 00 00 00 42 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 43 00 00 00 00 00 00 00 5C 00 00 00 00 00 00 00 44 00 00 00 00 00 00 00 6C 00 00 00 00 00 00 00 3F 00 00 00 00 00 00 00 45 00 00 00 00 00 00 00
- JSONファイルについては、下記の箇所が該当する
・DT_WorldConfig.uassetのDataTableに関して、以下のようなバイナリ構造となっている。
index(10進数) | names | HEX値 | その他 | |
---|---|---|---|---|
[1] | 113 | WarpVolumeIDList | 71 00 00 00 00 00 00 00 | 配列に格納するIDリストの始まりを表す |
[2] | 14 | ArrayProperty | 0E 00 00 00 00 00 00 00 | 配列であることを表す |
[3] | 116 | - | 74 00 00 00 00 00 00 00 | 配列の要素数バイト(4バイト) + 配列全体のバイト数(112) |
[4] | 50 | NameProperty | 32 00 00 00 00 00 00 00 00 | |
[5] | 14 | - | 0E 00 00 00 | 配列要素数(14個) |
[6] | 64 | WARP_0003_MENU_01 | 40 00 00 00 00 00 00 00 | |
[7] | 105 | WARP_0500_MENU_01 | 69 00 00 00 00 00 00 00 | |
[8] | 90 | WARP_0030_MENU_01 | 5A 00 00 00 00 00 00 00 | |
[9] | 106 | WARP_0502_MENU_01 | 6A 00 00 00 00 00 00 00 | |
[10] | 65 | WARP_0004_MENU_01 | 41 00 00 00 00 00 00 00 | |
[11] | 91 | WARP_0031_MENU_01 | 5B 00 00 00 00 00 00 00 | |
[12] | 66 | WARP_0005_MENU_01 | 42 00 00 00 00 00 00 00 | |
[13] | 107 | WARP_0503_MENU_01 | 6B 00 00 00 00 00 00 00 | |
[14] | 67 | WARP_0006_MENU_01 | 43 00 00 00 00 00 00 00 | |
[15] | 92 | WARP_0032_MENU_01 | 5C 00 00 00 00 00 00 00 | |
[16] | 68 | WARP_0007_MENU_01 | 44 00 00 00 00 00 00 00 | |
[17] | 108 | WARP_0504_MENU_01 | 6C 00 00 00 00 00 00 00 | |
[18] | 63 | WARP_0002_MENU_01 | 3F 00 00 00 00 00 00 00 | |
[19] | 69 | WARP_0008_MENU_01 | 45 00 00 00 00 00 00 00 |
・namesは大幅に省略するが、以下のとおりとする
index | names |
---|---|
54 | RowStruct |
~ | |
62 | WARP_0001_MENU_01 |
63 | WARP_0002_MENU_01 |
64 | WARP_0003_MENU_01 |
65 | WARP_0004_MENU_01 |
66 | WARP_0005_MENU_01 |
67 | WARP_0006_MENU_01 |
DataTableへの配列要素追加方法
・仮に、62 WARP_0001_MENU_01 を配列の要素として追加したい場合、以下のように変更する
・[3] 配列全体のバイト数に、今回追加した8バイト分を加算する・・・116+8(0x7C)
・[5] 配列の要素数に、1加算する・・・14+1(0x0F)
・RowStruct全体のデータサイズを表すアドレスの値に8バイト分を加算する
・DT_WorldConfig.uassetの場合、0xD60付近に存在する (namesの後に続く、何等かのデータの終端に存在している)
・9E 18 00 00 00 00 00 00 (6302)・・・6302 + 8 = 6310
→この値は、RowStruct(※)から末尾までのデータサイズと一致している必要がある。
0x189E = リトルエンディアンで、9E 18 00 00 00 00 00 00
※36 00 00 00 00 00 00 00 = 0x36 = 54 = RowStruct
index(10進数) | names | HEX値 | その他 | |
---|---|---|---|---|
[1] | 113 | WarpVolumeIDList | 71 00 00 00 00 00 00 00 | 配列に格納するIDリストの始まりを表す |
[2] | 14 | ArrayProperty | 0E 00 00 00 00 00 00 00 | 配列であることを表す |
[3] | 124 | - | 7C 00 00 00 00 00 00 00 | 配列の要素数バイト(4バイト) + 配列全体のバイト数(120) |
[4] | 50 | NameProperty | 32 00 00 00 00 00 00 00 00 | |
[5] | 15 | - | 0F 00 00 00 | 配列要素数(15個) |
[6] | 64 | WARP_0003_MENU_01 | 40 00 00 00 00 00 00 00 | |
[7] | 105 | WARP_0500_MENU_01 | 69 00 00 00 00 00 00 00 | |
[8] | 90 | WARP_0030_MENU_01 | 5A 00 00 00 00 00 00 00 | |
[9] | 106 | WARP_0502_MENU_01 | 6A 00 00 00 00 00 00 00 | |
[10] | 65 | WARP_0004_MENU_01 | 41 00 00 00 00 00 00 00 | |
[11] | 91 | WARP_0031_MENU_01 | 5B 00 00 00 00 00 00 00 | |
[12] | 66 | WARP_0005_MENU_01 | 42 00 00 00 00 00 00 00 | |
[13] | 107 | WARP_0503_MENU_01 | 6B 00 00 00 00 00 00 00 | |
[14] | 67 | WARP_0006_MENU_01 | 43 00 00 00 00 00 00 00 | |
[15] | 92 | WARP_0032_MENU_01 | 5C 00 00 00 00 00 00 00 | |
[16] | 68 | WARP_0007_MENU_01 | 44 00 00 00 00 00 00 00 | |
[17] | 108 | WARP_0504_MENU_01 | 6C 00 00 00 00 00 00 00 | |
[18] | 63 | WARP_0002_MENU_01 | 3F 00 00 00 00 00 00 00 | |
[19] | 69 | WARP_0008_MENU_01 | 45 00 00 00 00 00 00 00 | |
[20] | 62 | WARP_0001_MENU_01 | 3E 00 00 00 00 00 00 00 |
この手順で作成したmod
- 竜脈のファストトラベルで、大陸間移動を可能にする Allow intercontinental travel with fast travel at Visions of Mana Nexus - Mods and community