2012年12月26日水曜日

The Walking Dead

日本語化リクエスト募集中でリクエストに上がっていた中でSyndicateは海外ゲーム日本語化実験所で、日本語化していたので、自分はThe Walking Deadを調べてみた。

オリジナルのEXEでは、フォントファイルを解析した感じで文字数は255文字固定みたいなので、そのままでは無理と判断。

適当に中文化MODを漁ってみた。中文化は3dmgameとali213のものがあるが、扱いやすそうなのは、ali213の方。一応、ちょっと怖いので、隔離環境でセットアップしたり、デバッグしたり、動作中の状態を軽くチェックした感じでは大丈夫ポイかな。。。

fmodex.dllをいじって独自のdll(ali213.dll)を読み込ませて画面上に文字表示する処理をゴニョゴニョしてるタイプ。

文字コードはEUC_CNで作成していて、少しテストしてみたところ、フォントをEUC-JP用に調整すれば、日本語化できそう。ただ、EUC-JPのフォントテクスチャの作成はかなり面倒くさい。。。。

一応、ちょっとだけ試したゲーム画面。



フォントの調整がまだ必要なのと、テキストもほとんど中国語のままなので、汚いが日本語になった。

2012年12月23日日曜日

tsxbinのシンボルファイルサンプル(upk)

自分がupkのフォーマット確認やupk用のツールの開発の確認用に使っているtsxbinのupkのシンボルファイルの紹介。

元々、公開する予定はなかったが、Adventar Calendarのネタの1つとして紹介することにした。upkのフォーマットに興味を持つ人がどれだけいるのかという疑問はあるが。。。

各ゲームへの対応は自分の気まぐれでやっているので、現状対応しているのは以下の通り。

Unreal Tournament 3
Mass Effect
Alice Madness Returns
Batman Arkham City
Transformers War for Cybertron
BulletStorm
BorderLands
Dishonored

あと、UDKのオリジナルフォーマットには対応しているので、UDKベースの最近のUE3ゲームはあまりカスタマイズもされていないので、そのまま、もしくは、ちょっと変更するだけで対応できると思う。


■使い方
上記ファイルをtsxbinのインストールフォルダにコピーすれば、tsxbinにてupkファイルを読み込めば自動的に適用される。upk自体が圧縮されている場合は、http://www.gildor.org/downloads にある Unreal Package Decompressorで一旦解凍すれば、詳細表示が可能になる。


ちゃんとupkの解説も付けようかと思ったが、あまりに面倒くさいので挫折。



tsxbinのマクロは、CライクではあるがCと全く同じには書けないので、ちょっと回りくどい書き方の部分もあるが、upkのフォーマットを理解したい人には少しは役に立つのかなと思うので、そういう人がいればどうぞ。

とりあえず、これで tsxbin の話はおしまい。

2012年12月21日金曜日

自分も1つやろうかな。

日本語化リクエスト募集

こんなことやってるのか。クリスマスに公開とは忙しそうだ。

最近時間に余裕がないので、クリスマスは無理だけど、選考落ちしたものから1つ選んで自分も日本語化してみようかな。目処は年末くらいで。

tsxbinのシンボルマクロのtips

tsxbinのシンボル用のマクロを作成する際につまづいたり、わかりづらい所を思いつく範囲で紹介。まだ、ありそうだが思い出せないので、また、思い出したら追加するかも。

■ シンボルファイルを編集しているとtsxbinでシンボルが適用されない。
シンボルファイルを編集しながら、tsxbinで確認する際、シンボルファイルをエディタ開きっぱなしにしているとtsxbin上ではマクロが適用されない。エラーも出ないので、わかりづらい。どうせ読込みしかしないので適用されてもいいのではと思うが。。

 ユーザ定義関数を使う場合
定義は一番最後に記述して、メイン処理の最後(関数定義の先頭直前)に必ず return; を書く。書かないと関数部分を実行してしまう。

 ユーザ定義関数の引数の宣言
プロトタイプ宣言や関数の宣言で、void型は必ず明記する必要あり。

■ サイズ0の配列はファイル記述変数では無視される。
サイズ0でファイル記述変数に配列を割り当ててもエラーは出ない(単純に無視される)。

$char text[0];

■ 可変長のデータを持つ構造体をファイル記述変数で扱えない。
構造体っぽく表示させたい場合は、関数でそれっぽく読み込ませて、表示させるしかない。

void ReadStruct(void)
{
   $char StructData.Type[4];
   $int  StructData.Length;
   $int  StructData.Header1;
   $int  StructData.header2;
  
   int textlen = GetCurrentDword();
   $int  StructData.TextLength;
   $char StructData.Text[textlen * 2];
}

■ Int64が使えない。
結構困るが、どうしようもないので、自分はtypedef.hにこんな感じで構造体を追加して使っている。$

struct int64 {
   int L;
   int H;
};


■ ファイル記述変数名にインデックス番号などを後から付与する。
ファイル記述変数の変数名は文字列を作成して実行時に割り当てられる。3行目のファイル記述変数の変数名がstring型の変数varnameになっているが、このような使い方をすると実際のシンボル表示では、var_name_sample_10と表示される。

int a = 10;
string varname = "var_name_sample_" + tostr(a);
$WORD length;
$char varname[length * 2];

■ 今から読み込む文字数を取得する。
文字数情報がデータに入っていないフォーマットでは、たいていNULLが区切りなので、FindByte()でNULLまでのバイト数を取得して文字数を算出する。

