2017年5月29日月曜日

Terraria v1.3.5 用フォントの作成方法

2017.06.11 追記:【注意】XNAフォントはデバッグビルド版ではなくリリースビルド版を使用すること。

Terraria v1.3.5 からフォントの作成方法が変更になったみたいです。忘れないうちにメモしておきます。

この記事では「Visual Studio Community 2015」を使用してTerraria v1.3.5用のフォントを作成する手順を説明します。以下、VS2015の開発環境が整っている前提で説明を行います。以下の手順はWindows 10 Pro バージョン 1607の環境で確認しました。


1.準備


1.1.必要なソフトのインストール


1.1.1.Microsoft XNA Game


「XNA 4.0 Refresh (Visual Studio 2015)」
ここにある「XNA Game Studio 4.0.5.zip」をダウンロードし解凍します。
この中には以下のものが入っています。
  1. DirectX
  2. XNA Framework 4.0 Redistribution
  3. XNA Game Studio 4.0 Platform Tools
  4. XNA Game Studio 4.0 Shared
  5. XNA Game Studio 4.0.vsix
1番から順にすべてインストールします。インストールは標準でかまわないと思います。

【参考】
CodePlexは今年中に閉鎖される予定だそうです。ダウンロードしたファイルは保存しておいたほうが良いかもしれません。
「Shutting down CodePlex | Brian Harry's blog」
https://blogs.msdn.microsoft.com/bharry/2017/03/31/shutting-down-codeplex/

「Google Code」に続き、MSの「CodePlex」も閉鎖 —— GitHubへの移行を推奨 | BUSINESS INSIDER JAPAN
https://www.businessinsider.jp/post-1570



1.1.2.Terraria v1.3.5用フォント作成モジュール


公式掲示板の以下の記事でRe-Logic公式のTerraria v1.3.5用XNAカスタムフォント作成用拡張モジュール「Font Extension.zip」をダウンロードします。
「Official - Custom Fonts in 1.3.5+ | Terraria Community Forums」
このファイルを解凍すると以下のファイルが入っています。

  1. ReLogic.Content.Pipeline.dll
  2. SampleFont.dynamicfont

1番がフォント作成用拡張モジュールで2番がスプライトフォント作成用定義ファイルのサンプルです。


2.作成手順


2.1.プロジェクトの作成


Visual Studio で新規プロジェクト作成画面を開き、


「.NET Frameword 4.6.1」と「Windows Game(4.0)」を選択し、プロジェクトを作成します。プロジェクトが開いたら、一旦ここでビルドを実行し、エラーやワーニングが出ないことを確認します。


2.2.スプライトフォントの追加


(Content)プロジェクトにスプライトフォントを追加します。


「Sprite Font」を選択し名称を指定します。ここではTerrariaのメインメニュー用の大きめの文字用のフォントを作ります。スプライトフォント名を「TerrariaMenu.spritefont」にしてみました。


追加が完了するとspritefontの定義ファイルが表示されます。とりあえずここでビルドし、エラーやワーニングが出ないことを確認します。「Debug\Content」フォルダーにフォントファイル「TerrariaMenu.xnb」が作成されていれば成功です。


2.3.Terraria用拡張モジュールの組み込み


前項「1.1.2」でダウンロードした拡張モジュールをコピーします。


この例では「Font Extension」と言うフォルダーを作成し、ここにコピーしました。


2.4.拡張モジュールの参照設定


(Content)プロジェクトの参照を右クリックして「参照の追加...」で前項「2.3」でコピーしたモジュール「ReLogic.Content.Pipeline.dll」を指定します。


2.5.スプライトフォントに拡張モジュールの割り当てる


「TerrariaMenu.spritefont」を選択し以下のプロパティを変更します。

  • Content Importer : Sprite Font Description - XNA Framework
  • Content Processor : Sprite Font Description - XNA Framework

この部分を以下のように変更します。

  • Content Importer : Dynamic Sprite Font Importer
  • Content Processor : Dynamic Sprite Font Processor


2.6.定義ファイルの修正


ではフォントを定義していきます。
今回は以下の条件で作成することにします。
  • 使用フォントは「メイリオ」
  • フォントサイズは14ポイント
  • 使用文字種はShift-JISで定義されている文字
  • 文字の太さはボールド


2.6.1.サンプルに従い定義ファイルを修正する


前項「2.2」で作成したスプライトフォントの定義「TerrariaMenu.spritefont」を開き、中身を全て削除します。そして前項「2.3」でコピーしたサンプルの内容で置き換えます。
そして以下の部分を

<FontName>Andy</FontName>
<Size>14</Size>
<Style>Bold</Style>
このように変更します。
<FontName>メイリオ</FontName>
<Size>14</Size>
<Style>Bold</Style>

