2012年2月22日水曜日

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となる。

2 件のコメント:

  1. Hi! I'm from Viet Nam, do you know texture2d in Dishorned. And how to convert .DDS to .texture2D? Thanks in advance

    返信削除
  2. swfファイルのヘッダは非圧縮がFWSで圧縮がCWSですかね?
    逆になってる気がします。

    返信削除