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

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