ここまで修正したら、一旦ビルドして確認します。
ここで以下のエラーが1件発生するはずです。
The font family "Source Han Sans SC Regular" could not be found. Please ensure the requested font is installed, and is a TrueType or OpenType font.

これは指定されたフォント「Source Han Sans SC Regular」がシステムに存在しない場合に発生します。

それと大量のワーニングが表示されているはずです。このワーニングは
「指定されたフォントに該当の文字がないため代替フォントを割り当てました、一般的に代替フォントで置き換えられたフォントには再配布のライセンスがないので使用文字種を変更してください。」という意味のようです。

エラーとワーニングが出ないようスプライト定義ファイル修正します。
文字種の定義はファイルの最後の方にある以下の部分で指定します。

<CharacterRegions>
  <!-- English -->
  <CharacterRegion>
    <Start>&#x20;</Start>
    <End>&#x7E;</End>
  </CharacterRegion>
</CharacterRegions>

とりあえず、上記のように文字種を英字のみに変更します。文字種は「<Start>」と「<End>」の部分にユニコードで指定します。今回は 0x20 ~ 0x7E までとします。

修正が終わったら再度ビルドしエラーとワーニングが出ないことを確認してください。


2.6.2.表示テスト


正常にビルドが終了したら表示のテストを行います。「bin\x86\Debug\Content」にできたスプライトフォント「TerrariaMenu.xnb」の名前を「Death_Text.xnb」に変更し、Terrariaがインストールされているフォルダーの「Terraria\Content\Fonts」に上書きコピーします。

Terrariaを起動し、文字のデザインが変更された事を確認します。



このように小さい文字で表示されれば成功です。
メインメニューのフォントサイズは24ポイントくらいが良いようです。
一応参考としてDeath_Text.xnb は24ポイント、それ以外は12ポイントくらいが良いかもしれません。各自で試してみてください。


2.6.3.文字種の追加


今回はShift-JISの表示が目標なので日本語の文字を<CharacterRegion>に追加します。約7000文字以上の定義となるためサンプルのソースをGistに置きました。これは私が使用している定義ファイルです。
「Terraria_Death_Text_Pen.spritefont」
https://gist.github.com/synctam/d8b9bace1e63a1953f8f0f6f88a3cf85
この定義ファイルのフォント名とサイズ、スタイルを変更すればそのまま使用できると思います。

なお、定義ファイルで指定するフォントはウィンドウズにインストールされている必要があります。未インストールのフォントを使用したい場合はインストール後にビルドしてください。


3.注意事項


スプライトフォントをインターネット上で公開する場合はフォントのライセンスに注意してください。特に前項「2.6.1」で説明したように、存在しない文字種は代替フォントに置き換えられますので、このワーニングが出ないよう<CharacterRegion>の定義を調整する必要があります。


4.お願い


Terrariaの各フォントがどの部分で使用されているか、まだわかっていません。どなたかご存じの方はコメントしていただけるとうれしいです。
  • Combat_Crit.xnb
  • Combat_Text.xnb
  • Death_Text.xnb --- タイトル、設定画面関連 24p
  • Item_Stack.xnb
  • Mouse_Text.xnb
  • Title_Font.xnb
今、わかっているのは「Death_Text.xnb」がタイトル画面で使用されているみたいだって事だけです。


では・・・

■参考
「XNA Framework/テキストの描画 - WisdomSoft」
http://www.wisdomsoft.jp/280.html

「【XNA】日本語表示をする方法 - またたびソフト」
http://nnf.deci.jp/96/

「日本語を表示」
http://www.eonet.ne.jp/~maeda/xna/kanji.htm

4 件のコメント:

  1. おぉ!フォント作成の手順公開は凄くありがたいです!
    ありがとうございます。

    返信削除
  2. はじめまして。Rと申します。
    以前からsynctamさんのツールを使わせていただいておりまして、とても助かっています。

    現在、Terrariaでのフォント作成をもう少し簡単にできるようにツールを作ろうとしていますが、
    その基本となる定義ファイルについてsynctamさんの「Terraria_Death_Text_Pen.spritefont」を
    使いたいと考えておりますが、利用ライセンスについてはどのように定義されていますでしょうか。

    どうぞ、よろしくお願いいたします。

    返信削除
    返信
    1. あらら、申し訳ありません、Rさんのブログを読んで気が付きました。
      自由に使っていただいて構いません。
      MITライセンスとさせていただきました。一応Gistの方にも書いておきました。
      (This software is released under the MIT License.)
      Rさんの実況動画いつも見ています、実況用MODは面白いアイデアですね。

      削除
    2. 返信ありがとうございます。まさか動画の方をみていただているとは・・・

      ライセンスの件承知いたしました。
      承諾前に公開してしまい申し訳ございません。対応するようにいたします。

      また、別件でフォント使用についても相談させていただきたいと思っておりますので、
      改めて連絡したいと思いますので、よろしくお願いいたします。

      削除