int len = FindByte(0);
$char str[len];

FindByte()では探すターゲットまでのデータ長を返すので、ターゲットとして指定したNULLを含める場合は+1する必要がある。

int len = FindByte(0);
$char str_with_null[len + 1];

■ ファイル終了位置の検出
GetFileSize()とGetCurrentOffset()を使う。

while(GetFileSize() > GetCurrentOffset()) {
    ....
}

■ 読み込んだ文字列でファイル判定や処理変更をするような場合
読み込んだ文字の比較を行うことができるFStrCmp()を使う。FStrCmp()では読込ポジションは変更されない。

if(0 == FStrCmp(0, 4, "FNFO"))
{
    ....
} else if(0 == FStrCmp(0, 4, "DLET"))
    ....
} else {
    ....
}

次は、upk用のシンボルファイルを紹介しようかと思う。

2012年12月19日水曜日

tsxbinのシンボル機能

今回は、tsxbinのシンボル機能を使うためのマクロの基本を紹介したい。tsxbinのマクロについては、ネットで探してもあんまり書かれていない。
特にマクロ言語の癖というか仕様的な部分のtipsは見た事ない。今回は基本的なところをまとめてみる。

1)シンボル記述のヘルプ
シンボル自体に関しての説明があまりないので、最初はシンボル≒マクロだとわからず、ヘルプも何を見ればいいのか自分はわからなかった。
実際にはシンボル表示に使用するのはマクロそのものなので、マクロのヘルプを見ればほぼわかる。ただし、マクロヘルプはtsxbinのメニューの「ヘルプ」にはなく、「マクロ」の中の「マクロヘルプ」を開く。
ヘルプを一通り読めば、Cを知っている人や実際に解析している人だったらすぐ使えるようになるだろう。

2)言語仕様概略
  • 演算子仕様、typedef、フロー制御文なんかは概ねC準拠。
  • 変数は、char、int、short、long、float、double、stringが利用できる。unsignedも利用可能。
  • 配列は1次元配列のみ。構造体も定義可能。
  • プリプロセッサでエンディアン指定ができる。
  • ループ処理は最大数が決まっていて、増やしたい場合はプリプロセッサで指定。
  • 関数はヘルプに記載されているものしか使えない。
  • ユーザ定義関数も利用可能。
詳しくはヘルプ参照のこと。

3)シンボルファイル
エディタ上でシンボル表示を可能にするシンボルファイルは、tsxbinインストールフォルダ内に、拡張子SYMというファイル名で作成する。
この時ファイル名に対象ファイルの拡張子をそのままつけると、対象ファイルを読み込んだ時に自動的に対象となるシンボルファイルを適用してくれる。
例えば、*.dat というファイルのシンボルを dat.sym というファイルでtsxbinのフォルダに作成しておけば、.datファイルを読み込むと毎回自動的にdat.symを適用してくれる。

4)ファイル記述変数
シンボルを利用する場合に一番利用するもの。このファイル記述変数をマクロに書くとその宣言部分で読み込んだデータを指定された型に従ってエディタの画面上で表示する。
記述の仕方は、通常の変数宣言文の型名に「$」をつけるだけ。例えば、次のようなint変数をファイル記述変数として宣言する。
$int Magic;
上記のように宣言すると、対象ファイルの現在の位置から型分のデータを読み込んでエディタ上で表示され、読み込んだ分ファイルの位置が進む。また、宣言後は、普通に読み出し専用変数のとしても利用できる。例えば以下のような感じ。

$int Magic;
if (Magic == 1) {
    $int Version;
} else {
    $int Unknown;
}
ただし、通常の変数宣言では、同じスコープ内で同名の変数を複数回宣言することはできないが、ファイル記述変数ではシンボル表示をしたいところで何回も同じ名前で宣言することが可能。変数として使用した場合は、最後のファイル記述変数の宣言時の値が使用される。

5)関数
関数は、ファイル記述変数として読み出すポジションを必要としたり、読み出す文字数を先に確認するなどのためにファイルアクセス系の関数を比較的よく使う。関数で読み出した場合は、ファイルの読み出しポジションは変わらないので関数を使用してもその後のファイル記述変数には影響しない。

6)サンプル
Baldur's Gateのtlkファイルのフォーマットをシンボルファイルで作成するとこんな感じ。(以前BGEEの二有志翻訳の人がツールを探してたときに作成したもの)

// tlk file for Baldur's Gate
#maxloop 100000

struct Entry
{
 short Type;
 char  Resource[8];
 int   Volume;
 int   Pitch;
 int   Offset;
 int   Length;
};

$char magic[4];
$char version[4];

$short LangID;
$int Count;
$int Offset;

$Entry entry[Count];

for(int i = 0; i < Count; i++)
{
 if(entry[i].Length > 0)
  $char String[entry[i].Length];
}

短いけど、構造体やループなどが入っているので分かりやすいかなと思う。tsxbinで実際にdialog.tlkに適用するとこうなる。



次は、マクロ作成時のtips的なことを書くかも。

2012年12月17日月曜日

tsxbinの紹介

ゲーム日本語化 Advent Calendar 2012に参加してみたので、なんか書こうという事で日頃解析に使っているツールを紹介する。

