PC ゲーム旧版 DEAD SPACE シリーズ(2008~2013)日本語化ファイル解析情報
PC ゲーム DEAD SPACE シリーズ(2008~2013)の日本語化ファイルについて解析したので、その解析内容をまとめました。
PC ゲーム旧版 DEAD SPACE シリーズ(2008~2013)日本語化ファイル基本情報と解析データについて
PC ゲーム DEAD SPACE シリーズ(2008~2013)の日本語化ファイルは、初期は中文化ファイルの実行ファイル(exe)改変と外部 DLL・テキスト・フォントを使った ali213 版が主流でした。
2013年に Dead Space 日本語化作業所スレで DEAD SPACE 3 でオリジナルのフォント・テキストデータを書き換えてリパックする 3DM 版を使った日本語化方法が実現(参考情報:ali213 版と 3DM 版の違い)した方が現れて、集まった有志の人たちで調整と修正を繰り返しながら 2022年3月時点では 3DM 版が 2015年に最終バージョンとして公開されています。
また、過去作(初代と 2)にも同じ方法で日本語化できるということがわかり、その後に初代と 2 にも同じリパック版日本語化ファイルが作成・公開された流れとなっています。(初代のみ中文化 exe 実行ファイルが必要)
日本語化ファイルは Dead Space 関連日本語化(リパック版)アップローダ からダウンロードできますが、オリジナルのアーカイブファイル(~.viv、~.dat)やパック済みファイル(~.str)に直接パッチを適用するため、どのファイルにどのようにして日本語化しているかがわかりません。
また、ゲーム開発が終了しているので可能性は低いですが、万が一ゲーム側のアップデートによりアーカイブファイルに変更があった場合、日本語化パッチが適用できなくなる恐れがあります。
幸い Dead Space 関連日本語化(リパック版)アップローダ には日本語化に必要な一部のツールが公開されています。これらのツールを使って日本語化されたアーカイブおよびパック済みファイルをアンパック → 日本語化ファイル抽出 → オリジナルファイルに日本語化ファイルをリパックする手順をまとめました。
さらに、どのようにして日本語化ファイルが作成されたのか、過去ログから日本語化に関する投稿された内容を調べ上げて、日本語化に必要なフォーマット情報およびデータ作成方法についても可能な限りまとめてみました。
今回の調査・記事内容では情報不足・私の力不足によりわからなかった・実現できなかったことがあります。フォントの一部フォーマット情報とフォント作成方法です。フォントに関するデータ解析はほぼ終わっていますが、一部フォーマットが不明なことと、実際にフォントを作ってゲームで表示・動作するかどうかの試行錯誤が続くことになりそうだったので、諦めることにしています。
ちなみに参考サイトの情報によれば DEAD SPACE のゲームエンジンは、同スタジオが手がけた「The Godfather」で開発されたゲームエンジンを改造したものを採用しているということです。
PC ゲーム DEAD SPACE 3(2013)日本語化ファイル解析メモとアンパック・解析データ公開
PC ゲーム DEAD SPACE 3(2013)日本語化ファイルの解析内容とアンパック・解析データ PC ゲーム DEAD SPACE 3(2013)日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイル を公開します。
このセクションでの解説は同じ日本語化ファイルを使った DEAD SPACE 2 および 初代 DEAD SPACE にも共通する内容にもなっています。ただし、EAD SPACE 3 DLC の Awakened では lh2 ファイル(言語データ)のフォーマット情報が異なる点があることに注意してください。
解析ファイル内容については以下のリストにまとめました。解析データやデータ作成方法などは以降の各セクションで説明します。
- DS3_ENJP_parse.7z に格納されている English、DS3JP1080.exe、DS3JP1440.exe、DS3JP2160.exe 各フォルダについて
- 各フォルダに日本語化パッチ適用前(English フォルダはオリジナル)・適用後(解像度別に DS3JP1080.exe、DS3JP1440.exe、DS3JP2160.exe フォルダに分類)のデータ抽出と解析データを格納(一部を除き、言語別・解像度別の重複データは除外)
- 日本語化パッチ DS3JP720.exe と DS3JP720br.exe は今回解析対象外
- bigfile フォルダについて
- bigfile4.viv に含まれるフォントファイル(text_assets_global.str)と言語ファイル(英語・日本語化は cbdf7f70.str、ロシア語・日本語化は ae36703c.str)(いずれも差分ファイルのみ)
- オリジナル viv アンパック → 日本語化 str ファイル差し替え → viv リパックで日本語化可能
- 関連項目
- DDSHeader フォルダについて
- Noesis でエクスポートした dds ファイルから dds ヘッダー(先頭アドレスから 128 バイトまで)をコピーして作成したバイナリファイル(拡張子なし)
- 関連項目
- ds3strings フォルダについて
- ds3strings を使って lh2 言語ファイルから csv ファイルにアンパック
- 日本語化した lh2 ファイルは共通のため、DS3JP1080.exe フォルダのみ格納(DS3JP1440.exe と DS3JP2160.exe フォルダにはなし)
- 関連項目
- FavBinEdit フォルダについて
- dds(Noesis でエクスポートしたフォントテクスチャ)・inf(文字コード+座標 → この記事では便宜上グリフデータと定義)・lh2(ID、オフセット、テキストデータ)・tg4h(テクスチャヘッダー)各ファイルのフォーマットをバイナリエディタ FavBinEdit で解析したウォッチデータ(~.FavBinEdit-W)を格納
- 関連項目
- GlyphData フォルダについて
- inf ファイルのグリフデータ(バイナリ)の一部(座標)を 秀丸エディタ の置換機能を使ってカンマ区切りのテキストデータ作成
- Excel ファイルでカンマ区切りのグリフテキストデータをインポート、座標データ 16進数 → 10進数に変換
- 関連項目
- noesisv446 フォルダについて
- Noesis と tex_DeadSpace123_PC_PS3_X360_tg4h.py(要ログイン)を使って、フォントファイル tg4h と tg4d から dds と png 形式ビットマップフォントファイルをエクスポート
- エクスポートした dds ファイルの実態は dds ヘッダー(128バイト)+ tg4d ファイルのファイル結合
- 関連項目
- str_unpack フォルダについて
- text_assets_global.str、cbdf7f70.str、ae36703c.str をアンパックしたファイルを格納
- ae36703c.str ファイルはロシア語ファイルのはずだか、なぜか cbdf7f70.str 英語ファイルと一緒に日本語化されている
- text_assets_global_unpacked フォルダ(inf・tg4d・tg4h フォントファイル)と cbdf7f70_unpacked・ae36703c_unpacked フォルダ(lh2 字幕ファイル)
- 日本語化ファイルについてはオリジナル(English フォルダ)と差分があるファイルのみ抽出、重複ファイルは除外
- 日本語化した lh2 言語ファイルは解像度 Full HD(1080p)以上は共通ファイル(同じテキストデータ)
- オリジナル
English\text_assets_global_unpacked
フォルダにある各 FFN(inf グリフデータ)・tg4d(テクスチャデータ)・tg4h(テクスチャヘッダー)フォルダにはすべてのファイルを格納、アンパックした日本語化ファイルではオリジナルと重複しているファイルは除外 - オリジナル viv アンパック → オリジナル str アンパック → 日本語化 lh2・inf・tg4d・tg4h ファイル差し替え → str リパック → viv リパックで日本語化可能
- 関連項目
- copy_b-DDSHeader-tg4d-Output-DDS-Image.bat ファイルについて
- DDSHeader フォルダの dds ヘッダーファイルと str_unpack フォルダの tg4d ファイルを、
copy /b
コマンドでファイル結合して dds ファイルを作成するバッチファイル - バッチファイル実行後、temp フォルダが作成されて dds ファイルを生成
- DDSHeader フォルダの dds ヘッダーファイルと str_unpack フォルダの tg4d ファイルを、
DS3 アンパック・リパックキットセットアップ方法
Dead Space 関連日本語化(リパック版)アップローダ にアンパック・リパックキットがあるのでダウンロードしてセットアップをします。
Dead Space 関連日本語化(リパック版)アップローダ から ds3jp_repack_kit_ver.0.5.zip
と ds3strings_v1_3_0.zip
をダウンロードして展開・解凍します。
次に展開・解凍した ds3strings_v1_3_0 フォルダにあるファイル・フォルダすべてコピーします。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダに、ds3strings_v1_3_0 フォルダにあったファイル・フォルダを配置して設定完了です。
ツール内にあらかじめ用意されているバッチファイルを使うことでアンパック・リパック作業をほぼ自動化できますが、動作するためには上記のように必要なファイルを配置する必要があります。ただ、この後各セクションで説明するアンパック・リパックツールの exe ファイルを直接使う方法では、このセットアップ作業は必要ありません。
~.viv ファイルアンパック方法 1 - init_repack.bat 実行
DS3 アンパック・リパックキットセットアップ 後、ds3jp_repack_kit_ver.0.5 フォルダにある init_repack.bat ファイルに bigfile4.viv ファイルをドラッグ&ドロップしてアンパックします。
ちなみに ds3jp_repack_kit_ver.0.5 フォルダにある readme.txt には、■ 利用準備に「2) 日本語フォントファイル text_assets_global.str を jpn_src フォルダへコピーする。」とありますが、viv ファイルをアンパックする時点ではまだ使わないので、str ファイルを配置しなくても viv ファイルをアンパックできます。
init_repack.bat ファイルに bigfile4.viv ファイルをドラッグ&ドロップ後、コマンドプロンプト画面が表示されてアンパック処理開始~完了です。
init_repack.bat バッチファイルによる viv ファイルアンパック処理完了後、ds3jp_repack_kit_ver.0.5 フォルダ内にある各フォルダに展開されたファイル・フォルダです。各画像のファイル・フォルダの内容は以下の通りです。
ds3jp_repack_kit_ver.0.5\unpack\bigfile
フォルダにはアンパックした viv ファイルが展開されています。
backup フォルダには ds3jp_repack_kit_ver.0.5\unpack\bigfile
フォルダから cbdf7f70.str(lh2 言語ファイル)と text_assets_global.str ファイル(フォント)がコピーされています。
ds3jp_repack_kit_ver.0.5\temp
フォルダには cbdf7f70.str がアンパックされて CBDF7F70_unpacked フォルダが展開されています。
~.viv ファイルアンパック方法 2 - bigviewer.bat or Gibbed.Visceral.BigViewer.exe 実行
DS3 アンパック・リパックキットセットアップ なしで viv ファイルをアンパックする方法です。ここでは ds3jp_repack_kit_ver.0.5.zip
に含まれる Gibbed's Visceral Big Viewer を使用します。
ds3jp_repack_kit_ver.0.5 フォルダにある bigviewer.bat を実行するか、ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.BigViewer.exe を実行します。
Gibbed's Visceral Big Viewer 画面で左上にあるドロップダウンリストで Dead Space 3 を選択します。Open ボタンをクリックしてアンパック対象の bigfile4.viv ファイルを開きます。
bigfile4.viv を開くと画像のようにツリーリストが表示されます。
bigfile4.viv ファイルの場合、ツリーリストに Unknown がない状態かつ Known 以下にアンパック後のフォルダが表示されていることを確認して、Save All ボタンをクリックして任意の場所にアンパックできます。
必要なファイルだけをアンパックしたい場合はツリーリストで任意のフォルダ・ファイルを選択、右クリックから Save を選択することで任意の場所にアンパックできます。
ただ、一部の(階層が深いところにある)ファイルをアンパックしようとするとツールが落ちることがあります。一応、上の画像のように上位階層にあるフォルダ・ファイルを選択して保存するようにすれば落ちないようです。
~.viv ファイルアンパック方法 3 - Gibbed.Visceral.BigUnpack.exe+bat 実行
DS3 アンパック・リパックキットセットアップ なしで viv ファイルをアンパックする方法です。ここでは ds3jp_repack_kit_ver.0.5.zip
に含まれる Gibbed.Visceral.BigUnpack.exe と bat ファイルを使用します。
ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダに以下のアンパック用 bat ファイル(ファイル名は任意)の作成とアンパック対象の bigfile4.viv ファイルを配置して、bat ファイルを使って Gibbed.Visceral.BigUnpack.exe を実行します。Gibbed.Visceral.BigUnpack.exe はコマンドプロンプトを使わないとアンパック処理できません。ここでは bat ファイルを使います。
バッチスクリプトの引数には bigfile4.viv を指定しています。別の viv ファイルをアンパックしたい場合は、アンパック対象のファイル名にあわせて書き換えることで、ほかの viv ファイルもアンパックできます。
引数にアンパック先フォルダ(このバッチスクリプトでは bigfile を設定)を指定しないと、ルートドライブにアンパックされるため注意してください。
Gibbed.Visceral.BigUnpack.exe -p="Dead Space 3" bigfile4.viv bigfile
pause
作成したバッチファイル実行後にコマンドプロンプト画面が表示されてアンパック処理開始~完了です。
作成したバッチファイルによる viv ファイルアンパック処理完了後、ds3jp_repack_kit_ver.0.5 フォルダ内に生成された bigfile フォルダ(バッチスクリプトの引数で指定したもの)です。このフォルダにアンパックしたファイルが展開されています。
アンパックした bigfile4.viv ファイル比較(オリジナル版と日本語化ファイル(DS3JP1080.exe))
オリジナル版と日本語化ファイル(DS3JP1080.exe)を適用した bigfile4.viv ファイルをアンパック(アンパック方法 1、アンパック方法 2、アンパック方法 3)した後、WinMerge で比較した結果です。
text_assets フォルダの text_assets_global.str ファイル(ビットマップフォント)と text_assets\text
フォルダの ae36703c.str(オリジナルはロシア語テキスト)と cbdf7f70.str(オリジナルは英語テキスト)ファイルに差分がある形となっています。
DEAD SPACE 3 では英語テキストの cbdf7f70.str ファイルを日本語化していますが、どういうわけかロシア語テキストの ae36703c.str ファイルにもまったく同じ日本語テキストが適用されています。(DEAD SPACE シリーズの日本語化は、英語版を日本語化してプレイできるようにしてある)
ロシア語テキストを日本語化しているのは日本語化作者の人が何らかの意図があって導入したものか、消し忘れのただのミスなのかは不明です。
bigfile4.viv ファイルリパック方法
init_repack.bat でアンパックした bigfile4.viv のファイル・フォルダ をリパックする方法です。
アンパックしたファイルを差し替えたあとには、viv ファイルへのリパック作業が必要になります。
ds3jp_repack_kit_ver.0.5\jpn_src
フォルダに 0000_ds3_global.en.lh2(テキスト)ファイルと text_assets_global.str(ビットマップフォント)ファイルを配置します。
注意点として ds3jp_repack_kit_ver.0.5 フォルダにある readme.txt には、■ リパック手順に「1) 作業所データを CSV としてダウンロードし、jpn_src のフォルダに ds3jp.csv として保存する。jpn_src フォルダに ds3jp.csv がないと pack_all.bat がダウンロードするので、2) から実行でも構いません。jpn_src に ds3jp.csv がある場合はそのまま利用します。」とありますが、作業所閉鎖により ds3jp.csv ファイルはダウンロードできません。
そのため、同 readme.txt の ■ リパック手順に記載されている「※) jpn_src に直接 0000_ds3_global.en.lh2 を配置すると ds3jp.csv -> 0000_ds3_global.en.lh2 の変換処理はスキップされます。」に従い、0000_ds3_global.en.lh2 ファイルを配置する形でリパックする手順となっています。
text_assets_global.str ファイルと 0000_ds3_global.en.lh2 ファイルは以下の方法でアンパックしたファイルから入手できます。
text_assets_global.str ファイルは bigfile4.viv ファイルをアンパック(アンパック方法 1、アンパック方法 2、アンパック方法 3)した text_assets フォルダにあります。
0000_ds3_global.en.lh2 ファイルは、bigfile4.viv ファイルをアンパック(アンパック方法 1、アンパック方法 2、アンパック方法 3)した text_assets\text
フォルダにある、cbdf7f70.str ファイルをアンパック した LH2 フォルダにあります。
text_assets\text
フォルダには cbdf7f70.str 以外の str ファイルがありますが、英語版及び日本語化ファイルでは cbdf7f70.str を使用しているので、ほかの str ファイルはアンパック不要です。
ds3jp_repack_kit_ver.0.5\jpn_src
フォルダに 0000_ds3_global.en.lh2 ファイルと text_assets_global.str ファイルを配置後、ds3jp_repack_kit_ver.0.5 フォルダにある pack_all.bat ファイルを実行します。
pack_all.bat ファイル実行後、同フォルダ内にリパックされた bigfile4.viv ファイルが生成されます。
pack_all.bat 実行時の注意点として、すでに ds3jp_repack_kit_ver.0.5 フォルダに bigfile4.viv ファイルがある状態だと bigfile4.viv.old にリネームしてバックアップしてから bigfile4.viv が生成されますが、なぜかリパック処理に時間がかかるようになります。(bigfile4.viv ファイルがない状態であればリパック処理は早く終わります)
~.viv ファイルリパック方法
上で紹介した bigfile4.viv ファイルリパック方法 ですが、bigfile4.viv ファイル以外にアンパックした viv ファイルは pack_all.bat ファイルでリパックできません。
bigfile4.viv 以外のアンパックした viv ファイルをリパックしたい場合は次のいずれかの方法でリパックします。
ds3jp_repack_kit_ver.0.5 フォルダにある bigpack.bat ファイルに、アンパック対象のフォルダをドラッグ&ドロップします。
コマンドプロンプト画面が表示されてリパック処理完了後、リパック対象フォルダと同じフォルダ内にリパックされた viv ファイルが生成されます。
または ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.BigPack.exe ファイルに、アンパック対象のフォルダをドラッグ&ドロップします。(上記 bigpack.bat で実行したのがこの Gibbed.Visceral.BigPack.exe ファイル)
コマンドプロンプト画面が表示されてリパック処理完了後、リパック対象フォルダと同じフォルダ内にリパックされた viv ファイルが生成されます。
上記どちらかの方法でリパックした場合、viv ファイル名はドラッグ&ドロップした時のフォルダ名のままとなりますので、元の viv ファイル名と違う場合はリネーム(名前変更)で修正します。リパック後の viv ファイルのリネーム作業をしないようにするには、リパックする前にフォルダ名をあらかじめ変更しておくことになります。
cbdf7f70.str(lh2 言語ファイル内包)ファイルアンパック方法
オリジナル版や日本語化ファイル適用した bigfile4.viv ファイルをアンパック(アンパック方法 1、アンパック方法 2、アンパック方法 3)した後、lh2 言語ファイルを内包している cbdf7f70.str ファイルをアンパックする方法です。
DS3 アンパック・リパックキットでアンパック(init_repack.bat) した場合は、ds3jp_repack_kit_ver.0.5 フォルダにある temp\CBDF7F70_unpacked\LH2
フォルダに 0000_ds3_global.en.lh2 ファイルがすでに展開されているので、cbdf7f70.str ファイルのアンパック作業はしなくて済みます。
DS3 アンパック・リパックキットでアンパック(init_repack.bat) した場合、ds3jp_repack_kit_ver.0.5 フォルダにある backup フォルダと unpack\bigfile\text_assets\text
フォルダに cbdf7f70.str ファイルが展開されます。どちらも同じファイルです。
Gibbed's Visceral Big Viewer や Gibbed.Visceral.BigUnpack.exe でアンパックした場合はそれぞれ指定したフォルダにアンパックされるので、その場合は text_assets\text
フォルダに cbdf7f70.str ファイルが格納されています。
ds3jp_repack_kit_ver.0.5 フォルダにある strunpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrUnpack.exe ファイルに str ファイルをドラッグ&ドロップすることでアンパックできます。
~.str ファイルリパック方法
アンパックした ~.str のファイル・フォルダ をリパックする方法です。
ds3jp_repack_kit_ver.0.5 フォルダにある strpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrPack.exe ファイルに、アンパックした ~.str ファイルのフォルダをドラッグ&ドロップすることでリパックできます。
0000_ds3_global.en.lh2 言語ファイルフォーマット解析
0000_ds3_global.en.lh2 ファイルのフォーマットを FavBinEdit のウォッチデータを使って解析しました。
すでに lh2 ←→ csv ファイル アンパック・リパック ツールがあるので、フォーマットを理解しなくてもテキスト編集できるようになっていますが、参考サイトに lh2 フォーマットに情報が残っていたのでついでに整理してまとめてみました。
なお、初代 DEAD SPACE および DEAD SPACE 2 の lh2 ファイルでも同じフォーマットとなっています。DEAD SPACE 3 DLC の Awakened のみフォーマットが違うので注意してください。
画像は日本語化ファイル DS3JP1080.exe で日本語化した 0000_ds3_global.en.lh2 ファイルの FavBinEdit ウォッチデータです。ちなみに解像度別日本語化パッチ DS3JP1440.exe と DS3JP2160.exe でも中身が同じ lh2 ファイルが使われています。
ここでは一部のバイナリデータがどのようにして各種データを格納しているのかの流れを見るため、サンプルとしてウォッチデータの一部に 1~4 の数字を割り当てています。
0000_ds3_global.en.lh2 ファイルでは先頭アドレスから 32バイト(アドレス 0x1F
)までがヘッダーに相当する部分かと思われます。
ウォッチデータ 0000_ds3_global.en.lh2 File Size(Japanese) は lh2 ファイルサイズです。この場合は 627,580 バイトになります。(=lh2 バイナリデータを全選択したときのサイズ)
ウォッチデータ Number of Text Data はテキストデータ数です。csv ファイルにアンパックしたときの 1行が 1 としてカウントされています。この場合は 10,140 なので csv ファイルでは 10,140 行になります。
ウォッチデータ Text ID ~ と ウォッチデータ Remain Text ID(~) は各オフセット・テキストデータにセットで紐づけされていると思われる固有のバイナリデータ(おそらくインデックス相当)になります。そのため、言語関係なくこのバイナリデータは固定となっており、オフセットやテキストデータを変更してもこのバイナリデータの内容が変わることはありません。
Text ID は1つのオフセット・テキストデータに対して 4バイト割り当てられており、これにテキストデータ数 10,140 をかけることで Text ID の総バイト数が求められますし(4バイト x 10,140 = 40,560バイト)、テキストデータ数を計算することができます。(40,560バイト / 4バイト = 10,140 テキストデータ数)
ウォッチデータ Text ID ~ - Offset(Jump to address 0x~) と ウォッチデータ Remain Text ID Offset(~) はテキストデータが格納されているバイナリデータの先頭アドレスを指しています。ウォッチデータ Text ID 1 - Offset(Jump to address 0x13D00) ではアドレス 0x13D00
から 1つ目のテキストデータが格納されていることになります。
Text ID と同様に 1つのオフセットデータに対して 4バイト割り当てられており、これにテキストデータ数 10,140 をかけることでオフセットの総バイト数が求められますし(4バイト x 10,140 = 40,560バイト)、テキストデータ数を計算することができます。(40,560バイト / 4バイト = 10,140 テキストデータ数)
つまり、Text ID とオフセット(Offset)のバイト数は必ず同じサイズということになります。ただし、テキストデータの長さによってオフセットのバイナリデータは可変する点が Text ID と異なります。
ウォッチデータ Text ID ~ - Text Data からテキストデータが始まり、データ終端(ウォッチデータ Remain Text Data)まで続きます。フッターに相当するデータはありません。
アドレス 0x13D00
からテキストデータ(文字コード UTF-8)が格納されていますが、ヘッダー・Text ID およびオフセット(Offset)のデータサイズは固定なので、言語問わずアドレス 0x13D00
から各言語のテキストデータが格納されていることになります。
次のテキストデータとの間には必ず 1バイトの 00 データを入れて区切っています。
0000_ds3_global.en.lh2 → csv ファイルアンパック方法
アンパックした ~.str のファイル に含まれる 0000_ds3_global.en.lh2 ファイルを、csv ファイルにアンパックする方法です。
cbdf7f70.str アンパック 後 LH2 フォルダにある 0000_ds3_global.en.lh2 を csv ファイルにアンパックします。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダにある lh2_unpack.bat ファイルに、0000_ds3_global.en.lh2 ファイルをドラッグアンドドロップします。
lh2_unpack.bat ファイルに 0000_ds3_global.en.lh2 ファイルをドラッグアンドドロップ後、コマンドプロンプト画面が表示されて lh2 → csv ファイルにアンパック処理~完了です。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダに 0000_ds3_global.en.dat とセットに 0000_ds3_global.en.csv ファイルがアンパックされます。(同時に生成された 0000_ds3_global.en.dat ファイルは csv → lh2 ファイルへのリパック 時に必要)
csv ファイルのフォーマットはカンマ区切りの ID(4バイト)、Offset(4バイト)、Text(文字コード UTF-8) で、このうち Text を編集することで字幕などを変更することができます。
csv → 0000_ds3_global.en.lh2 ファイルリパック方法
アンパックした csv ファイル を 0000_ds3_global.en.lh2 ファイルにリパックする方法です。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダにある lh2_pack.bat ファイルに、0000_ds3_global.en.csv ファイルをドラッグアンドドロップします。
この時に アンパック時に生成された 0000_ds3_global.en.dat ファイル がないとリパックできない点に注意してください。
lh2_pack.bat ファイルに 00000_ds3_global.en.csv ファイルをドラッグアンドドロップ後、コマンドプロンプト画面が表示されて csv → lh2 ファイルにリパック処理~完了です。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダ内にリパックされた 0000_ds3_global.en.lh2 ファイルが生成(すでに同名の lh2 ファイルがある場合は上書き更新)されます。
上の画像は csv ファイルに適当な字幕内容に編集後、リパックした 0000_ds3_global.en.lh2 を DS3 アンパック・リパックキットで bigfile4.viv ファイルにリパック、ゲームインストール先にある bigfile4.viv ファイルと差し替えた後のゲーム内で字幕編集個所を表示させたスクリーンショットです。
字幕の編集・表示すること自体うまくいっていますが、一部の漢字が表示されずに □(豆腐)のままとなっています。これはフォントファイルに該当する漢字が登録されていないためです。(登録文字数は約 2,000 程度)
ちなみに DS3 アンパック・リパックキット を使わないでリパックしたい場合は、以下の手順でリパックすることになります。
アンパックした cbdf7f70.str ファイル の LH2 フォルダに 0000_ds3_global.en.lh2 ファイルが含まれているので、字幕編集してリパックした 0000_ds3_global.en.lh2 に差し替えて、strpack.bat か Gibbed.Visceral.StrPack.exe で cbdf7f70.str ファイルにリパックします。
いずれかの方法でアンパック(アンパック方法 1、アンパック方法 2、アンパック方法 3)した bigfile4.viv ファイルの text_assets\text
フォルダに cbdf7f70.str ファイルが含まれているので、リパックした cbdf7f70.str に差し替えて bigpack.bat か Gibbed.Visceral.BigPack.exe で bigfile4.viv ファイルにリパックします。
text_assets_global.str(ビットマップフォントファイル内包)ファイルアンパック方法
オリジナル版や日本語化ファイル適用した bigfile4.viv ファイルをアンパック(アンパック方法 1、アンパック方法 2、アンパック方法 3)した後、ビットマップフォントファイルを内包している text_assets_global.str ファイルをアンパックする方法です。
DS3 アンパック・リパックキットでアンパック(init_repack.bat) した場合、ds3jp_repack_kit_ver.0.5 フォルダにある backup フォルダと unpack\bigfile\text_assets
フォルダに text_assets_global.str ファイルが展開されています。どちらも同じファイルです。
Gibbed's Visceral Big Viewer や Gibbed.Visceral.BigUnpack.exe でアンパックした場合はそれぞれ指定したフォルダにアンパックされるので、その場合は text_assets
フォルダに text_assets_global.str ファイルが格納されています。
ちなみにこちらは日本語化ファイル DS3JP1080.exe と DS3JP1440.exe を適用した bigfile4.viv ファイルをアンパックして WinMerge で比較した結果です。
text_assets フォルダの text_assets_global.str ファイルのみ差分がある比較結果となっています。
こちらは日本語化ファイル DS3JP1080.exe と DS3JP2160.exe を適用した bigfile4.viv ファイルをアンパックして WinMerge で比較した結果です。
先ほどと同様に text_assets フォルダの text_assets_global.str ファイルのみ差分がある比較結果となっています。
こちらは日本語化ファイル DS3JP1440.exe と DS3JP2160.exe を適用した bigfile4.viv ファイルをアンパックして WinMerge で比較した結果です。
同様に text_assets フォルダの text_assets_global.str ファイルのみ差分がある比較結果となっています。
以上のことから、日本語化ファイル DS3JP1080.exe、DS3JP1440.exe、DS3JP2160.exe を適用してアンパックした bigfile4.viv ファイルの差分は、ビットマップフォントの text_assets_global.str ファイルのみということがわかります。
ds3jp_repack_kit_ver.0.5 フォルダにある strunpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrUnpack.exe ファイルに text_assets_global.str ファイルをドラッグ&ドロップすることでアンパックできます。
ds3jp_repack_kit_ver.0.5 フォルダにある strunpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrUnpack.exe ファイルにアンパックして展開された text_assets_global_unpacked フォルダの中身です。
アンパックした text_assets_global.str ファイル比較(オリジナル版と日本語化ファイル)
ここではオリジナル版および解像度別日本語化ファイルの アンパックした text_assets_global.str ファイル を WinMerge で比較した結果を確認します。この比較方法ではどのファイルに日本語フォントが含まれているのかわかるようになります。
オリジナル版と日本語化ファイル DS3JP1080.exe の アンパックした text_assets_global.str ファイル を WinMerge で比較した結果です。
FFN・tg4d・tg4h 各フォルダにある eurostileltstdbold32・russellsquare32・serpentinebold32・vervestd32b のファイル名があるファイルが、オリジナル版にあるファイルと異なる結果となっています。
FFN・tg4d・tg4h 各フォルダには元々 7つのファイルが含まれていますが、うち 4つのファイルに日本語フォントが組み込まれていることになります。
こちらの画像は上から、日本語化ファイル DS3JP1080.exe と DS3JP1440.exe、日本語化ファイル DS3JP1080.exe と DS3JP2160.exe、日本語化ファイル DS3JP1440.exe と DS3JP2160.exe の アンパックした text_assets_global.str ファイル の比較結果です。
いずれも FFN・tg4d・tg4h 各フォルダにある eurostileltstdbold32 と russellsquare32 のファイル名があるファイルがそれぞれ異なる結果となっています。
つまり、オリジナル版と DS3JP1080.exe との比較結果から serpentinebold32 と vervestd32b のファイル名があるファイルは、解像度別日本語化ファイルではすべて同じファイルを使用していることになります。
Noesis ツールを使ったビットマップフォント(tg4h と tg4g ファイル)エクスポート方法
Noesis というモデル・テクスチャビューワツールに、DEAD SPACE シリーズテクスチャファイル(tg4h / tg4d)閲覧 Python スクリプト(~.py) を導入することで、ビットマップフォントを画像ファイルとしてエクスポートすることができます。
Noesis をダウンロードして展開・解凍したら、plugins\python
フォルダに tex_DeadSpace123_PC_PS3_X360_tg4h.py をダウンロードして配置します。
tex_DeadSpace123_PC_PS3_X360_tg4h.py ファイルは XeNTaX にユーザー登録してログインしてないとダウンロードできません。
ダウンロードした tex_DeadSpace123_PC_PS3_X360_tg4h.py ファイルを plugins\python
フォルダに配置後、Noesis.exe か Noesis64.exe を実行して起動します。
Noesis が起動したらアンパックした text_assets_global.str の tg4h フォルダに移動します。
画像中央下にあるドロップダウンリストで Dead Space 1/2/3 [PC/PS3/X360] (*.tg4h) が選択されている状態で tg4h ファイルをダブルクリックすると、画面右側にフォントテクスチャのプレビュー画像が表示されます。
フォントテクスチャをエクスポートするには tg4h ファイルを右クリック → Export を選択してエクスポート画面を開きます。
Main output type でエクスポートしたいファイル形式が選択可能です。Export ボタンをクリックすると指定した場所にエクスポートします。(デフォルトは tg4h ファイルと同じフォルダ内にエクスポート)
上の画像は Noesis と tex_DeadSpace123_PC_PS3_X360_tg4h.py を使ってエクスポートしたフォントテクスチャ 0006_russellsquare32out.dds ファイルを、FavBinEdit のウォッチデータで解析した内容です。
アドレス先頭から 128バイト(0x0
~ 0x7F
)は DDS ヘッダーです。
ほかの dds フォントテクスチャをエクスポートして比較してみましたが、アドレス 0x0C
~ 0x0F
の 4バイトがテクスチャ画像の横幅、0x10
~ 0x03
の 4バイトがテクスチャ画像の高さとなっています。それ以外のヘッダーはどの dds フォントテクスチャでも共通のバイナリデータとなっています。(参考情報 1、参考情報 2)
アドレス 0x80
以降はすべて tg4d ファイルのバイナリデータです。
これらの内容からテクスチャ画像の縦横サイズ(調べ方)に修正した DDS ヘッダーを用意して、tg4d ファイルのバイナリデータを追加することで dds ファイルを作成することができます。
tg4h(テクスチャヘッダー)ファイル解析
アンパックした text_assets_global.str ファイル に含まれる tg4h(テクスチャヘッダー)ファイルの解析情報です。
上記 4つの画像はそれぞれ、オリジナル版と日本語化ファイル DS3JP1080.exe のアンパックした text_assets_global.str ファイルに含まれる、0002_eurostileltstdbold32.tg4h・0006_russellsquare32.tg4h・0008_serpentinebold32.tg4h・0010_vervestd32b.tg4h ファイルを WinMerge で比較した結果です。
こちらの画像は 0006_russellsquare32.tg4h ファイルを FavBinEdit のウォッチデータで解析したものです。ウォッチデータに * を入れているのはオリジナル版と相違があるバイナリデータです。それ以外は一部を除き(後述)同じです。
4つあるウォッチデータのうち、最初と最後のウォッチデータがファイル名が一部の同じ 0007_russellsquare32.tg4d テクスチャファイルサイズのバイナリデータ(4バイト)、2番目と3番目のウォッチデータが同 DDS テクスチャの Width(画像横幅)(2バイト)・Height(画像高さ)(2バイト)となっています。
これらのことから、オリジナル版 tg4h ファイルでも 4か所のバイナリデータを日本語フォント用に正しく修正するだけで、日本語化ファイル用 tg4h ヘッダーファイルを作成できることになります。
ただ、各 tg4h ファイルのアドレス 0x26
のバイナリデータが 03 となっていますが、オリジナル版 0010_vervestd32b.tg4h ファイルのアドレス 0x26
のバイナリデータが 0a となっている理由はわかりませんでした。
既存の各 tg4h ファイルから対応する tg4d フォントテクスチャファイルの横幅・高さが判明するので、DDS ヘッダーファイル の バイナリデータを作成・修正 したい場合はこの方法で調べられることになります。
オリジナル版と日本語化 inf(グリフデータ)ファイル比較
アンパックした text_assets_global.str ファイル に含まれる inf(グリフデータ)ファイルの一部比較内容です。
上記 4つの画像はそれぞれ、オリジナル版と日本語化ファイル DS3JP1080.exe のアンパックした text_assets_global.str ファイルに含まれる 0802_eurostileltstdbold32.inf・0804_russellsquare32.inf・0805_serpentinebold32.inf・0806_vervestd32b.inf を WinMerge で比較した結果です。
inf ファイルの詳細な解析内容については 次のセクション で解説しますが、アドレス 0x44
~ 0x443
にヘッダーと思われる謎のバイナリデータがあり、今回の調査ではよくわからなかった内容です。日本語化ファイルに使われているこのバイナリデータは、おそらく 3DM 版中文化ファイルの inf ファイルを流用したものではないかと思われます。
参考サイトの こちら や こちら に、アドレス 0x44
~ 0x443
のバイナリデータについて推測されている書き込みがありますが、このアドレス範囲内にあるバイナリデータの意味はよくわかりませんでした。
ただ、inf ファイルではデータ後半部分に連続した 00
データを埋める箇所があります。色々調べたところアドレス 0x44
~ 0x443
のバイナリデータをもとに 00
データを埋めるバイト数が決まっているようなので、その計算方法については 次のセクション で説明します。
ここでは日本語化ファイル inf ファイルのアドレス 0x44
~ 0x443
にあるバイナリデータについてわかった範囲内で内容を整理します。
アドレス 0x44
~ 0x443
のバイナリデータサイズは 1,024 バイトです。
4バイトを一つの塊としてみて、先頭 2バイトは 00 04
(0x400 = 1,024
)で固定、残り 2バイトは 00 00
から 4バイト単位で増加、日本語化ファイルでは最後に fc 03
(0x3fc=1,020
)で終わっています。これは中文化ファイルでも同様となっているようです。オリジナル版では途中で 00 00 00 00
データが含まれているのがほとんどなので、fc 03
までカウントされません。
これが全部で 256個あり、4バイト×256個=1,024バイトとなっています。
inf(グリフデータ)ファイル解析
アンパックした text_assets_global.str ファイル に含まれる inf(グリフデータ)ファイルの解析情報です。
画像は日本語化ファイル DS3JP1080.exe で日本語化した 0804_russellsquare32.inf ファイルの FavBinEdit ウォッチデータです。ウォッチデータに * を入れているのはオリジナル版と相違があるバイナリデータです。
inf ファイルは不明な点が多く、一部のウォッチデータについては解析できていません。また、ウォッチデータで各バイナリデータに区切りを入れて値を特定していますが、この区切り方は正確ではない可能性があります。
フォントの作成方法が不明なうえ、inf ファイルの解析が完全にできていない理由により、フォント作成の試みを断念しています。
ウォッチデータ * 0804_russellsquare32.inf File Size(Japanese 1080p)は inf ファイルサイズです。この場合は 309,304 バイトになります。
ウォッチデータ * Character Count はフォントの文字数です。
ウォッチデータ * Line Height ? は 過去ログの情報によると行高 となるようです。値の求め方は「Y 軸オフセット+文字高が最大となる文字の値」とありますが、これが具体的にどのデータのことを指しているのかわかりません。
後述する ウォッチデータ * height と ウォッチデータ * yoffset のそれぞれの座標データ最大値(集計方法)を足したものかと思ったのですが、0804_russellsquare32.inf では値は一致しますが(height max 60 + yoffset max 16=76)、それ以外のいくつかの inf ファイルでは値が完全に一致しませんでした。
前後 2か所ある ウォッチデータ * ? についてはわかりませんでした。
ウォッチデータ * Jump to address 0xB7DC は連続した 00
データ(ウォッチデータ * 00 Data(261492bytes))の開始アドレス 0xB7DC
のことかと思われます。
ウォッチデータ * Unknown Header はアドレス 0x44
~ 0x443
まで続く謎データ集合体の一つです。データの法則性については こちら で説明。後述の ウォッチデータ * 00 Data(261492bytes) の求め方に関係している可能性があります。
ウォッチデータ 248(0xF8
) x 3 = 744(Unknown Footer 744bytes) は 248(0xF8
)に 3 をかけた値が、データ終端にある ウォッチデータ Unknown Footer 744bytes のバイト数(744バイト)と一致します。つまり、ウォッチデータ Unknown Footer 744bytes のバイト数(744バイト)を 3 で割ることでも、このウォッチデータのアドレスにある値 248(0xF8
)を求められることになります。
オリジナル版の 0804_russellsquare32.inf でもこの値(248(0xF8
))が使われているので、日本語化フォントを導入しても変化がない固有のデータとなっています。
ウォッチデータ * Jump to Unknown Footer address(0x4B550) は ウォッチデータ * Unknown Footer 744bytes)の開始アドレス 0x4B550
のことかと思われます。
ウォッチデータ ? 00 00 00 00 は次の文字座標データの前にある 4バイトの区切りデータとみていますが、内容としてあっているのかどうかわかりません。ただ、ほかの inf ファイルの同じアドレスでも、必ず 4バイトの 00 00 00 00
となっている点では共通しています。
ウォッチデータ * Unicode ~ ウォッチデータ * y(end point)(= y(start point) + height) x 16(0x10)(すべて 2バイト単位)までが 1文字当たりの座標データのフォーマットです。こちら で解析された内容をもとにウォッチデータを作成しています。
ウォッチデータ * xoffset、ウォッチデータ * yoffset、ウォッチデータ * xadvance の 3か所についてはマイナス数値がある 16進数座標データとなっているので、符号付き整数(Signed Integer)で値を変換する必要があります。
2か所ある ウォッチデータ 00 00 は 1文字当たりの文字座標データとセットで存在する謎の 00
データです。オリジナル版では 00
以外の数値が含まれていることがありますが、こちら では特に言及していないため、この値の意味については不明です。
ウォッチデータ * Remain Glyph Data は残りの文字座標データです。座標データの終端アドレスは ウォッチデータ * Jump to address 0xB7DC で示したアドレスのひとつ前(0xB7DB
)としています。
ウォッチデータ * 00 Data(261492bytes) には大量の連続した 00
データで占めています。オリジナル版と日本語化ファイルではサイズが異なり、日本語化ファイルの 0804_russellsquare32.inf では 261,492バイトの 00
データがあります。
こちら に必要な 00
データの計算方法と思われる書き込みが残っていますが、具体的にどの数値でどのように計算しているのかがわからず、うまく内容を読み取ることはできませんでした。
ただ、いずれの inf ファイルでも共通しているのは ウォッチデータ * Jump to Unknown Footer address(0x4B550) のバイナリデータを ウォッチデータ * Jump to address 0xB7DC のバイナリデータで引いた数値と一致するようになっています。(この inf ファイルの場合は 0x4B550 - 0xB7DC = 0x3FD74(261,492)
)
以下、オリジナル版と初代 DEAD SPACE 中文化ファイルの inf ファイルを調べていた時に、法則性のようなものを見つけたのでその内容について解説します。興味があればクリックしてご覧ください。
ウォッチデータ Unknown Footer 744bytes はデータサイズ 744 を 3 で割った値が、データ終端にある ウォッチデータ 248(0xF8) x 3 = 744(Unknown Footer 744bytes) のバイト数(248(0xF8
))と一致します。
オリジナル版の 0804_russellsquare32.inf でもこの 744バイトのデータがそのまま使われているので、日本語化フォントを導入しても変化がない固有のデータとなっています。
inf(グリフデータ)ファイルの Excel インポート・変換方法
アンパックした text_assets_global.str ファイル に含まれる inf(グリフデータ)ファイル の座標データ(バイナリデータ)を抽出して、テキスト化 → 正規表現で置換・データ整形 → Excel でインポートして16進数の座標データを 10進数に変換する方法を解説します。
ここでは日本語化ファイル DS3JP1080.exe の 0802_eurostileltstdbold32.inf ファイルを例に説明します。なお、成果物ファイルは PC ゲーム DEAD SPACE 3(2013)日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイルの GlyphData フォルダに txt ファイルと xlsx ファイルを格納しています。
バイナリエディタ FavBinEdit で inf(グリフデータ)ファイル を開き、座標データのあるバイナリデータをコピーします。
コピーする座標データの範囲はウォッチデータの * Unicode から * Remain Glyph Data のデータ終端までです。
コピーした座標データを正規表現が使える 秀丸エディタ にテキストデータとして貼り付けます。
以下の順序で Excel インポート用に置換と正規表現を実行します。
最初にテキスト内にあるスペースを全部削除します。検索欄には半角スペースを、置換欄には何も入力しない状態で置換処理します。この置換方法では正規表現は不要です。
次にデータ整形のため 24バイト単位(1文字あたりの座標データ)で改行するように正規表現を使います。検索欄には (.{48})
を、置換欄には \1\n
を入力して正規表現で置換します。
最後に Excel インポート用に 2バイト単位でカンマ区切りを挿入します。検索欄には ^(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})$
を、置換欄には \1,\2,\3,\4,\5,\6,\7,\8,\9,\g{10},\g{11},\g{12}
を入力して正規表現で置換します。
以上の置換処理後、固定幅フォントであれば上下行のテキスト文字が 1文字もズレなくそろっていることと、行数が ウォッチデータ * Character Count と同じになっているかどうか確認できたら、テキスト形式(.txt)で保存します。なお、GlyphData フォルダには上記の段階的に置換処理したテキストファイルを保存してあります。(ファイル名に Remove-Spaces、Remove-Spaces-24bytes-CRLF、Remove-Spaces-24bytes-CRLF-2bytes-Add-Comma とあるもの)
次にこのカンマ区切りテキストファイルを Excel にインポートしてみます。
Excel で新規ファイルを作成(Sheet1 のみがある状態)して、メニュー → データから「テキストまたは CSV から」ボタンをクリックして、インポートするテキストファイルを選択します。(もしくは、データの取得 → ファイルから → テキストまたは CSV からでも可)
PC 環境によっては上の画像のように Microsoft Excel のセキュリティに関する通知が表示されるので OK ボタンで閉じます。
データ型検出を「最初の 200 行に基づく」から「データ型を検出しない」に変更(0000 → 0 に勝手に変換されるの防止するため)にしてデータの変換ボタンをクリックします。
Power Query エディターが開くので、メニューバーにある「閉じて読み込む」ボタンをクリックします。
(Sheet1 がすでにある状態なら)Sheet2 にインポートしたテキストファイルが展開されます。
Sheet2 にインポートした座標データを Sheet1 で参照して、関数や数式を使い 16進数のバイナリデータを 10進数に変換します。A 列から L 列までがインポートしたシートデータを参照して計算しているセル列で、N 列から O 列は A ~ L 列の計算結果をもとにさらに関数や式を使って求めている確認用のセル列となっています。
Sheet1 セル A2 に =HEX2DEC(RIGHT(Sheet2!A2,2)&LEFT(Sheet2!A2,2))
を入力して、セル C2 までコピーします。(A 列Unicode、B 列 width、C 列 height)
これはリトルエンディアンの 2バイト 16進数バイナリデータを RIGHT・LEFT 関数で並べ替えて、HEX2DEC 関数で 10進数に変換しています。
Sheet1 セル K2 も同様に =HEX2DEC(RIGHT(Sheet2!K2,2)&LEFT(Sheet2!K2,2))
を入力して、セル L2 までコピーします。ほとんど 0 データですが、値が入っていることもあるので一応変換するようにしています。
Sheet1 セル G2 に =(HEX2DEC(RIGHT(Sheet2!G2,2)&LEFT(Sheet2!G2,2)))/16
を入力して、セル J2 までコピーします。(G 列 x(start)、H 列 y(start)、I 列 x(end)、J 列 y(end))
16進数→10進数を関数で変換までは同じですが最後に 16で割っています。これは inf ファイルフォーマットの解析内容に x(start)、y(start)、x(end)、y(end) それぞれの座標には 16(0x10)をかけている データなので、16で割ることで座標データに戻しています。そのため、かならず 16で割り切れることになっています。(小数点以下は発生しない)
Sheet1 セル M2 に =UNICHAR(A2)
を入力します。これは A 列の Unicode を文字に変換して確認するために入れています。ただ、特殊な記号・文字についてはゲームでは別の文字に置き換われていることがあるようです。
Sheet1 セル D2 に =IF(HEX2DEC(RIGHT(Sheet2!D2,2)&LEFT(Sheet2!D2,2))<16^LEN(RIGHT(Sheet2!D2,2)&LEFT(Sheet2!D2,2))/2,HEX2DEC(RIGHT(Sheet2!D2,2)&LEFT(Sheet2!D2,2)),HEX2DEC(RIGHT(Sheet2!D2,2)&LEFT(Sheet2!D2,2))-16^LEN(RIGHT(Sheet2!D2,2)&LEFT(Sheet2!D2,2)))
を入力して、セル F2 までコピーします。(D 列 xoffset、E 列 yoffset、F 列 xadvance)
基本的には 16進数→10進数に関数で変換する内容ですが、マイナス数値があるデータの場合そのまま使うと、FF FF
で -1 のところが 65,535 という数値に変換されてしまいます。座標データに関する数値なのでフォントテクスチャサイズを超えた値はおかしいということになります。(フォントテクスチャサイズは大きくても 縦横 4桁数値程度のため)
2バイト符号なし整数型(unsigned integer)なら 0 ~ 65,535 の範囲で済んでいましたが、マイナスを扱う場合は 2バイト符号付き整数型(signed integer)の -32,768~32,767 で変換することになります。
ここにある IF 文を使った符号付き整数型変換式 があるのでこれを流用しました。関数内のそれぞれの計算式の意味は以下の通りです。
IF 文の条件式では LEN 関数で対象セルにある文字数をカウント(4文字なので 4)、LEN 関数で求めた 4 を使って 16 を 4乗した数値を 2で割ります。
計算結果は (16^4=65,536)/2=32,768
となり、HEX2DEC 関数の数値が 32,768 より小さければ、そのままの結果を返しています(True 処理)。32,768 以上であれば、HEX2DEC 関数の数値を 16 を 4乗した数値で差し引きマイナス数値を返します(False 処理)。
あらかじめバイト数が判明していれば条件式で直接値を入力(32,768 や 32,769 数値と不等号の組み合わせ)することもできますが、判定式に 16 の文字数乗した結果を 2で割る、符号付き型で最大値を超える場合は 16 の文字数乗したものを引く ことで、16進数→10進数変換対象の文字数(バイト数)が変化しても数式で計算できる仕組みとなっています。
Sheet1 セル N2 に =G2+B2-I2
を入力します。これは x(start)+width-x(end)
を計算する式で必ず 0 になります。
Sheet1 セル O2 には =H2+C2-J2
を入力します。これも y(start)+height-y(end)
を計算する式で必ず 0 になります。
各セルの関数・数式の入力が終わったらセル A2 ~ O2 までをコピーして、画面左上にある名前ボックス(選択中のセルが表示される欄)に貼り付け先のセル範囲を指定します。この場合 Sheet2 の最大行数は 400 なので、名前ボックスには A2:O400
と入力します。
範囲指定したセルが選択状態になるので貼り付けます。これで、Sheet2 にあるすべての 16進数座標バイナリデータを 10進数に変換して計算することができます。
最後に MAX・MIN 関数を使って M 列(Unicode)以外の数値の最大値・最小値を求めています。
PC ゲーム DEAD SPACE 3 Awakened 日本語化ファイル解析メモとアンパック・解析データ公開
PC ゲーム DEAD SPACE 3 Awakened 日本語化ファイルの解析内容とアンパック・解析データ PC ゲーム DEAD SPACE 3 Awakened 日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイル を公開します。
DDEAD SPACE 3 Awakened の日本語化ファイルは DEAD SPACE 3 で日本語化したフォントを使用しているため、フォントファイルは含まれておらず言語ファイルのみです。オリジナル版も同様にフォントは含まれていません。そのためフォントに関する解析データはありません。
このセクションでの解説は DEAD SPACE 3 で説明した内容と共通する部分があります。ただ、DS3 アンパック・リパックキット がそのままでは使えない点や、ツール単体でアンパック・リパックを実行する場合はアンパック用ファイルの配置やバッチファイルの記述が必要など多少の作業が伴います。
一番大きな違いとして DEAD SPACE シリーズの中で唯一 Awakened の lh2 ファイル(言語データ)のフォーマットが異なる 点です。
DEAD SPACE シリーズ(1~3)は 1言語 1ファイルという形式だったのが、Awakened では 1ファイルにすべての言語データを収めています。そのため、アンパック・リパックツールではこの形式に対応しておらず正しくアンパック・リパックできません。
ここではアンパック・リパックそのものができないのではなく、アンパック・リパック自体は可能だが他の言語データを消失させずにアンパック・リパックができないという意味です。ちなみに Awakened 日本語化ファイルでは書き換え先対象の英語以外の言語データは消失させずにうまくリパックさせています。
Awakened の lh2 ファイルの基本的なフォーマット(データ項目の並び方)に変更はなく、単純に言語データを規則的に詰めているシンプルな構造だけなので、lh2 ファイルのフォーマットがわかれば解析はかんたんです。
リパック方法については Excel を使った方法で今回実現させました。コピペを必要としているので非効率ですがテキストエディタの正規表現と Excel 関数の組み合わせで実現させたので、オフセットの計算方法などは参考になるのではないかと思います。
解析ファイル内容については以下のリストにまとめました。解析データやデータ作成方法などは以降の各セクションで説明します。
- DS3Awakened_ENJP_parse.7z に格納されている English、Awakened_JP.exe 各フォルダについて
- 各フォルダに日本語化パッチ適用前(English フォルダはオリジナル)・適用後(Awakened_JP.exe フォルダ)のデータ抽出と解析データを格納(一部を除き、言語別重複データは除外)
- ds3strings フォルダについて
- ds3strings を使って lh2 言語ファイルから csv ファイルにアンパック
- 上記 csv ファイルを ds3strings を使って lh2 言語ファイルにリパック
- リパックした lh2 ファイルの FavBinEdit で解析したウォッチデータ(~.FavBinEdit-W)格納
- DLC Awakened の複数の言語を含んだ lh2 ファイルを ds3strings でアンパック・リパックした場合、データ先頭の 1言語のみにしか対応しておらず残りの言語はカットされる模様(DAED SPACE 3 本編相当のデータフォーマットに変換)
- このアンパック・リパックしたファイル用途は(csv ファイルでテキスト編集後に)リパックした lh2 ファイルのオフセットデータおよびテキストデータを、Excel でオフセットデータの修正、lh2 ファイルにテキストのバイナリデータを lh2 ファイルに挿入 するために利用
- 関連項目
- FavBinEdit フォルダについて
- lh2 フォルダには lh2 ファイルのフォーマットをバイナリエディタ FavBinEdit で解析したウォッチデータ(~.FavBinEdit-W)を格納
- Awakened_JP.exe フォルダのみにある Offset フォルダには、lh2 ファイルの日本語オフセットデータがある箇所だけマークしたウォッチデータ(~.FavBinEdit-W)を格納(リパックした lh2 ファイルで Excel でのオフセット修正に使用するデータに該当)
- 関連項目
- map_epilogue フォルダについて
- map_epilogue.viv に含まれる言語ファイル(global_assets_global.str、pdlc_assets_global.str、frontend.str)
- オリジナル viv アンパック → 日本語化 str ファイル差し替え → viv リパックで日本語化可能
- 関連項目
- OffsetData フォルダについて
- lh2 ファイルの全言語のオフセットデータ(バイナリ)の 秀丸エディタ の置換機能を使ってカンマ区切りのテキストデータ作成
- Excel ファイルでカンマ区切りのオフセットテキストデータをインポートしてリスト化、各言語オフセット・lh2 ファイルサイズ・フッターアドレス再計算
- 関連項目
- sample フォルダについて(Awakened_JP.exe フォルダのみ)
- オリジナル版 map_epilogue.viv ファイルに日本語化した str(lh2)ファイルをリパックするまでの成果物ファイル格納
- 1_merge_lh2_jp フォルダの各 lh2 ファイルに含まれる英語オフセット・テキストバイナリデータを、日本語オフセット・テキストバイナリデータに書き換え
- 2_only_lh2_jp_text_id_offset_txt フォルダには、各言語のオフセットバイナリデータを 秀丸エディタ の置換機能を使ってカンマ区切りのテキストデータファイル格納
- 3_xlsx_lh2_all_lang_calc_text_id_offset フォルダでは、Excel ファイルでカンマ区切りのオフセットテキストデータをインポート、各言語オフセット・lh2 ファイルサイズ・フッターアドレス再計算
- 4_merge_lh2_jp_fix_file_size_footer_offset フォルダには、lh2 ファイルの各言語オフセット・lh2 ファイルサイズ・フッターアドレス(バイナリデータ)を、Excel で再計算した各言語オフセット・lh2 ファイルサイズ・フッターアドレス(バイナリデータ)に書き換え
- 5_pack_str フォルダでは、書き換えた lh2 ファイルをアンパックしたオリジナルの同名ファイルと差し替えて、str ファイルにリパック
- str_unpack フォルダについて
- global_assets_global.str、pdlc_assets_global.str、frontend.str からアンパックした lh2 ファイルを格納
- 日本語化 lh2 ファイルの英語とロシア語テキストに日本語テキストデータが収録(ロシア語に日本語テキストデータがある理由は不明)
- 関連項目
map_epilogue.viv ファイルアンパック方法
DEAD SPACE 3 インストール先 dlc\map_epilogue
フォルダにある map_epilogue.viv ファイルをアンパックする方法です。
Gibbed's Visceral Big Viewer や Gibbed.Visceral.BigUnpack.exe+bat ファイル と同じ方法でアンパックできますが、アンパックに必要なファイルが別途必要なため、まずはそのファイルを用意する必要があります。
以下、そのファイルの入手方法です。ファイルの入手方法はいくつかありますが、最悪ダウンロードできなくなっても自力でファイルを作成することができます。
map_epilogue.viv ファイルアンパック用ファイル入手方法その 1。
ZenHAX から ds3.rar をダウンロード して展開・解凍すると、Dead Space 3\files\pc
フォルダにある dlc.filelist ファイルがあるのでコピーします。
ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral\projects\Dead Space 3\files\pc
フォルダに dlc.filelist ファイルを配置します。
map_epilogue.viv ファイルアンパック用ファイル入手方法その 2。
ZenHAX から bin.rar をダウンロード して展開・解凍すると、bin\projects\Dead Space 3\files\pc\dlc\map_epilogue
フォルダにある map_epilogue.filelist ファイルがあるのでコピーします。
ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral\projects\Dead Space 3\files\pc
フォルダに map_epilogue.filelist ファイルを配置します。
map_epilogue.viv ファイルアンパック用ファイル入手方法その 3。
上の画像は map_epilogue.viv ファイルをバイナリエディタで開いた時のアドレス 0x3000
~0xF2DD
にあるバイナリデータです。
先ほどダウンロードして入手した dlc.filelist と map_epilogue.filelist ファイルの中身と同じで、おそらくこれをもとに作成されたファイルだと思われます。
バイナリエディタで map_epilogue.viv ファイルのアドレス 0x3000
~0xF2DD
をコピー、同じくバイナリエディタで新規作成した状態で貼り付けて保存時に任意のファイル名で拡張子を filelist にすることで、dlc.filelist と map_epilogue.filelist ファイルと同じものを作成することができます。
ちなみに dlc.filelist と map_epilogue.filelist ファイルの中身はテキストデータなので、テキストエディタで中身を確認することができます。
これで map_epilogue.viv ファイルのアンパックに必要なファイルの配置が完了しました。次に実際に map_epilogue.viv ファイルをアンパックします。
Gibbed's Visceral Big Viewer を使ったアンパック方法です。
ds3jp_repack_kit_ver.0.5\tools\\gibbed.visceral
フォルダ内にある Gibbed.Visceral.BigViewer.exe ファイルを実行します。
ツリーリストに Unknown の数値が 1の状態かつ Known 以下に map_epilogue フォルダが表示されていることを確認して、Save All ボタンをクリックして任意の場所にアンパックします。
こちらは Gibbed.Visceral.BigUnpack.exe+bat ファイル を使ったアンパック方法です。
ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダに以下のアンパック用 bat ファイル(ファイル名は任意)の作成とアンパック対象の map_epilogue.viv ファイルを配置して、bat ファイルを使って Gibbed.Visceral.BigUnpack.exe を実行します。
Gibbed.Visceral.BigUnpack.exe -p="Dead Space 3" map_epilogue.viv map_epilogue
pause
作成したバッチファイル実行後にコマンドプロンプト画面が表示されてアンパック処理開始~完了です。
作成したバッチファイルによる viv ファイルアンパック処理完了後、ds3jp_repack_kit_ver.0.5 フォルダ内に生成された map_epilogue フォルダ(バッチスクリプトの引数で指定したもの)です。このフォルダにアンパックしたファイルが含まれます。
アンパックした map_epilogue.viv ファイルのリパック方法については DEAD SPAC3 3 本編の viv ファイルリパック方法 の内容で行います。
アンパックした map_epilogue.viv ファイル比較(オリジナル版と日本語化ファイル(Awakened_JP.exe))
オリジナル版と日本語化ファイル(Awakened_JP.exe)を適用した map_epilogue.viv ファイルを アンパック した後、WinMerge で比較した結果です。
複数のファイルで差分がありますが、global_assets フォルダにある global_assets_global.str ファイル、pdlc_assets フォルダにある pdlc_assets_global.str ファイル、pdlc_assets\pdlc_globals\pdlc_globals\frontend
フォルダにある frontend.str ファイルの 3つの str ファイルが lh2 言語ファイルを格納しているファイルとなっています。
残りの差分ファイルは日本語化したファイルデータの終端に連続した 00 データを付加したのみです。おそらく、ツールによるリパック時に付加されたものと思われます。
~.str ファイルアンパック方法
map_epilogue.viv ファイルを アンパック した後、lh2 言語ファイルを内包している 3つの str ファイル(global_assets_global.str、pdlc_assets_global.str、frontend.str)のアンパック方法です。
やり方は DEAD SPACE 3 本編の str ファイルアンパック方法 と同じで、ds3jp_repack_kit_ver.0.5 フォルダにある strunpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrUnpack.exe ファイルに str ファイルをドラッグ&ドロップすることでアンパックできます。
以下、str ファイルアンパック処理結果です。
global_assets_global.str ファイルアンパック後、global_assets_global_unpacked\LH2
フォルダに展開された 0186_ds3_dlc_epilogue_global.lh2 言語ファイルです。
pdlc_assets_global.str ファイルアンパック後、pdlc_assets_global_unpacked\LH2
フォルダに展開された 0115_ds3_dlc_epilogue.lh2 言語ファイルです。
frontend.str ファイルアンパック後、frontend_unpacked\LH2
フォルダに展開された 0003_ds3_dlc_epilogue_frontend.lh2 言語ファイルです。
アンパックした str ファイルのリパック方法については DEAD SPAC3 3 本編の str ファイルリパック方法 の内容で行います。
アンパックした ~.str ファイル比較(オリジナル版と日本語化ファイル(Awakened_JP.exe))
オリジナル版と日本語化ファイル(Awakened_JP.exe)を適用した map_epilogue.viv ファイルに含まれる 3つの str ファイル(global_assets_global.str、pdlc_assets_global.str、frontend.str)を アンパック した後、WinMerge で比較した結果です。
3つの str ファイル(global_assets_global.str、pdlc_assets_global.str、frontend.str)をアンパックするといくつかのフォルダ・ファイルが展開されますが、いずれも差分があるファイルは 0186_ds3_dlc_epilogue_global.lh2、0115_ds3_dlc_epilogue.lh2、0003_ds3_dlc_epilogue_frontend.lh2 の言語ファイルのみとなっています。
そのため、DLC Awakened ではこの lh2 ファイルをアンパック→ csv テキスト編集→リパックすることで、ゲーム内テキストを日本語化できるということになります。
lh2 ファイルフォーマット解析(Awakened_JP.exe)
アンパックした str ファイル に含まれる DLC Awakened の lh2 ファイルのフォーマットを FavBinEdit のウォッチデータを使って解析しました。
DLC Awakened の lh2 ファイルの大まかなフォーマットについては過去ログ(lh2 ファイルフォーマット、lh2 ファイル注意点)にてすでに解析済みです。
DEAD SPACE 3 本編の lh2 ファイル とは違い、1つの lh2 ファイルに複数の言語データが格納されている形となっています。ただ、言語データが追加されている以外は DEAD SPACE 3 本編の lh2 ファイル とほぼ同じシンプルなフォーマット(ID、オフセット(言語分)、テキストデータ(言語分))でしたので、ウォッチデータの作成は難しくありませんでした。
画像は日本語化ファイル Awakened_JP.exe で日本語化した 0003_ds3_dlc_epilogue_frontend.lh2 ファイルの FavBinEdit ウォッチデータです。ウォッチデータに * を入れているのはオリジナル版と相違があるバイナリデータです。
ウォッチデータ * 0003_ds3_dlc_epilogue_frontend.lh2 File Size(Awakened_JP.exe)は lh2 ファイルサイズです。この場合は 6,633 バイトになります。
ウォッチデータ * Jump to Footer address 0x19B9 はデータ終端にある ウォッチデータ Footer Data の開始アドレス 0x19B9
を指しているようです。各言語のテキストデータのサイズによってこのアドレスは可変しますので、英語と日本語の場合ではこのアドレスデータは異なることになります。
ウォッチデータ Number of Languages は言語数です。6言語が収録(オリジナル版では英語・ドイツ語・スペイン語・フランス語・イタリア語・ロシア語が収録)されています。
ウォッチデータ Text ID(4byte x 12sentences) は各言語の各オフセット・テキストデータにセットで紐づけされていると思われる固有のバイナリデータになります。このバイナリデータは固定となっており、オフセットやテキストデータを変更してもバイナリデータの内容が変わることはありません。
Text ID は 1つのオフセット・テキストデータに対して 4バイト割り当てられているので、Text ID のデータサイズを 4 で割ることでテキストデータ数を求めることができます。この場合の Text ID サイズは 48バイトなので 4 で割ると 12 となり、テキストデータ数は 12 となります。
ウォッチデータ * English(EN) -> Japanese Text ID - Offset(4byte x 12sentences) ~ ウォッチデータ * Russian(RU) -> ? Japanese Text ID - Offset(4byte x 12sentences) は、各言語のテキストデータが格納されているバイナリデータの先頭アドレス(オフセット)を指しています。
そのため、テキストデータに変更があれば該当するオフセットデータ以降、すべてのバイナリデータが増減する形となっています。
Text ID と同様に 1つのオフセット・テキストデータに対して 4バイト割り当てられており、データサイズは先ほどの Text ID と同じです。このファイルの場合は 48 バイトが各言語のオフセットデータサイズとなっています。
ウォッチデータ * English(EN) -> Japanese Text Data Size 0x4DA(1242bytes) ~ ウォッチデータ ? * Russian(RU) -> ? Japanese Text Data Size 0x4DA(1242bytes) までが各言語のテキストデータが格納されています。フォーマットは DEAD SPACE 3 本編と同様 でテキストデータの文字コードは UTF-8、次のテキストデータとの間には必ず 1バイトの 00 データを入れて区切りを入れています。
DEAD SPACE 3 本編の日本語化ファイルでもそうでしたが、DLC でも英語とロシア語の両方が同じ日本語テキストに置き換えられています。本編でも DLC でも英語版として起動すれば日本語でプレイできるようになっているので、ロシア語を日本語に置き換えている理由については不明です。
ウォッチデータ Footer Data はデータ終端にある固有のバイナリデータです。アドレスの開始位置は ウォッチデータ * Jump to Footer address 0x19B9 で指しています。
lh2 → csv ファイルアンパック方法(DEAD SPACE 3 Awakened 用)
アンパックした str ファイル に含まれる DLC Awakened の lh2 ファイルを csv ファイルにアンパックする方法です。
str ファイルアンパック後、各 LH2 フォルダにある 3つの 0186_ds3_dlc_epilogue_global.lh2、0115_ds3_dlc_epilogue.lh2、0003_ds3_dlc_epilogue_frontend.lh2 ファイルをまとめて csv ファイルにアンパックします。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダに 3つの 0186_ds3_dlc_epilogue_global.lh2、0115_ds3_dlc_epilogue.lh2、0003_ds3_dlc_epilogue_frontend.lh2 ファイルを配置、以下の bat ファイルを作成(ファイル名は任意)して実行します。
ds3strings.exe -u 0003_ds3_dlc_epilogue_frontend.lh2 0003_ds3_dlc_epilogue_frontend.csv
ds3strings.exe -u 0115_ds3_dlc_epilogue.lh2 0115_ds3_dlc_epilogue.csv
ds3strings.exe -u 0186_ds3_dlc_epilogue_global.lh2 0186_ds3_dlc_epilogue_global.csv
pause
bat ファイル実行後、コマンドプロンプト画面が表示されて lh2 → csv ファイルにアンパック処理~完了です。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダ内に ~.dat ファイルとセットに 0186_ds3_dlc_epilogue_global.csv、0115_ds3_dlc_epilogue.csv、0003_ds3_dlc_epilogue_frontend.csv ファイルが生成されます。(同時に生成された ~.dat ファイルは csv → lh2 ファイルへのリパック 時に必要)
なお、lh2_unpack.bat ファイルでもドラッグアンドドロップでアンパックできますが、DEAD SPACE 3 本編のファイル名(0000_ds3_global.en)となるので、リパック処理のことを考えるとアンパック後はファイルのリネーム(名前変更)する必要があります。(単純に lh2 → csv ファイルを変換して中身をチェックする程度なら lh2_unpack.bat で十分です)
なお、csv ファイルには 6つある言語のうち一番上にある言語(オリジナル版では英語、日本語化ファイルでは日本語)のみしかありません。これはツールが DEAD SPACE 3 本編にしか対応していないため、残りの言語はごっそりそぎ落とされてる形となります。
そのため csv ファイルを編集して lh2 ファイルにリパック後したものを利用すると 問題が発生 するようです。
対応したツールがないため残りの言語を削除しないでテキストを書き換えるには、リパックした lh2 ファイルのバイナリデータ(オフセットとテキストデータ)を使って、オリジナル版の lh2 ファイルにあるバイナリデータの修正作業(オフセット再計算、英語→日本語テキスト差し替え) をすることで暫定的に対応できるようにしました。
csv → lh2 ファイルリパック方法(DEAD SPACE 3 Awakened 用)
アンパックした csv ファイル を DLC Awakened 用 lh2 ファイルにリパックする方法です。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダに csv ファイルとアンパック時に生成された dat ファイルがある状態で、以下の bat ファイルを作成(ファイル名は任意)して実行します。(アンパック時に生成された dat ファイルがないとリパックできない点に注意)
ds3strings.exe -p 0003_ds3_dlc_epilogue_frontend.csv 0003_ds3_dlc_epilogue_frontend.lh2
ds3strings.exe -p 0115_ds3_dlc_epilogue.csv 0115_ds3_dlc_epilogue.lh2
ds3strings.exe -p 0186_ds3_dlc_epilogue_global.csv 0186_ds3_dlc_epilogue_global.lh2
pause
bat ファイル実行後、コマンドプロンプト画面が表示されて csv → lh2 ファイルにリパック処理~完了です。
ds3jp_repack_kit_ver.0.5\tools\ds3strings
フォルダ内にあった csv ファイルがそれぞれ lh2 ファイルにリパックされます。(すでに同名の lh2 ファイルがある場合は上書き更新)
なお、lh2_pack.bat ファイルでもドラッグアンドドロップでリパックできますが、DEAD SPACE 3 本編のファイル名(0000_ds3_global.en)となるので、リパック処理後はファイルをリネーム(名前変更)する必要があります。
この方法でリパックした lh2 ファイルには 6つある言語のうち 1言語(オリジナル版では英語、日本語化ファイルでは日本語)のみしかない状態です。これは csv ファイルにアンパック したときにツールが 1言語(バイナリデータ上では一番上にある言語)にしか対応していないためです。
そのため アンパックした csv ファイル を編集して lh2 ファイルにリパック後したものを利用すると 問題が発生 する可能性があります。
残りの言語を削除しないでテキストを書き換えるには、リパックした lh2 ファイルのバイナリデータ(オフセットとテキストデータ)を使って、オリジナル版の lh2 ファイルにあるバイナリデータの修正作業(オフセット再計算、英語→日本語テキスト差し替え) が必要となります。
次 にそのやり方を説明します。
lh2 ファイルバイナリデータ書き換え方法(DEAD SPACE 3 Awakened 用)
リパックした(された)日本語化 lh2 ファイル とこちらで用意した DEAD SPACE 3 Awakened 日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイル の OffsetData フォルダにある Excel ファイルと、FavBinEdit のウォッチデータを使って、DLC Awakened オリジナル版 lh2 ファイルに日本語データ(オフセット・テキストデータ・ファイルサイズ・フッターアドレスデータ)に差し替える方法を 0003_ds3_dlc_epilogue_frontend.lh2 ファイルを使って説明します。
オリジナル版 frontend.str ファイルアンパック後の 0003_ds3_dlc_epilogue_frontend.lh2 ファイルを、バイナリエディタ FavBinEdit で開き、こちらで用意した DEAD SPACE 3 Awakened 日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイル の English\FavBinEdit\lh2
フォルダにあるウォッチデータ 0003_ds3_dlc_epilogue_frontend.lh2.FavBinEdit-W ファイルを読み込みます。
ウォッチデータ English(EN) Text Data Size 0x35A(858bytes) のバイナリデータを削除します。
続けて、ウォッチデータ English(EN) Text ID - Offset(4byte x 12sentences) のバイナリデータを削除します。
ウォッチデータ English(EN) Text Data Size 0x35A(858bytes) と ウォッチデータ English(EN) Text ID - Offset(4byte x 12sentences) バイナリデータ削除後の DLC Awakened オリジナル版 0003_ds3_dlc_epilogue_frontend.lh2 ファイルです。
次に削除したバイナリデータのあったアドレスに リパックした日本語化 lh2 ファイル(0003_ds3_dlc_epilogue_frontend.lh2) のオフセットとテキストデータを挿入します。
リパックした日本語化 lh2 ファイル(0003_ds3_dlc_epilogue_frontend.lh2) を FavBinEdit で開き、DEAD SPACE 3 Awakened 日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイル の Awakened_JP.exe\FavBinEdit\Offset
フォルダにあるウォッチデータ 0003_ds3_dlc_epilogue_frontend.lh2-Offset.FavBinEdit-W ファイルを読み込みます。
ウォッチデータ English(EN) -> Japanese Text ID - Offset(4byte x 12sentences) 以下にある日本語テキストバイナリデータをすべてコピーすると同時に、バイナリデータ 16進数サイズをメモします。今回の場合は 0x4DA
でこれをあとで Excel でのオフセット計算用に使います。
オリジナル版 lh2 ファイルのバイナリエディタ画面に戻り、先ほど削除した ウォッチデータ English(EN) Text Data Size 0x35A(858bytes) があったところに、コピーした日本語テキストデータを貼り付けます。
上の画像では ウォッチデータ Russian(RU) Text ID - Offset(4byte x 12sentences) と ウォッチデータ German(DE) Text Data Size 0x3AD(941bytes) の間に日本語テキストデータがある形となっています。
リパックした日本語化 lh2 ファイル(0003_ds3_dlc_epilogue_frontend.lh2) を開いたバイナリエディタ画面に戻って、ウォッチデータ English(EN) -> Japanese Text ID - Offset(4byte x 12sentences) の日本語オフセットデータをコピーします。
オリジナル版 lh2 ファイルのバイナリエディタ画面に戻り、先ほど削除した ウォッチデータ English(EN) Text ID - Offset(4byte x 12sentences) があったところに、コピーした日本語オフセットデータを貼り付けます。
上の画像では ウォッチデータ Text ID(4byte x 12sentences) と ウォッチデータ German(DE) Text ID - Offset(4byte x 12sentences) の間に日本語オフセットデータがある形となっています。
lh2 ファイルの英語テキストデータから日本語テキストデータに変更したので、各言語のオフセットデータを再計算します。
ウォッチデータ Text ID(4byte x 12sentences) より下、追加した日本語テキストデータの間にある 6言語分のオフセットデータをコピーして、テキストエディタ 秀丸エディタ に貼り付けます。
Excel へインポートできるようにするため、以下の順序で置換と正規表現を実行します。
最初にテキスト内にあるスペースを削除します。検索欄には半角スペースを、置換欄には何も入力しない状態で置換処理します。この置換方法では正規表現は不要です。
次にデータ整形のため 16バイト単位(バイナリエディタの 1行当たりのバイト表示数)で改行するように正規表現を使います。検索欄には (.{32})
を、置換欄には \1\n
を入力して正規表現で置換します。
最後に Excel インポート用に 4バイト単位でカンマ区切りを挿入します。検索欄には (.{8})(.{8})(.{8})(.{8})
を、置換欄には \1,\2,\3,\4
を入力して正規表現で置換します。
以上の置換処理後、固定幅フォントであれば上下行のテキスト文字が 1文字もズレなくそろっていることが確認できたら、テキスト形式(.txt)で保存します。なお、OffsetData フォルダには上記の段階的に置換処理したテキストファイルを保存してあります。(ファイル名に Remove-Spaces、Remove-Spaces-16bytes-CRLF、Remove-Spaces-16bytes-CRLF-4bytes-Add-Comma とあるもの)
次にこのカンマ区切りテキストファイルを Excel にインポートしてみます。
PC ゲーム DEAD SPACE 3 Awakened 日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイル の Awakened_JP.exe\OffsetData\xlsx
フォルダにある 0003_ds3_dlc_epilogue_frontend.lh2.xlsx ファイルを開きます。
Excel のメニュー → データから「テキストまたは CSV から」ボタンをクリックして、インポートするテキストファイルを選択します。(もしくは、データの取得 → ファイルから → テキストまたは CSV からでも可)
データ型検出を「最初の 200 行に基づく」から「データ型を検出しない」に変更(0000 → 0 に勝手に変換されるの防止するため)にしてデータの変換ボタンをクリックします。
Power Query エディターが開くので、メニューバーにある「閉じて読み込む」ボタンをクリックします。
Sheet3 にインポートされたデータがあるセルをコピーします。上の画像ではセル A2:D19 を範囲選択した状態です。
Sheet2 を開きコピーした Sheet3 のデータを、同じセル範囲(この場合は A2:D19)に上書きで貼り付けます。
Sheet1 のセル G10 を 0003_ds3_dlc_epilogue_frontend.lh2 日本語化ファイルの日本語テキストバイナリデータサイズ(16進数)に書き換えます。今回の場合は 0x4DA なので 4DA を入力しています。
これで日本語テキストデータ追加時の各言語のオフセットデータの値を再計算します。
計算後のオフセットデータがあるグリーンセル(ここではセル T2:W19)をコピーして、コピー元である lh2 ファイルの 6言語オフセットデータがある個所に上書き貼り付けして書き換えます。
Excel でコピーしたセルデータを FavBinEdit に貼り付ける際に「クリップボードの文字列が HEX データに変換可能です。HEX データとして貼り付けますか?」というメッセージが表示されますが、はいボタンをクリックすると貼り付けることができます。
オリジナル版 0003_ds3_dlc_epilogue_frontend.lh2 の English ~ Russian 全 6言語のオフセットデータ(アドレス 0x50
~ 0x16F
)を書き換えたところです。
次にオフセット修正後の lh2 ファイルのファイルサイズとフッターデータのアドレスがあるバイナリデータを書き換えます。
Excel ファイルの Sheet1 にあるグリーンセル G20 の LH2 File Size(LE) バイナリデータをコピーします。
オリジナル版 0003_ds3_dlc_epilogue_frontend.lh2 ファイルのアドレス 0x4
~ 0x7
にある ウォッチデータ 0003_ds3_dlc_epilogue_frontend.lh2 File Size(Awakened English) に、Excel の Sheet1 からコピーしたセル G20 を上書き貼り付けして書き換えます。
Excel ファイルの Sheet1 にあるグリーンセル G21 の Footer Address(LE) バイナリデータをコピーします。
オリジナル版 0003_ds3_dlc_epilogue_frontend.lh2 ファイルのアドレス 0xC
~ 0xF
ウォッチデータ Jump to address Footer 0x185B に、Excel の Sheet1 からコピーしたセル G21 を上書き貼り付けして差し替えます。
なお、0115_ds3_dlc_epilogue.lh2.xlsx ファイルでは上の画像のように、範囲選択で空白セル含む状態でコピーして FavBinEdit に貼り付けるとき、HEX データとして貼り付けることができません。(HEX データとして貼り付ける際に表示される FavBinEdit の確認メッセージ が表示されない)
対策として一度テキストエディタに貼り付けてから再度コピーすることで、HEX データ としてFavBinEdit に貼り付けることができます。
以上が DLC Awakened lh2 ファイルのオフセット・テキストデータ・ファイルサイズ・フッターアドレスデータを正規表現と Excel を使って追加・修正する方法となります。
完成した lh2 ファイルを、アンパックした str ファイルに含まれている元の lh2 ファイル と差し替えて str ファイルにリパック、str ファイルにリパックしたファイル も同様に アンパックした map_epilogue.viv ファイルに含まれている元の str ファイル と差し替えて、map_epilogue.viv ファイルにリパック して一連のテキストデータ差し替えは完了となります。
オリジナルの map_epilogue.viv ファイルをリパックした map_epilogue.viv に差し替えてゲームが起動できるかどうか、置き換えたテキストが表示されるかどうか、文字化けが発生しないかどうかをチェックします。
以下、DLC Awakened の一部の字幕テキストを書き換えたスクリーンショットを公開します。
lh2 ファイルバイナリデータオフセット書き換え用 Excel ファイル解説
DEAD SPACE 3 Awakened の lh2 ファイルのバイナリデータを書き換えるために使用した Excel ファイル で使った関数や数式について解説します。
PC ゲーム DEAD SPACE 3 Awakened 日本語化ファイル解析データ(2022年1月30日版)DS3_ENJP_parse.7z ファイル の Awakened_JP.exe\OffsetData\xlsx
フォルダに各 lh2 ファイル(0186_ds3_dlc_epilogue_global.lh2、0115_ds3_dlc_epilogue.lh2、0003_ds3_dlc_epilogue_frontend.lh2)に対応した Excel ファイルを 3つ用意しています。
これはそれぞれの lh2 ファイルで再計算対象のオフセットデータの数が違うためファイルを分けています。計算に必要な関数や数式についてはどの Excel ファイルでも全く同一のもので構成させています。
ここではオフセットデータ数が一番少ない 0003_ds3_dlc_epilogue_frontend.lh2.xlsx ファイルを使って説明します。
Sheet1 の A 列から D 列(セル A2:D19)には Sheet2 にある 16進数オフセットデータをセル参照しています。(Sheet2 は Sheet3 でインポートしたオフセットテキストデータを上書きしたものに反映)
オフセットデータはリトルエンディアンのため、MID 関数で並び替えて HEX2DEC 関数で計算用に 10進数に変換しています。
E 列でオフセットデータに対応する言語を手入力でメモしています。
セル F2:H16 では DLC Awakened の 0003_ds3_dlc_epilogue_frontend.lh2 ファイル内の各バイナリデータのサイズを入力しています。サイズの調べ方は FavBinEdit で解析・作成したウォッチデータでバイナリデータを範囲選択してサイズを調べたものです。
G 列に 16進数で入力、H 列に HEX2DEC 関数を使用して計算用に 10進数変換しています。
セル G3:G15 で 16進数が太字になっているものは lh2 ファイルによってサイズが異なります。セル G2 の Header Size とセル G16 の Footer Size は固定サイズです。
オレンジセル(セル G10)は 英語から日本語テキストに書き換えたことにより、テキストサイズに変更 があったので目安としてセルに色を付けています。日本語テキスト内容を追加・削除などがあってサイズが変更した場合は必ず入力する部分です。これ以外のセルでは手入力する必要はありません。
セル H17 で lh2 ファイルサイズを計算しています。
セル H2:H16 の Header Size から Footer Size までの各 10進数数値を SUM 関数で合計を求めています。
セル H17 で計算した lh2 ファイルサイズ 10進数を、DEX2HEX 関数で 16進数 8桁(4バイト)に変換しています。
セル H18 で Footer Data があるアドレスを計算しています。
ここではセル H2 Header Size からセル H15 の RU Data Size までの 10進数数値を、SUM 関数で合計を求めることで Footer Data のアドレスを計算しています。
別の計算方法として lh2 ファイルサイズ(0x1A0B
)から Footer Size0x30
を差し引くことでも求めることができます。(0x1A0B - 0x30 = 0x19DB
)
セル H18 で計算した Footer Data のアドレス 10進数を、DEX2HEX 関数で 16進数 8桁(4バイト)に変換しています。
計算した 16進数 8桁(4バイト) lh2 ファイルサイズ(セル G17)を MID 関数を使ってリトルエンディアンに変換しています。
計算した 16進数 8桁(4バイト) Footer Data アドレス(セル G18)を MID 関数を使ってリトルエンディアンに変換しています。
セル J2:M4 では リパックした日本語化 lh2 ファイル のオフセットデータ(セル A2:D4)を再計算で修正しています。
リパックした日本語化 lh2 ファイル では 1言語分のオフセットデータしかないため、ほかの 5言語のオフセットデータ分が抜けています。
そのため、日本語テキストの各オフセットデータ(セル A2:D4)(10進数)に、抜けているドイツ語(DE)からロシア語(RU)までのオフセットサイズ(セル $H$5:$H$9)(10進数)を合計したものを加えて、オフセットデータ(セル J2:M4)を再計算しています。
日本語テキストオフセットデータ(セル J2:M4)を再計算で修正したことにより、以降のすべての言語のオフセットデータもずれることになるため再計算の対象となります。
ドイツ語(DE)先頭オフセットデータ(セル A5)を、再計算した日本語先頭オフセットデータ(セル J2)(10進数)と日本語テキストデータサイズ(セル H10)(10進数)を合計したものに修正します。
このドイツ語(DE)先頭オフセットデータ(セル J5)を計算の起点として、残りの言語のオフセットデータも修正します。
インポートしたドイツ語(DE)2番目以降のすべての各オフセットデータ(セル B5 ~ D19 まで)(10進数)の再計算方法は以下の通りです。
上の画像のセル K5(ドイツ語(DE)2番目のオフセットデータ)での計算式は、インポートしたドイツ語(DE)2番目のオフセットデータ(セル B5)を、ドイツ語(DE)先頭オフセットデータ(セル A5)(10進数)の絶対参照(セル $A$5)で差し引いて差分を求めます。
差分結果を、修正後のドイツ語(DE)先頭オフセットデータ(セル J5)(10進数)を絶対参照(セル $J$5)で加えたものにして修正します。
あとはロシア語(RU)終端データ(セル D19)まで計算を続けます。
各言語の修正後オフセットデータ(セル J2:M19)を、DEC2HEX 関数で 16進数 8桁(4バイト)バイナリデータに変換しています。
各言語の修正後オフセットデータ(セル J2:M19)を DEC2HEX 関数で 16進数 8桁(4バイト)バイナリデータに変換したセル O2:R19 を、MID 関数を使ってリトルエンディアンに変換しています。
PC ゲーム DEAD SPACE 2(2011)日本語化ファイル解析メモとアンパック・解析データ公開
PC ゲーム DEAD SPACE 2(2011)日本語化ファイルの解析内容とアンパック・解析データ PC ゲーム DEAD SPACE 2(2011)日本語化ファイル解析データ(2022年1月30日版)DS2_ENJP_parse.7z ファイル を公開します。
解析データのフォーマットや解析方法などは DEAD SPACE 3 とほぼ同じ内容が多いため、説明内容に重複する部分があります。ただ、DS3 アンパック・リパックキット がそのままでは使えないところがある点(バッチファイル書き換えで対応可)と、ツール単体でアンパック・リパックを実行する場合はバッチファイルの記述が別途必要な点があります。
解析ファイル内容については以下のリストにまとめました。解析データについては各セクションで説明します。
- DS2_ENJP_parse.7z に格納されている English、DS2JP720.exe、DS2JP720br.exe、DS2JP1080.exe 各フォルダについて
- 各フォルダに日本語化パッチ適用前(English フォルダはオリジナル)・適用後(解像度別に DS2JP720.exe、DS2JP720br.exe、DS2JP1080.exe フォルダに分類)のデータ抽出と解析データを格納(一部を除き、言語別・解像度別の重複データは除外)
- DDSHeader フォルダについて
- Noesis でエクスポートした dds ファイルから dds ヘッダー(先頭アドレスから 128 バイトまで)をコピーして作成したバイナリファイル(拡張子なし)
- 関連項目
- DS2DAT0 フォルダについて
- DS2DAT0.DAT に含まれるフォントファイル(text_assets_global.str)と言語ファイル(英語・日本語化は f40cc683.str)(いずれも差分ファイルのみ)
- オリジナル DAT アンパック → 日本語化 str ファイル差し替え → DAT リパックで日本語化可能
- 関連項目
- ds3strings フォルダについて
- ds3strings を使って lh2 言語ファイルから csv ファイルにアンパック
- 日本語化した lh2 ファイルは一部共通のため、DS3JP1080.exe フォルダと DS2JP720br.exe フォルダに格納(DS2JP720.exeフォルダにはなし)
- 関連項目
- FavBinEdit フォルダについて
- dds(Noesis でエクスポートしたフォントテクスチャ)・inf(文字コード+座標 → この記事では便宜上グリフデータと定義)・lh2(ID、オフセット、テキストデータ)・tg4h(テクスチャヘッダー)各ファイルのフォーマットをバイナリエディタ FavBinEdit で解析したウォッチデータ(~.FavBinEdit-W)を格納
- 関連項目
- GlyphData フォルダについて
- inf ファイルのグリフデータ(バイナリ)の一部(座標)を 秀丸エディタ の置換機能を使ってカンマ区切りのテキストデータ作成
- Excel ファイルでカンマ区切りのグリフテキストデータをインポート、座標データ 16進数 → 10進数に変換
- 関連項目
- noesisv446 フォルダについて
- Noesis と tex_DeadSpace123_PC_PS3_X360_tg4h.py(要ログイン)を使って、フォントファイル tg4h と tg4d から dds と png 形式ビットマップフォントファイルをエクスポート
- エクスポートした dds ファイルの実態は dds ヘッダー(128バイト)+ tg4d ファイルのファイル結合
- DS2JP720.exe と DS2JP720br.exe の tg4h(テクスチャヘッダー)ファイルと tg4d(テクスチャデータ)ファイルは共通のため、DS2JP720.exe フォルダのみ格納(DS2JP720br.exe フォルダにはなし)
- 関連項目
- str_unpack フォルダについて
- text_assets_global.str、f40cc683.str をアンパックしたファイルを格納
- text_assets_global_unpacked フォルダ(inf・tg4d・tg4h フォントファイル)と f40cc683_unpacked フォルダ(lh2 字幕ファイル)
- 日本語化ファイルについてはオリジナル(English フォルダ)と差分があるファイルのみ抽出、重複ファイルは除外
- 日本語化した lh2 言語ファイルは解像度関係なく共通(同じテキストデータ)
- オリジナル viv アンパック → オリジナル str アンパック → 日本語化 lh2・inf・tg4d・tg4h ファイル差し替え → str リパック → viv リパックの順序で日本語化可能
- 関連項目
- copy_b-DDSHeader-tg4d-Output-DDS-Image.bat ファイルについて
- DDSHeader フォルダの dds ヘッダーファイルと str_unpack フォルダの tg4d ファイルを、
copy /b
コマンドでファイル結合して dds ファイルを作成するバッチファイル - バッチファイル実行後、temp フォルダが作成されて dds ファイルを生成
- DDSHeader フォルダの dds ヘッダーファイルと str_unpack フォルダの tg4d ファイルを、
~.DAT ファイルアンパック方法
DEAD SPACE 2 の~.DAT ファイルをアンパックする方法です。DEAD SPACE 3 の ~.viv ファイルをアンパックする方法とほぼ同じ 3つの方法でアンパック可能です。
特に理由がなければ 2つ目に紹介する Gibbed's Visceral Big Viewer でアンパックする方法がかんたんでしょう。
1つ目の方法は DS3 アンパック・リパックキット の init_repack.bat 実行 でアンパックしたい場合、init_repack.bat ファイルを以下のバッチスクリプトに書き換えて ~.DAT ファイルをドラッグ&ドロップすることでアンパックできます。
書き換え前の init_repack.bat ファイル との違いについては WinMerge で比較してみてください。
Gibbed's Visceral Big Viewer 画面で左上にあるドロップダウンリストで Dead Space 2 を選択 後、Open ボタンをクリックしてアンパック対象の DS2DATx.DAT ファイルを開きます。
ツリーリストに Unknown の数値が 105 の状態かつ、Known 以下に 3つのフォルダ名(audiostreams、text_assets、text)が表示されていることを確認して、Save All ボタンをクリックして任意の場所にアンパックします。
以下のバッチスクリプトの引数では DS2DAT0.DAT をしているので、別の DAT ファイルをアンパックしたい場合は、アンパック対象のファイル名にあわせて書き換えます。
引数にアンパック先フォルダ(このバッチスクリプトでは DS2DAT0)を指定しないと、ルートドライブにアンパックされるため注意してください。
Gibbed.Visceral.BigUnpack.exe -p="Dead Space 2" DS2DAT0.DAT DS2DAT0
pause
作成したバッチファイル実行後にコマンドプロンプト画面が表示されてアンパック処理開始~完了です。
作成したバッチファイルによる DAT ファイルアンパック処理完了後、ds3jp_repack_kit_ver.0.5 フォルダ内に生成された DS2DAT0 フォルダ(バッチスクリプトの引数で指定したもの)です。このフォルダにアンパックしたファイルが含まれます。
アンパックした DS2DAT0.DAT ファイル比較(オリジナル版と日本語化ファイル)
こちらの画像はオリジナル版と日本語化ファイル(DS2JP1080.exe)を適用した DS2DAT0.DAT ファイルをアンパック した後、WinMerge で比較した結果です。
text_assets フォルダの text_assets_global.str ファイル(ビットマップフォント)と text_assets\text
フォルダの f40cc683.str(オリジナルは英語テキスト)ファイルに差分がある形となっています。
残りの差分ファイルは日本語化したファイルデータの終端に連続した 00
データを付加したのみです。おそらく、ツールによるリパック時に付加されたものと思われます。
日本語化ファイル DS2JP1080.exe と DS2JP720.exe を適用した DS2DAT0.DAT ファイルをアンパック した後、WinMerge で比較した結果です。
text_assets フォルダの text_assets_global.str ファイル(ビットマップフォント)のみ差分がある形となっています。
このことから日本語化ファイル DS2JP1080.exe と DS2JP720.exe では text_assets\text
フォルダにある f40cc683.str(日本語テキスト)ファイルは同じものを使用していることになります。
日本語化ファイル DS2JP720.exe と DS2JP720br.exe を適用した DS2DAT0.DAT ファイルをアンパック した後、WinMerge で比較した結果です。
こちらは text_assets フォルダの text_assets_global.str ファイル(ビットマップフォント)と text_assets\text
フォルダの f40cc683.str(オリジナルは英語テキスト)ファイルに差分がある形となっています。
このことから日本語化ファイル DS2JP720br.exe では text_assets\text
フォルダにある f40cc683.str(日本語テキスト)ファイルは、DS2JP1080.exe と DS2JP720.exe とは異なるテキストファイルを使用していることになります。
~.DAT ファイルリパック方法
DEAD SPACE 2 の~.DAT ファイルをリパックする方法です。DEAD SPACE 3 の ~.viv ファイルをアンパックする方法とほぼ同じ 2つの方法でリパック可能です。
1つ目の方法は DS3 アンパック・リパックキット の pack_all.bat 実行 でリパックしたい場合、pack_all.bat ファイルを以下のバッチスクリプトに書き換えて実行することでリパックできます。
この方法でリパックする条件として事前に DS3 アンパック・リパックキット init_repack.bat ファイル書き換え方法 でアンパックした DS2DAT0.DAT ファイルのみとなっています。
書き換え前の pack_all.bat ファイル との違いについては WinMerge で比較してみてください。
コマンドプロンプト画面が表示されてリパック処理完了後、リパック対象フォルダと同じフォルダ内にリパックされた viv ファイルが生成されますので、拡張子を DAT に変更します。
上記どちらかの方法でリパックした場合、DAT ファイル名はドラッグ&ドロップした時のフォルダ名のままとなりますので、元の DAT ファイル名と違う場合はリネーム(名前変更)で修正します。リパック後の DAT ファイルのリネーム作業をしないようにするには、リパックする前にフォルダ名をあらかじめ変更することになります。
~.str ファイルアンパック方法
DEAD SPACE 2 の~.str ファイルをアンパックする方法です。
DEAD SPACE 3 の~.str ファイルをアンパックする方法(cbdf7f70.str ファイルアンパック方法、text_assets_global.str(ビットマップフォントファイル内包)ファイルアンパック方法)と同じ方法でアンパック可能です。
ds3jp_repack_kit_ver.0.5 フォルダにある strunpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrUnpack.exe ファイルに ~.str ファイルをドラッグ&ドロップすることでアンパックできます。
0000_deadspace2_global.en.lh2 ファイルアンパック・リパック方法
DEAD SPACE 2 の 0000_deadspace2_global.en.lh2 ファイルをアンパック・リパックする方法です。
0000_deadspace2_global.en.lh2 ファイルの csv ファイルへのアンパック方法は 2つあります。
1つ目は DEAD SPACE 3 の 0000_ds3_global.en.lh2 → csv ファイルアンパック方法 と同じ方法で、ds3strings_v1_3_0 フォルダにある lh2_unpack.bat ファイルに 0000_deadspace2_global.en.lh2 ファイルをドラッグアンドドロップする方法です。
もう 1つの方法は ds3jp_repack_kit_ver.0.5\tools\ds3strings フォルダに 0000_deadspace2_global.en.lh2 ファイルを配置して、以下の bat ファイルを作成(ファイル名は任意)して実行する方法 です。
アンパックされた csv ファイルにテキストデータがあるので、テキストエディタ(文字コード UTF-8)で編集できるようになります。
ds3strings.exe -u 0000_deadspace2_global.en.lh2 0000_deadspace2_global.en.csv
pause
csv ファイルから 0000_deadspace2_global.en.lh2 ファイルへのリパック方法も 2つあります。
1つ目は DEAD SPACE 3 の csv → 0000_ds3_global.en.lh2 ファイルリパック方法 と同じ方法で、ds3strings_v1_3_0 フォルダにある lh2_pack.bat ファイルに csv ファイルをドラッグアンドドロップする方法です。
もう 1つの方法は ds3jp_repack_kit_ver.0.5\tools\ds3strings フォルダに csv ファイルとアンパック時に生成された dat ファイルがある状態で、以下の bat ファイルを作成(ファイル名は任意)して実行 してリパックする方法です。
どちらの方法でもアンパック時に生成された dat ファイルがないとリパックできない点に注意してください。
ds3strings.exe -p 0000_deadspace2_global.en.csv 0000_deadspace2_global.en.lh2
pause
上の画像は csv ファイルに適当な字幕内容に編集後、ゲーム内で字幕編集個所を表示させたスクリーンショットです。編集した字幕がゲーム内で正常に表示されていることが確認できます。
やり方は csv から lh2 ファイルにリパックした 0000_deadspace2_global.en.lh2 ファイルを、アンパックした f40cc683.str ファイル に含まれている元の lh2 ファイル と差し替えて f40cc683.str ファイルにリパック。
f40cc683.str ファイルにリパック したファイルを、アンパックした DS2DAT0.DAT ファイル に含まれている元の str ファイル と差し替えて DS2DAT0.DAT ファイルにリパック 後、ゲームインストール先にある DS2DAT0.DAT ファイルと差し替えています。
~.str ファイルリパック方法
アンパックした ~.str のファイル・フォルダ をリパックする方法です。
DEAD SPACE 3 と同じ方法で ds3jp_repack_kit_ver.0.5 フォルダにある strpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrPack.exe ファイルに、アンパックした ~.str ファイルのフォルダをドラッグ&ドロップすることでリパック できます。
アンパックした text_assets_global.str ファイル比較(オリジナル版と日本語化ファイル)
こちらの画像はオリジナル版と日本語化ファイル(DS2JP1080.exe)を適用した DS2DAT0.DAT ファイルをアンパック した後、さらに双方の text_assets フォルダにある text_assets_global.str ファイルをアンパック したものを WinMerge で比較した結果です。
FFN・tg4d・tg4h 各フォルダにある russellsquare32 と eurostileltstdbold32 のファイル名があるファイルに差分がある形となっています。
日本語化ファイル DS2JP1080.exe と DS2JP720.exe を適用した DS2DAT0.DAT ファイルをアンパック した後、さらに双方の text_assets フォルダにある text_assets_global.str ファイルをアンパック したものを WinMerge で比較した結果です。
FFN・tg4d・tg4h 各フォルダにある russellsquare32 のファイル名があるファイルに差分がある形となっています。
このことから日本語化ファイル DS2JP1080.exe と DS2JP720.exe では eurostileltstdbold32 のファイル名があるファイルは、双方とも同じファイルを使用していることになります。
日本語化ファイル DS2JP720.exe と DS2JP720br.exe を適用した DS2DAT0.DAT ファイルをアンパック した後、さらに双方の text_assets フォルダにある text_assets_global.str ファイルをアンパック したものを WinMerge で比較した結果です。
FFN フォルダにある 0512_russellsquare32.inf と 0513_eurostileltstdbold32.inf ファイル名があるファイルに差分がある形となっています。
このことから日本語化ファイル DS2JP720.exe と DS2JP720br.exe では tg4d・tg4h 各フォルダにある russellsquare32 と eurostileltstdbold32 のファイル名があるファイルは、双方とも同じファイルを使用していることになります。
PC ゲーム DEAD SPACE(2008)日本語化ファイル解析メモとアンパック・解析データ公開
PC ゲーム DEAD SPACE(2008)日本語化ファイルの解析内容とアンパック・解析データ PC ゲーム DEAD SPACE(2008)日本語化ファイル解析データ(2022年1月30日版)DS1_ENJP_parse.7z ファイル を公開します。
解析データのフォーマットや解析方法などは DEAD SPACE 3 と DEAD SPACE 2 とほぼ同じ内容が多く、説明内容に重複する部分があります。大きな違いとしてはアーカイブファイル(~.viv、~.DAT)がないため、アンパック・リパックは str ファイルのみで完結するところです。
ちなみに 2017年の過去ログ(過去ログ 1、過去ログ 2)に初代 DEAD SPACE に関する日本語化テキストおよびフォントに関するやり取りが残っています。
過去ログにあるレス内容の URL に、Dead Space 関連日本語化(リパック版)アップローダ にある日本語化ツール(2013年公開)より新しいバージョンと思われるツールやデータが公開されていたようですが、すべて期限切れのためかどれもダウンロードすることはできませんでした。
そのため 2022年3月時点では、2017年7月のレスを最後に更新していたと思われるツールやデータは公開されていないままとなっているようです。
解析ファイル内容については以下のリストにまとめました。解析データについては各セクションで説明します。
- DS1_ENJP_parse.7z に格納されている English、DS1JP720.exe、DS1JP720br.exe、DS1JP1200.exe、DS1JP2160.exe 各フォルダについて
- 各フォルダに日本語化パッチ適用前(English フォルダはオリジナル)・適用後(解像度別に DS1JP720.exe、DS1JP720br.exe、DS1JP1200.exe、DS1JP2160.exe フォルダに分類)のデータ抽出と解析データを格納(一部を除き、言語別・解像度別の重複データは除外)
- DDSHeader フォルダについて
- Noesis でエクスポートした dds ファイルから dds ヘッダー(先頭アドレスから 128 バイトまで)をコピーして作成したバイナリファイル(拡張子なし)
- 関連項目
- ds3strings フォルダについて
- ds3strings を使って lh2 言語ファイルから csv ファイルにアンパック
- 日本語化した lh2 ファイルは一部共通のため、DS1JP720br.exe フォルダと DS1JP1200.exe フォルダに格納(DS1JP720.exe フォルダと DS1JP2160.exe フォルダにはなし)
- 関連項目
- FavBinEdit フォルダについて
- dds(Noesis でエクスポートしたフォントテクスチャ)・inf(文字コード+座標 → この記事では便宜上グリフデータと定義)・lh2(ID、オフセット、テキストデータ)・tg4h(テクスチャヘッダー)各ファイルのフォーマットをバイナリエディタ FavBinEdit で解析したウォッチデータ(~.FavBinEdit-W)を格納
- 関連項目
- GlyphData フォルダについて
- inf ファイルのグリフデータ(バイナリ)の一部(座標)を 秀丸エディタ の置換機能を使ってカンマ区切りのテキストデータ作成
- Excel ファイルでカンマ区切りのグリフテキストデータをインポート、座標データ 16進数 → 10進数に変換
- 関連項目
- noesisv446 フォルダについて
- Noesis と tex_DeadSpace123_PC_PS3_X360_tg4h.py(要ログイン)を使って、フォントファイル tg4h と tg4d から dds と png 形式ビットマップフォントファイルをエクスポート
- DS1JP720br.exe の 0014_serpentinebold32.tg4h ファイルのみ 2か所のバイナリデータ(ファイルサイズ)が正しくないため、修正した 0014_serpentinebold32.tg4h ファイルを使ってエクスポートした dds・png ファイルを fix フォルダに格納(tg4h ファイルにある tg4d ファイルサイズのバイナリデータが正しくない場合 Noesis で画像ファイルが正常にエクスポートできない)
- エクスポートした dds ファイルの実態は dds ヘッダー(128バイト)+ tg4d ファイルのファイル結合
- 日本語ビットマップフォントは一部残して残りの重複分は除外
- 関連項目
- str_unpack フォルダについて
- text_assets_global.str、6B0631DC.str をアンパックしたファイルを格納
- text_assets_global_unpacked フォルダ(inf・tg4d・tg4h フォントファイル)と 6B0631DC_unpacked フォルダ(lh2 字幕ファイル)
- 日本語化ファイルについてはオリジナル(English フォルダ)と差分があるファイルのみ抽出、重複ファイルは除外
- 日本語化した lh2 言語ファイルは解像度関係なく共通(同じテキストデータ)
- DS1JP720br.exe の 0014_serpentinebold32.tg4h ファイルのみ 2か所のバイナリデータ(ファイルサイズ)が正しくないため、fix フォルダに修正した 0014_serpentinebold32.tg4h ファイルを格納(tg4h ファイルにある tg4d ファイルサイズのバイナリデータが正しくない場合、Noesis で画像ファイルが正常にエクスポートできない)
- オリジナル viv アンパック → オリジナル str アンパック → 日本語化 lh2・inf・tg4d・tg4h ファイル差し替え → str リパック → viv リパックの順序で日本語化可能
- 関連項目
- text_assets フォルダについて
- オリジナル版と日本語化した text_assets_global.str と 6B0631DC.str(英語・日本語化)格納
- copy_b-DDSHeader-tg4d-Output-DDS-Image.bat ファイルについて
- DDSHeader フォルダの dds ヘッダーファイルと str_unpack フォルダの tg4d ファイルを、
copy /b
コマンドでファイル結合して dds ファイルを作成するバッチファイル - バッチファイル実行後、temp フォルダが作成されて dds ファイルを生成
- DDSHeader フォルダの dds ヘッダーファイルと str_unpack フォルダの tg4d ファイルを、
~.str ファイルアンパック方法
DEAD SPACE の ~.str ファイルのアンパック方法は、DEAD SPACE 3 本編の str ファイルアンパック方法(cbdf7f70.str(lh2 言語ファイル内包)ファイルアンパック方法、text_assets_global.str(ビットマップフォントファイル内包)ファイルアンパック方法)と同じやり方でアンパックできます。
0000_deadspace_global.en.LH2 ファイルアンパック・リパック方法
DEAD SPACE の 0000_deadspace_global.en.LH2 ファイルをアンパック・リパックする方法です。
0000_deadspace_global.en.LH2 ファイルの csv ファイルへのアンパック方法は 2つあります。
1つ目は DEAD SPACE 3 の 0000_ds3_global.en.lh2 → csv ファイルアンパック方法 と同じ方法で、ds3strings_v1_3_0 フォルダにある lh2_unpack.bat ファイルに 0000_deadspace_global.en.LH2 ファイルをドラッグアンドドロップする方法です。
もう 1つの方法は ds3jp_repack_kit_ver.0.5\tools\ds3strings フォルダに 0000_deadspace_global.en.LH2 ファイルを配置して、以下の bat ファイルを作成(ファイル名は任意)して実行する方法 です。
アンパックされた csv ファイルにテキストデータがあるので、テキストエディタ(文字コード UTF-8)で編集できるようになります。
ds3strings.exe -u 0000_deadspace_global.en.LH2 0000_deadspace_global.en.csv
pause
csv ファイルの 0000_deadspace_global.en.LH2 ファイルへのリパック方法も 2つあります。
1つ目は DEAD SPACE 3 の csv → 0000_ds3_global.en.lh2 ファイルリパック方法 と同じ方法で、ds3strings_v1_3_0 フォルダにある lh2_pack.bat ファイルに csv ファイルをドラッグアンドドロップする方法です。
もう 1つの方法は ds3jp_repack_kit_ver.0.5\tools\ds3strings フォルダに csv ファイルとアンパック時に生成された dat ファイルがある状態で、以下の bat ファイルを作成(ファイル名は任意)して実行 してリパックする方法です。(アンパック時に生成された dat ファイルがないとリパックできない点に注意)
どちらの方法でもアンパック時に生成された dat ファイルがないとリパックできない点に注意してください。
ds3strings.exe -p 0000_deadspace_global.en.csv 0000_deadspace_global.en.LH2
pause
上の画像は csv ファイルに適当な字幕内容に編集後、ゲーム内で字幕編集個所を表示させたスクリーンショットです。編集した字幕がゲーム内で正常に表示されていることが確認できます。
やり方は csv から lh2 ファイルにリパックした 0000_deadspace_global.en.LH2 ファイルを、アンパックした 6B0631DC.str ファイル に含まれている元の lh2 ファイル と差し替えて 6B0631DC.str ファイルにリパック 後、ゲームインストール先 text_assets\text
フォルダにある同名の 6B0631DC.str ファイルと差し替えます。
~.str ファイルリパック方法
アンパックした ~.str のファイル・フォルダ をリパックする方法です。
DEAD SPACE 3 と同じ方法で ds3jp_repack_kit_ver.0.5 フォルダにある strpack.bat ファイル、もしくは ds3jp_repack_kit_ver.0.5\tools\gibbed.visceral
フォルダにある Gibbed.Visceral.StrPack.exe ファイルに、アンパックした ~.str ファイルのフォルダをドラッグ&ドロップすることでリパック できます。
アンパックした text_assets_global.str ファイル比較(オリジナル版と日本語化ファイル)
こちらの画像はオリジナル版と日本語化ファイル DS1JP1200.exe を適用した text_assets_global.str ファイルをアンパック した後、WinMerge で比較した結果です。
FFN・tg4d・tg4h 各フォルダにある russellsquare32・briemakademistdsemibold32・serpentinebold32・eurostileltstdbold32・rotissansserif32 のファイル名があるファイルが、オリジナル版にあるファイルと異なる結果となっています。
FFN・tg4d・tg4h 各フォルダには元々 10つのファイルが含まれていますが、うち 5つのファイルに日本語フォントが組み込まれていることになります。
日本語化ファイル DS1JP1200.exe と DS1JP2160.exe を適用した text_assets_global.str ファイルをアンパック した後、WinMerge で比較した結果です。
FFN・tg4d・tg4h 各フォルダにある russellsquare32 のファイル名があるファイルのみ差分がある形となっています。
このことから日本語化ファイル DS1JP1200.exe と DS1JP2160.exe では FFN・tg4d・tg4h 各フォルダにある briemakademistdsemibold32・serpentinebold32・eurostileltstdbold32・rotissansserif32 のファイル名があるファイルは、同じファイルを使用していることになります。
日本語化ファイル DS1JP1200.exe と DS1JP720.exe を適用した text_assets_global.str ファイルをアンパック した後、WinMerge で比較した結果です。
FFN・tg4d・tg4h 各フォルダにある russellsquare32 のファイル名があるファイルのみ差分がある形となっています。
このことから日本語化ファイル DS1JP1200.exe と DS1JP2160.exe および DS1JP720.exe では FFN・tg4d・tg4h 各フォルダにある briemakademistdsemibold32・serpentinebold32・eurostileltstdbold32・rotissansserif32 のファイル名があるファイルは、同じファイルを使用していることになります。
日本語化ファイル DS1JP720.exe と DS1JP720br.exe を適用した text_assets_global.str ファイルをアンパック した後、WinMerge で比較した結果です。
FFN・tg4d・tg4h 各フォルダにある briemakademistdsemibold32・rotissansserif32・serpentinebold32 ファイルと、FFN フォルダにある 0105_russellsquare32.inf・0108_eurostileltstdbold32.inf のファイル名があるファイルに差分がある形となっています。
このことから日本語化ファイル DS1JP1200.exe と DS1JP2160.exe、DS1JP720.exe と DS1JP720br.exeでは tg4d・tg4h 各フォルダにある russellsquare32・eurostileltstdbold32 のファイル名があるファイルは、同じファイルを使用していることになります。
- PC ゲーム旧版 DEAD SPACE シリーズ(2008~2013)日本語化ファイル解析情報 (現在開いているページ)
- PC ゲーム DEAD SPACE(2008年版)日本語化とゲームプレイ最適化メモ
- PC ゲーム DEAD SPACE 2(2011年版)日本語化とゲームプレイ最適化メモ
- PC ゲーム DEAD SPACE 3(2013年版)日本語化とゲームプレイ最適化メモ
- PC ゲーム ALIEN: ISOLATION 日本語化とゲームプレイ最適化メモ
- PC ゲームの日本語化実現のために役に立つかもしれないローカライゼーション技術情報サイトまとめ
- PC ゲームで使われているゲームエンジンを特定する方法
- PC ゲームが起動しない・安定しない場合に確認と設定したほうがいいかもしれないリスト