自分は、リソースファイルを解析のツールとして、tsxbinというバイナリエディタを活用している。
tsxbinは、こちら(http://www.net3-tv.net/~m-tsuchy/tsuchy/index.htm)で公開されているバイナリエディタ。

最大の特徴は、Cライクなマクロ言語を実装し、マクロでシンボルファイルを作成することによって、エディタ上のデータ表示をシンボルで定義された形式に変更することができる。
最近自分が作成したツールのPrototype2のp3dファイルのシンボルを例に挙げると、普通のバイナリエディタではこんな感じだが、


シンボルファイルを定義するとこんな感じになる。



マクロを組みながら、少しずつフォーマット確認を行うことができるので、バイナリエディタ上でフォーマット確認&ツール作成なんかに比べると、段違いに効率的になる。
また、自作ツールをrepackしたものをtsxbinでフォーマット確認するなど、デバッグツールとしても使える。

それ以外にもバイトオーダー、型表示(BIT,HEX,SIGN,UNSIGN)、バイナリレベルでの差分比較なんかの機能も便利だ。マクロと組み合わせて使いこなせば解析がぐっと楽になる。
ただ、ちょっと不便なところもある。

  • マクロファイルをテキストエディタで開いているとtsxbinでシンボルが適用されない。エラーも出ない。
  • 文字コードがSJISとUNICODEしか対応してない。
  • Int64に対応していない。
  • 複雑なマクロを組むとちょっと遅くなる。
  • バイナリ差分比較が大きなファイルだと遅い。。

更新が行われなくなってずいぶん経っているが、上記あたりが改善されるととてもうれしいなあ。。。

次は、tsxbinのシンボルの作成について気が向いたら書くかも。

Prototype2 ゲーム中字幕unpack/repackツール

Prototype2の日本語化で、ゲーム中の字幕が既存ツールでは書き換えられないとのことだったのでツールを作成。使い方は同梱のreadme見てください。


対象となるファイルは、audio_german.rcfに含まれているが、1ファイル1文という形式で、字幕文が空のものを除いても、3000ファイル以上ある。ツールでは、空文ファイルは処理から除外している。

repackしたものを配布すると膨大な数&それなりのサイズになるので、ゲームフォルダにてrepackを実行して利用者が各自書き換えを行う方がよさそう。一応、そういう想定でツールも作成してみた。

2012/12/31更新: ツールに一部のファイルで問題があったので修正。

2012年12月4日火曜日

Prototype2

2chのprototypeスレで日本語化が完成していた。現状のフォントでは不足文字があるようなので、製作者殿に感謝しつつ、フォントを作成してみた。
prototype2は、フォントファイルのサイズに制限があり、1044KB以内に抑えないとゲームが正常に起動しない。
元々のIPAゴシックだと不足文字を追加するとどうやっても1044KBを超えるため、いくつかフォントを試した結果、MigMixのレギュラーとボールドに変更することでサイズ問題を回避。

prototype2_jpfont_1.1.zip

12/5更新 文字追加で新しいフォントを作成するための手順とファイルを追加。
2/24更新 新しいフォントをこっちで公開。

2012年9月16日日曜日

Dark Souls

60fps化のmodがでた。

NKDS0.1 http://www.mediafire.com/?lv71uu81tozzk8x

exe自体を一部改変するためGfWLのコードプロテクションに引っかかる。付属のxlive.dllではオフラインモードでしか動作しない。
GTAIVのasiloaderを使えば、オンラインモードでも動作する。alexander.sannybuilder.com で公開されている ASILoaderとGFWL Protect Disablerを付属のxlive.dllの変わりに導入すれば60fpsでオンラインモードでプレイできた。

DSfixとはv0.8 - v1.2であれば動作すると作者のNkwsがコメントしている。実際dsfix v1.2では問題なく動作した。30fpsでやってたときは気にならなかったが、60fpsにしてみると、もう30fpsには戻れない気がしてきた。。

2012年7月22日日曜日

Shoot Many Robots (2)

日本語化のページ。


gfx <-> swfのヘッダ書換えは簡単だがエディタで毎回行うのは面倒だし、よく忘れるのでコマンド作成。

2012年7月19日木曜日

Shoot Many Robots

セールで購入したので試してみた。





.sarのunpack/repackは、http://www.nullsecurity.org/unpakke のUnpakkeというツールが対応している。Unpakke本体とupkk_sar.dll、それと、zlib1.dllが必要。zlib1.dllは http://sourceforge.net/projects/libpng/files/zlib/1.2.5/zlib125-dll.zip/download からダウンロードして中に入っている zlib1.dll をUnpakkeを展開したフォルダにコピーする。

テキストは、PC_Config.sarのLocフォルダに通常のテキストファイルで含まれていた。日本語化する場合は、UTF-8で保存する。

フォントは、PC_UI.sarのUIフォルダ内のfont_latin.gfxとgfxfontlib.gfxの2つ。普通のScaleformのFlashフォントなので、日本語フォントで作り直せばOK。

2012年7月5日木曜日

Jagged Alliance Back in Action (2)

日本語表示できた。




場所によってフォントが大きすぎる部分があるので要調整。

メッセージ部分は、単語単位でスペースの箇所で改行調整されるため、日本語でも適時スペースを埋め込むか、文字数をそろえて改行を埋め込むかのいずれかを行わないと文章が改行せず画面からはみ出す。

2012年6月24日日曜日

Arx Fatalis

GOGのPromoで安くなっていたので購入。
pakのツールを作ってみた。

arxpak tool

あと、Arx Fatalisはソースが公開されていて、そのソースを元に色々修正しているプロジェクト Arx Libertatis があるので、それを利用すると最近のOSや解像度でも問題なく遊べる。

Arx libertatisなら、インストールフォルダにmiscフォルダがあり、中にフォントが入っている。arx_default.ttf を別のフォントで置き換えれば、好きなフォントに変更可能。日本語フォントにしておけば日本語も表示できる。

日本語のデモ版を使って、英語版のデータとマージすれば日本語化も可能。テキストはほとんど問題ないが、音声は、英語版だとwavファイルが1999あるが、デモ版では1065しかなく、おそらく一部英語のままになると思われる。


2012年6月15日金曜日

King Arthur II

steam版は現状日本語が選択できるが、DLCは日本語を選択していると最初の部分の音声やテキストが全く表示されないっぽい。
英語データを抜き出して日本語データの不足分を補うと英語でならプレイ可能。

確認を兼て、英語データの移行用バッチ/テキストパッチと、(もしものための)日本語データバックアップバッチ作った。

kaii_tool.zip

2012年5月21日月曜日

Diablo3 (3)

http://honyaku.kyotolog.net/Entry/276/ で、日本語化しても反映されないとのことだったので、ちょっとだけ確認。

現状(たぶんLauncherだと思うが)、全てのファイルの整合性を毎回チェックしている模様。
なので、変更しても、起動後の整合性チェックで、オリジナルのファイルに書き戻されている。

ということで、LauncherかDiabloIII.exeかどっちかわからないが、毎回の整合性チェック処理を停止するか迂回させるなどの方法を取らないとならず、単純なデータ改変では無理っぽい。

プログラムの改変で対応するとなると、見つかったらBAN濃厚だろうなあ。。。

2012年5月18日金曜日

Diablo3 (2)

Diablo3のstlファイル用のUnpack/Repackツール

StlTool

利用する場合は、MPQ Editorで全てのアップデートMPQを含めた状態でExtractしたSTLファイルを利用すると最新版を利用できる。

Diablo3の標準フォントで日本語が含まれないフォントを日本語フォントに置き換えるためのfntファイルも作成。使い方はreadme.txtを確認。

Diablo3日本語フォント

なお、Diablo3はMOD禁止を、下記原文の通り、明確に禁止しているので、MPQファイルを改変したことでBAN等になっても、こちらでは責任とれませんので、使用は自己責任で。

“For a variety of gameplay and security reasons, we will not be supporting bots or mods in Diablo III, and they’ll be expressly prohibited by our terms of use for the game.”

2012年5月16日水曜日

Diablo3

MPQファイル
MPQファイル自体は、http://www.zezula.net/en/mpq/download.htmlで公開されているMPQ EditorでUnpack/Packが可能。

フォントについて
ClientData.mpqのFontフォルダ内のfntファイルで、フォント自体は、TrueType。ヘッダ204バイトを削って、拡張子を.ttfで保存すると通常のフォントファイルとして確認可能。
Axe Bad Data、SanSerifには、日本語フォントもきちんと含まれている模様。Serifは、中国語フォントで日本語も含まれているが、抜けあり。
ExocetLightはDiabloで昔から使われているフォントで、こちらはASCIIのみ。言語を英語で選択した状態で日本語化するには、画面のフォント設定をいじるか、フォントを差し替えるかする必要がある。現実的にはフォント差し替え。
中国語に言語を変更すると、フォントはzhTW_Text.mpqのFontフォルダに含まれていて、ExocetLight、Script、Serifが含まれている。やはり、日本語も含まれているものの抜けあり。

テキストについて
言語ごとのXXXX_Text.mpqに全てのテキストが含まれている。英語の場合は、enUS_Text.mpqで、中国語だとzhTW_Text.mpq。ただし、カットシーンについては、別ファイルでXXX_Text.mpqかXXXX_Cutscenes.mpqのどちらかに含まれている。
ファイルは、カットシーンが*.sbtで、それ以外が*.stl。どちらもUTF-8。
STLファイルは、フォーマット自体はすでにd3inferno.comで紹介されているので(http://d3inferno.com/StringList.html)、Unpackerは作った。まだ、整理してないので整理したらアップ予定。
SBTは、カットシーンの字幕で、BOM付のUTF-8テキストファイル。

パッチについて
STLについて、アップデートパッチで内容が更新されると、パッチファイルにSTLの修正が入るが、これが差分更新で、最初に追加されるオリジナルのSTLフォーマットとは別物となる。パッチフォーマットは、http://www.zezula.net/en/mpq/patchfiles.htmlに解説あり。
STLでは、bsdiffのカスタマイズ版が使われいる。仕様から考えると、最新のアップデートMPQに、 "COPY"形式で丸ごと差し替えに変更し、最新のSTLやSBTを全部突っ込めばうまくいくはず。(通常は、"BSD0"で更新のあったものだけが追加されている)

その他
レジストリに言語の指定が保存されている。
HKCU\Software\Blizzard Entertainment\D3\Locale

日本語化について
フォントは、ヘッダ204バイトを適当なttfにくっつけた上で、0xBCの4バイトに書き込まれているフォントデータサイズを、変更するフォントデータサイズに書き換えればOKと思われる。
テキストは、MPQ Editorで全てのアップデートを含めた状態でExtractして、STLやSBTを日本語化し、一番新しいアップデートMPQに全部 "COPY" で含めることができればできそうな気がする。

MODについて
そもそもDiablo3ではBlizzardはMODを禁止していて、BANの可能性もあるので、仮に日本語化できたとしても改変したMPQを使うことでBANされるかもしれない。。。というのがあるので、弄る場合は完全自己責任で。。。

2012年5月14日月曜日

Sniper Elite V2 (2)

.enファイルの字幕テキストにも対応させた。.asrファイルは -t1、.enファイルは -t2 をそれぞれオプション指定する形に変更した。

asrテキストファイルUnpack/Repackツール ver1.1

.enファイルでは、waveなどのバイナリデータも一緒にパックされているため、それらを個別に書き出すファイルが生成されるが、pack時はそれらすべて必要なので、一緒のフォルダに保存しておく必要あり。

2013/3/11 AsrTextExtractorを更新しました。最新版はこちら

2012年5月11日金曜日

Anomaly Warzone Earth


Playismでセールだったので、steam版を日本語化できるか試しに買ってみた。



できた。steam実績のメニューが「トロフィー」になってた。

やり方:

  1. 日本語版のファイルをバックアップしておいてsteam版をセットアップ
  2. 日本語版のAnomalyWarzoneEarth.exeとunins000.exeを除いて全部上書きコピー
  3. steam版のフォルダ内のcommon_001.idxとcommon_001.datを削除
ゲーム起動で、日本語が使えるようになる。common_001を削除してるし、日本語版を単に上書きしているだけなので、何か不具合があっても自己責任で。

2012年5月7日月曜日

Sniper Elite V2

Fontsフォルダ内のFonts.asrに、日本語フォントが含まれていた。箱○とかで日本語版が発売するのかわからないが、すでに日本語テキストが完成していて使用している文字のみフォントとして収録されているのか、収録文字が非常に少なく、ひらがなやカタカナでも結構抜けあり。

.asrファイルは、http://www.mediafire.com/?2d5fkbaq7ax4vc6 のAsuraEngineExtractorでUnpack可能。

Textフォルダ内のasrファイルが、ゲームテキストファイル。テキストはUnicode。フォーマット自体はそれほど複雑ではないし、日本語化をトライしている方も結構いるみたいなので、asrテキストファイルUnpack/Repackツールを作ってみた。


吐き出されるCSVファイルの各行は、最終列のテキスト以外は、Repack時に必要なデータなので編集しないようにしてほしい。

(5/9追記)
envsフォルダ内に入っている*.enファイルにも字幕が入っているとのことで、現状*.enは未対応。データ的には、音声と字幕が両方含まれている模様。

2012年4月23日月曜日

scaleformのフォント (2)

Costume Questで日本語フォントの文字間隔がおかしかったので、フォントに関して再度調べた。以前書いたscaleformのフォントに間違いがあった。

DefineFont2やDefineFont3タグで指定されているascent、decent、leadingは基本オリジナルの物をそのまま使う。(置き換える日本語のものを使わない。)

ascentは文字のbaselineから文字の上端までのサイズ、descentは、baselineから文字の下端までのサイズ、leadingは、文字行間のサイズ。




必要に応じて調整する。

2012年4月17日火曜日

Legend of Grimrock (3)

1byteコード対応しかしてないと書いたが間違いだった。LuaJIT自体はUTF-8に対応している。
LoGでは、LuaJIT 2.0.0をそのまま使っており、エンジンとしてはUTF-8が扱える。
ただし、テキスト描画処理部分でマルチバイト処理していないので、バイトコードにコンパイルされたluaスクリプトを書き換えないと日本語は表示できない。

TrueType自体は、日本語フォントに差し替えることができる。




2012年4月14日土曜日

Legend of Grimrock (2)

公式でファイルリストを作成しているスレッドがあった。

http://www.grimrock.net/forum/viewtopic.php?f=3&t=905&start=10

そのリストを使ってunpack/repackできるように更新した。

LoGtool

XentaXにもGUIのツールがあったので、そっちの方が使いやすそうだけど。。。。

どうも、正しいファイル名で展開できたものは、ゲームディレクトリに配置すれば、datより優先的に読むらしいけど、自分はまだ成功していない。

ファイル名が判明したので改めて確認。

luaスクリプトは大半がluaJITでコンパイルされていて、そのコードの中にテキストは直接埋め込まれてた。スタートアップのデベロッパーだし、ハードコードして完成を優先させたってとこだろうか。

レベルデータもコンパイル済みだが、エディタで開くとマップが丸わかりだった。

あと、最初に書いたスレッドでConsoleを取るスクリプトも公開されてた。

2012年4月13日金曜日

Legend of Grimrock

grimrock.datのunpack/repackツール完成したので公開。unpackしたファイルのファイル名が分からないため、現状は、各ファイルに付いていたIDをファイル名、ファイルのヘッダから種別を判定して、拡張子をつけています。

LoGtool

アンパックデータを確認。

ただ、パックされたファイルのオリジナルのファイル名を復元する方法はわからない。たぶん、ファイル名やパスからハッシュを生成してファイルIDとして活用していると思われるが、そもそもファイル名なのかパスなのかリストがないので、確認が難しい。IDが4バイトなのでCRCかと思って試したが合わなかった。

日本語化について現状は難しそう。。。

分かっていること:

  • フォント
    フォントは、tgaファイルのフォントテクスチャを使う形と、TrueTypeフォントをfreetypeライブラリで動的にラスタライズする方式の2つを使っている。
    tgaの方は、メニュー画面等でマウスオーバーで光る凝った文字
    TrueTypeは、オープニングやインベントリなどの各所で使用されている白文字(4種類ある)
  • マルチバイト対応
    基本的に1byteコードにしか対応していない。さらにスクリプト内でASCIIコードを32-127以外弾いている。これはスクリプト修正すれば0-255で問題ないかな。
    スクリプト言語にluaを採用しているが、そもそもluaがマルチバイト対応していない。テキスト描画部分がluaで書かれている。
  • テキスト
    アンパック後のバイナリファイルのあちこちにバラバラに点在している。このファイルをそれぞれアンパックしないとならない。
一応TrueType入れ替えは試したもののエラーで起動せず。ファイルサイズの問題なのかマルチバイトのせいなのかはわからない。
LoGについては、AHはマルチバイト圏へのローカライズは、はなから考えてないんじゃないかという感じに思える。

でも、スクリプトやその他のデータを眺めているとMODについてはいろいろできそうな感じ。マップレイアウトと思われるデータもあった。。

2012年4月6日金曜日

Stacking

~hと~pの2種類のファイルのパック。~hがインデックスで、~pがデータ本体。
データは、非圧縮とzlib圧縮の2種類を使い分け。
~hは今まで見たことがないほど、変態的なフォーマット。
フォントは、scaleform。テキストデータは、UTF-8テキスト。





開発元が同じDouble FineのCostume Questもほぼ同じパッケージ形式で、scaleform採用っぽいので、日本語化可能のはず。

Unpack/Repackツールはほぼ完成。テキストのUnpack/Repackも作ったので公開予定。勢いで翻訳シート作成。

翻訳シート

もう少し、整理できたら https://sites.google.com/site/jpmodfiles/home へ移動。

でも、このゲームほとんど話題にならないな。

Mass Effect (4)

軽量版フォント。

ME1日本語フォント(2012/04/05版)

とにかく、サイズを小さくすればその分軽くなるのは分かったので、文字数を通常使わない第二水準漢字とSFものには使わないだろう漢字をごっそり、削除。

さらにフォントによってもかなりサイズが変わるので、比較的データが小さくなるIPAexフォントのゴシックに変更。

一番小さくなるのはMSゴシックだが、さすがに配布できないので、IPAex版のみ。

ほぼ気にならない状態にするにはサイズで800kくらい。文字数だと2000字。。。無理。

2012年3月2日金曜日

Mass Effect (3)

ようやく日本語表示完了。。。単純にデータ作成時の修正で値を間違えていただけだった。。。
ちゃんとBioSWFファイルを作成してあれば01dd14さんのツールを使えば問題なく起動した。




フォント組み込みも BIOC_Materials.uへの組み込みではなく、単独フォントパッケージで読み込めることが分かったので、フォントパッケージを作った。

ME1日本語フォントパッケージ

readmeにも書いてあるが、日本語フォントを適用するとゲームでの画面切替がはっきり分かるほど重くなる。たぶん、フォントサイズが増えたことにより処理が重くなってしまっているのだと思うが解決方法はわからない。

ただ、これの翻訳は、改めて見てみると量がハンパじゃない。。。

2012年2月22日水曜日

Unreal EditorでUE3のフォント作成

Unreal Tournament3やGears of Warに付属していたUnreal Engine 3用のエディタ。
それぞれのゲームのupkファイルを開いたり、upkファイルを生成したりできるが、他のUE3を使ったゲームは、たいていカスタマイズされていて開けない。FileVersion、EngineVersion、CookerVersionをいじれば開けるものもあるかもしれない。

UnrealEDで、UE3用のビットマップテクスチャフォントを作る。
ちょっと変な操作をするとすぐエディタが落ちて面倒。

■フォント作成手順
  1. Unreal Editor立ち上げ
  2. Font Resourceの選択
    Genericウインドウで、FontのみをResourceとして選択した状態にする。
  3. Font設定
    グレーになったメインウインドウ部分で右クリック、「New Font Imported From TrueType」を選択。
    ・Package: 適当に命名
    ・Name: 生成するフォントにつける名前を指定(ゲーム内で利用されているものと同じ名前にした方が楽)
    ・Options: bCreatePrintableOnly、bEnableAntialiasingをチェックする。
    ・ChooseFont: 利用するフォント、スタイル、サイズなどを指定する。
    ・TexturePageMaxHeight、TexturePageWidth: 生成されるフォントテクスチャの1枚ごとのサイズを指定する。文字数が多くて1枚に収まらない場合は全部の文字が収まるだけの枚数の同じ大きさのテクスチャが生成される。指定できるサイズは、128、256、512、1024、2048、4096など。それ以外の中間サイズを指定するとテクスチャに変なゴミが入ったり、エディタが落ちる。
  4. 文字指定
    テクスチャに含める文字は、3のFont設定画面にていくつかの方法で指定できる。
    ・未指定: ASCII文字のみが勝手に生成される。
    ・Chars: 対象となる文字を直接入力。
    ・UnicodeRange: 対象となる文字をUnicodeの範囲で指定する。こんな感じ: 1100-11FF,AC00-D7AF,3130-318F
    ・CharsFilePath、CharsFileWildcard: 対象とする文字を書きだしたテキストファイルを指定する。CharsFilePathにそのテキストファイルが存在するディレクトリパス、CharsFileWildcardにテキストファイル名を指定。
  5. Font生成
    全て設定完了後、OKボタンを押せば生成される。
  6. 保存
    生成したフォントを右クリックしてSave。デフォルトは、My Documents\My Games\Unreal Tournament 3\UTGame\Unpublished\CookedPCに保存される。
■文字指定方法
一度作ってしまえばOKなこと、編集が簡単なので、CharsFilePath、CharsFileWildcardによるテキストファイル指定が一番使い勝手がいい。
テキストファイルはUnicode。現在使用しているテキストファイルはこれ

■参考
http://udn.epicgames.com/Three/ImportingFontsJP.html

scaleformのフォント

scaleformは、最近のゲームで非常によく利用されているミドルウエア。
Flashで作成したUIをそのままゲームで使用できる。フォントは、Flashの埋め込みフォントとして作成したものを使用する。

gfxのファイルフォーマットはswfとほぼ同一。ただし、ファイルヘッダが独自のものに変更されている。ゲームによっては、swfをそのまま利用するものもあり。

大抵の場合、swf埋め込みフォントを日本語フォントに差し替えることで日本語表示が可能になる。

■必要ソフト

  • swfmill
    http://swfmill.org/
    swfファイルをデコンパイルしたり、デコンパイルして編集したものを再度コンパイルしたするコマンドラインツール。現在の最新版0.3.2は単体では動かないので、0.3.1を使用。

    同じようなものでGUIのSWiX( http://www.swixkit.com/)というツールもあり。こちらの方が正直高機能で使いやすいが、生成されるswfが微妙にオリジナルと違うようで、場合によっては動作が変わる。
  • truetypeフォント
    作成に使用するtruetypeフォントは作業ディレクトリに置く。

■日本語のFlash埋め込みフォント作成

  1. swfmillの定義ファイル(xml)を作る。
    日本語フォントを作る際のひな形(2012/02/22現在)。
    表記できない文字は、HTMLのコードで記述。文字コードで記載する場合はUNICODE。
    xmlファイルはutf-8で保存。
  2. swf生成
    > swfmill simple font_def.xml jpfont.swf
  3. 生成したswfをデコンパイル
    > swfmill swf2xml  jpfont.swf jpfont.xml
  4. フォントが含まれるscaleformファイル(gfxもしくはswf)をデコンパイル
    ※) gfxの場合はヘッダをバイナリエディタでswfのものに変更する必要あり。
    > swfmill swf2xml game.gfx game_def.xml
  5. フォントの置き換え
    フォント定義部分を確認する。DefineFont2 もしくは DefineFont3 のタグで囲まれた部分がフォント定義。
    <DefineFont></DefineFont>の部分を3で生成した日本語フォントの該当部分と差し替える。<DefineFont>の以下のアトリビュートはゲーム側のオリジナルの値を使用すること。それ以外の部分は生成した日本語フォントのままにする。
     objectID、language、name、ascent、descent、leading
  6. 編集したものからswfを生成
    > swfmill xml2swf game_def.xml game_new.gfx
    ※)生成後、オリジナルでヘッダがgfxのものだった場合には、gfxのヘッダに書き換える。
  7. 完成
■gfxのファイルヘッダ
swfファイルはヘッダ3byteが、非圧縮の場合はCWSで、圧縮されている場合は、FWSとなる。
gfxファイルだと、非圧縮でGFX、圧縮されている場合は、CFXとなる。

Mass Effect (2)

よくよくダイアログテキストのファイルを確認したところ、BioGame\CookedPC\Packages\Dialog内のhogehoge_D.upkがすべてダイアログテキスト。
キャラ別に用意されているので、Global_tlk.upkも含めて、全部で569ファイル。。。

フォントは、swfの日本語フォントを作成して簡易的にBIOC_Materials.uに書き戻してみたがエラーで起動せず。
upkをきちんと処理できるツール作らないとNG。

2012年2月20日月曜日

Mass Effect

日本語化できないと言われてるみたいなので、今さらやってみる。

とりあえず、Global_tlk.upk をhttp://www.gildor.org/downloadsのUnreal Package Extractorで展開して作成されるBioTlkFileのツール作成。保存テキストはUnicodeなので、日本語化できると思う。

me_tlk_tool

ツールは、http://social.bioware.com/project/3492/ にあった Mass Effect 2 TLK Tool 1.0.3 のソースをベースに、MEのtlkを解析して作った。
Global_tlk.upkへの書き戻しは、現状はバイナリエディタでゴリゴリ書き戻すのみ。

フォントは、いろいろ調べた結果、あっちこっちにフォントが散在しているものの、実際にはBIOC_Materials.u に含まれる GUI_SF_Fonts.**** というフラッシュの埋め込みフォント(scaleformかな)を使っているぽいが、このパッケージには、ファイルが大量に含まれていて、バイナリエディタでゴリゴリするのはちょっと無理。でもやればたぶんできる。

なぜ、GUI_SF_Fonts.upk を使っていないのか。。。。

Jagged Alliance Back in Action

すでにpakやpak.crypt展開ツールはできている。

pakツール: jabiapak
http://boards.jaggedalliance.com/index.php?/topic/320-modding/page__view__findpost__p__14327

pak.cryptツール: JABIADecrypt
http://boards.jaggedalliance.com/index.php?/topic/320-modding/page__view__findpost__p__14341

interface_win32.pak.crypt を展開して生成される .ctx がテキストファイル。ctxのツールもすでにある(https://github.com/sbobovyc/JA-BiA-Tools)が、展開後の形式が全言語1ファイルのテキストで使いにくそうなので、作った。

ctx_tool

テキストファイルは、Unicodeなので日本語化できそう。

フォントは、ctxと同じディレクトリにある *.jff とdata_win32.pakを展開してできるbin_win32\textures\interfaceフォルダ内の同名がついている ddsファイル(courier.jffならcourier_dc_dm_00.dds)。

ddsは普通に表示するとなぜか透明。でもゲーム内ではちゃんとフォントとして表示されている。適当に落書きしてゲームに組み込むと普通に表示されたので、フォントテクスチャを作成すれば問題なさそう。

jffは、まだ、未解析。

2012年2月5日日曜日

Warhammer 40000: Space Marine ucs.pc

ゲームテキストのファイルucs.pcは、圧縮前ファイルサイズ + データ本体(zlib圧縮)の形式だった。
ツールはなくても作れるが、英語テキストとかを解凍するのも面倒なので、簡単なツールを作成。

zlibライブラリは、http://www.componentace.com/zlib_.NET.htm を使った。

ucspc_tool.zip

簡単な処理なので、細かいエラー処理は一切していない(手抜き)。

2012年1月30日月曜日

TRAUMA

2/2追記:こっちが正しい対応だった。いきなりフォントデータ探しだすのは毒されすぎか。。。

なぜか、steam版にのみ日本語訳データが入っている。謎。
日本語フォントは入っていないので、swfに無理やり組み込んで、字幕のみ日本語化。


字幕データは、trauma_data\xmlフォルダ内の以下のファイル。

  • fmv_subtitles.xml
  • illucinated01_soundgroups.xml
  • illucinated02_soundgroups.xml
  • illucinated03_soundgroups.xml
  • illucinated04_soundgroups.xml
<subtitle lang="4"></subtitle>で追加されているので、これを全部lang="1"と入れ替える。
lang="1" ⇒ lang="5"、lang="4" ⇒ lang="1"の順で置換。

trauma.swfをSWiXで開いてxml形式で保存。

xmlの以下のフォント定義部分をこれと差し替える。行数だと43955行から57614行まで。

<DefineFont3 FontId="147" LanguageCode="1" FontName="Frutiger CE 45 Light" Ascent="22020" Descent="6560" Leading="6560">...</DefineFont3>

修正したxmlをSWiXで読み込んで、swfとして保存。

swfの方を実行して、字幕をEnglishにしてプレイ。

※) trauma.exeはスタンドアローン起動用の物なので、非対応。swfの方はブラウザ等で実行するかスタンドアローンプレイヤーをダウンロードして実行する。

2012年1月22日日曜日

Serious Sam3の日本語フォント変更

strSetCurrentLocale("jpn")で、日本語になるが、そのとき選択されるフォントがおかしい。
新しい日本語フォントをSerious Editor3で作成しようとして色々調べたところ、すでに製品に組み込まれている日本語フォントは実はまともだった。。。

ただ、このフォントが使われておらず、中国語用のフォントが適用されている状態だったので、元々の日本語フォントを中国語フォントのファイル名でMOD化したら、日本語フォントが適用された。

フォント変更手順:

  1. ゲームインストールフォルダのContent\SeriousSam3にあるAll_145562.groを適当な場所にコピーする。
  2. 拡張子をzipに変更して、解凍する。
  3. 展開してできたContent\SeriousSam3\Locales\enu\Fontsの中のFallbackJpn.fntを新たに別な場所に以下の階層のフォルダを作成してFallbackChs.fntと名前を変えてコピーする。
    Content\SeriousSam3\Locales\enu\Fonts
  4. さらに、同じFallbackJpn.fntをSmallFont.fntとして3の同じ場所に再度コピーする。
  5. 3で作成したフォルダごとzip圧縮して、名前をAll_200000.groに変更する。
  6. ゲームフォルダのContent\SeriousSam3にコピーする。
以上で、あとは普通にプレイすれば、きれいなゴシックフォントでプレイできる。


起動時の左下のローディング表示が化けるので、新たにSmallFontをFallbackJpnフォントで代用するように修正しました。

2012年1月10日火曜日

XNA xnb 日本語フォント生成時の注意

XNAでxnb形式の日本語フォントを生成する場合は、フォントサイズを大きくしたり、イタリックにしたりするとメモリ不足エラーで正しく生成できない場合がある。

これは、Visual Studio自体が利用できるメモリサイズとして2GB以下の制限を受けているためで、これを解除すれば生成できるようになる。

editbinというツールで、Visual Studio自体をLAA対応するとコンパイルできるようになる。以下、LAA対応の仕方。

  1. Visual StudioのVisual Studio Toolsの中の「Visual Studio コマンドプロンプト」を「管理者として実行」で起動する。
  2. Visual Studioの本体EXEにLAAを適用する。
    例.Visual Studio 2008 の場合(C:\Program Files (x86) 下にインストールした場合)
    editbin /LARGEADDRESSAWARE "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"
これで、エラーが出なくなる。Express Editionの場合は、EXEがvcexpress.exe等に変わる。