FE8でフォントがない文字を表示させると、ハートマークになります。\\ ハートマークではなく、好きな文字を出せるようにする方法について説明します。\\ {{ http://i.imgur.com/9iILbuU.jpg }}
{{ http://i.imgur.com/GpwfsFE.jpg }}
===== 用意するもの =====
fefont\\ http://ux.getuploader.com/FE4/download/192/FeFont.zip
\\ edge\\ http://takabosoft.com/edge
===== FEのフォントは2つあります。 =====
武器名などを表示するフォントと、台詞をしゃべるためのフォントは別物です。\\ まずは、どちらのフォントを改造したいのか、確認する必要があります。\\ \\ どちらのフォントにせよ、デザインが違うだけで、基本的にやり方は同じです。\\
====== 武器フォント てつのけんを鉄の剣にしよう。 ======
FE8には、武器フォントで鉄というフォントがなぜありません。\\ 鉄の剣とすると、♡の剣になります。\\ {{ https://i.imgur.com/9iILbuU.jpg }}
step_a00\\ FE8にはありませんが、FE7には、鉄の剣というアイテムが有り、鉄という武器フォントが存在します。\\ もし、貴方がFE7をもっているならば、そこからフォントを頂いてくることが出来ます。\\
===== step_a01 =====
fefontを起動します。\\ {{ https://i.imgur.com/rMotXPp.jpg }}
===== step_a02 =====
Load ROMで fe7 をロードします。\\ {{ https://i.imgur.com/L3bbQXE.jpg }}
===== step_a03 =====
FE7の武器のフォントを参照したいので、コンボボックスから、\\ FE7烈火 武器文字 を選択します。\\ {{ https://i.imgur.com/xRlHO8Z.jpg }}
===== step_a04 =====
参照したいのは、「鉄」ですので、\\ 文字に「鉄」と入れます。\\ {{ https://i.imgur.com/wDD0yMT.jpg }}
===== step_a05 =====
検索ボタンを押して、文字を探します。\\ {{ https://i.imgur.com/cwwsOJN.jpg }}
===== step_a06 =====
文字が見つかりました。\\ {{ https://i.imgur.com/nJaMvTz.jpg }}
「あ鉄うえ」と表示されているのは、フォントサンプルを描画しているためです。\\ 後で説明します。\\
===== step_a07 =====
文字が出たので、画像エクスポートボタンでpng画像として保存してください。\\ 次は、このフォントをFE8に移植します。\\ {{ https://i.imgur.com/saJJ5sM.jpg }}
===== step_a08 =====
とりあえず、FE FONTを一度終了して、再度立ち上げ直してください。\\ {{ https://i.imgur.com/SN13XBp.jpg }}
\\ 立ち上げたら、 Load ROM を選択して FE8を開いてください。\\ {{ https://i.imgur.com/R3Pj7NA.jpg }}
\\ (もちろん、FE7を立ち上げぱなしにしたり、設定を変えて再利用してもいいです。)\\
===== step_a09 =====
FE8聖魔の武器文字に、フォントを追加するので、\\ 一番上の「FE8聖魔 武器文字」を選択します。\\ {{ https://i.imgur.com/NYcXb0D.jpg }}
===== step_a10 =====
FE8のROMから、該当文字を探すので、\\ 文字に「鉄」と入れ、検索ボタンを押してください。\\ {{ https://i.imgur.com/oGruQWY.jpg }}
===== step_a11 =====
FE8には、「鉄」という武器文字フォントがないので、該当するフォントはありませんとエラーが表示されました。\\ とりあえず、OKを押します。\\ {{ https://i.imgur.com/zOg6eST.jpg }}
===== step_a12 =====
新規にフォントを追加するので、ROMの末尾にポインタが移動されました。\\ この領域に鉄という武器文字フォントを差し込みます。\\ (フォントはどこの領域にでも設定できるので、ほかに割り当てたい領域があればアドレスを移動してください。)\\ {{ https://i.imgur.com/OzM5ffH.jpg }}
===== step_a13 =====
画像インポートを選択し、先ほどもってきた「鉄」という武器文字フォント画像を指定します。\\ {{ https://i.imgur.com/fE3lvjG.jpg }}
===== step_a14 =====
インポートできました。\\ (まだ結果は確定していません。)\\ {{ https://i.imgur.com/BWm0qis.jpg }}
===== step_a15 =====
文字幅があっていないので、文字幅を調整して、\\ 後ろの文字がいい感じの位置に来るようにしてください。\\ {{ http://i.imgur.com/CJbms5t.jpg }}
===== step_a16 =====
位置を調整する時は、サンプル倍率で変更すると、\\ フォントを拡大してみることができるので便利です。\\ {{ http://i.imgur.com/XzvstoO.jpg }}
サンプルとなっているものは、フォントを設定しやすくするための便利機能です。\\ ここでどんな設定をしても、設定には影響しません。\\ \\ サンプル倍率を変更すれば、フォントを拡大して見やすくなります。\\ サンプル背景を変えれば、さまざまな背景下でフォントがどう見えるのかわかります。\\ サンプル文字列では、フォントの前の文字と後ろの文字を出して、つながりを見ることが出来ます。\\ (「あ鉄うえ」 と表示されているのは、サンプル文字列で、「あ○うえ」としているためです。○が現在変更している文字になります。)\\ \\ 武器文字は、ステータス画面や、メニュー等で使われるので、\\ サンプル背景色を変えて、どう見えるのか確認しましょう。\\ {{ https://i.imgur.com/F9OMiVD.jpg }}
===== step_a17 =====
ここまで確認して、問題なさそうであれば、\\ Write ROM ボタンで、ROMに焼きこみます。\\ {{ http://i.imgur.com/T3Fpl3W.jpg }}
===== step_a18 =====
早速ゲームを開始してみましょう。\\ 先ほど差し込んだフォントによって、鉄の剣と、正しく表示されているはずです。\\ {{ http://i.imgur.com/GbNYQA3.jpg }}
====== 台詞フォントにない文字を作ろう ======
これは明らかに矛盾しています。という時の「矛」という台詞フォントがFE8にはありません。\\ 今度は、矛というフォントを作ってみましょう。\\ {{ https://i.imgur.com/GpwfsFE.jpg }}
鉄という武器フォントは、FE7にありましたが、\\ 今回は多分ないと思うので、自分で書かなければいけません。\\ いちから書いてもいいのですが、何か参考になる物があったほうがいいです。\\ 矛という字に似ている字で、FE8にあるとすれば、予という字でしょう。\\ 予という字を取り出して、それを元に矛という字にしてみましょう。\\
===== step_b01 =====
Load ROM で FE8 の ROMを読み込みます。\\ {{ https://i.imgur.com/R3Pj7NA.jpg }}
===== step_b02 =====
FE8聖魔 セリフ文字を選択します。\\ {{ https://i.imgur.com/29XExYd.jpg }}
===== step_b03 =====
いきなり、矛をつくるとつらいので似ている文字として、\\ 予を取得します。\\ \\ 文字に「予」と入れ、検索ボタンを押してください。\\ {{ https://i.imgur.com/rxSoCgp.jpg }}
===== step_b04 =====
予というフォントがあったので表示されました。\\ {{ https://i.imgur.com/HWOf8yO.jpg }}
===== step_b05 =====
背景色がちょっと読みづらいので変更しましょう。\\ {{ https://i.imgur.com/XhjSqZ9.jpg }}
===== step_b06 =====
セリフの吹き出しと同じ色にしてみました。\\ {{ https://i.imgur.com/Ie1Bzcm.jpg }}
===== step_b07 =====
この、予という字をもとに、矛というフォントを作ります。\\ 画像エクスポートで png画像として取り出します。\\ {{ https://i.imgur.com/IVDn5JG.jpg }}
===== step_b08 =====
edge取り出した画像を edge で開いてください。\\ {{ https://i.imgur.com/JLcTiGd.jpg }}
===== step_b09 =====
変更する前に、パレットの解説をします。\\ すべてのフォントは、4色の画像です。(4色無圧縮画像としてrom内に保存されています)\\ 4色画像なので、4色を超える色で画像を書いてはいけません。\\ 利用できるのは、左上の4つのパレットだけです。\\ そして、一番左上の0番パレットは背景色となります。\\ 実質3色で書く必要があります。\\ {{ http://i.imgur.com/16iZyjU.jpg }}
また、フォントのパレットは予め決まっています。\\ パレットの色を変更してもフォントの色としては反映されません。\\ パレットは以下のようになります。\\
|0番|透明色|
|1番|中間色|
|2番|白色|
|3番|黒色|
===== step_b10 =====
予に書き足して、矛にしてみました。\\ 簡単な修正ですが、それっぽく見えますでしょうか?\\
{{ https://i.imgur.com/JEXibWK.jpg }}
\\ 満足のいくものができたら、入れ込み作業を行います。\\
===== step_b11 =====
FE Fontで、\\ 文字を「矛」にして検索ボタンを押します。\\ {{ http://i.imgur.com/o43bSbv.jpg }}
===== step_b12 =====
「矛」という文字はないので、エラーが表示されますが、\\ OKボタンを押してそのまま進みます。\\ {{ http://i.imgur.com/UNolpL3.jpg }}
===== step_b13 =====
武器フォントの時にも説明しましたが、フォントはどこのアドレスにでも置けるので、好きな空き領域に配置してください。\\ (何も設定しないと、ROM末尾に追加になります。)\\ {{ http://i.imgur.com/L6iqdMq.jpg }}
===== step_b14 =====
画像インポートで、先ほど作った「矛」というpng画像を読み込みます。\\ {{ http://i.imgur.com/ac4UugQ.jpg }}
===== step_b15 =====
読み込めました。\\ {{ http://i.imgur.com/xHBABIs.jpg }}
===== step_b16 =====
漢字とひらがなだと高さがちょっと違うので、\\ 漢字同士並べた時の動作を確認したいものです。\\ \\ こういうときには、サンプル文字列を利用します。\\ 「これは○盾してる」などといれると、○の部分が変更したいフォントになります。\\ {{ http://i.imgur.com/59b6o7j.jpg }}
サンプル倍率を変えれば、拡大もできます。\\ サンプルという名前の項目を変更しても、保存されるデータには一切関与しないので、見やすいように調整してください。\\ {{ http://i.imgur.com/dDm4ZSv.jpg }}
===== step_b17 =====
フォントの字幅を調整してください。\\ そして、満足いくのができたら、 Write ROMで保存してください。\\ {{ http://i.imgur.com/C4z02WA.jpg }}
===== step_b18 =====
さっそくゲームを開始して、入れたフォントを確認してみましょう。\\ 先ほど差し込んだフォントによって、矛盾と表示されていますね。\\ https://i.imgur.com/WVOPce2.png
\\ 以上で、武器とセリフのフォントの改造方法\\ 移植する時と、似ているフォントから作成する方法についての解説を終わります。\\ これでどんな文字でも作れるようになりました。\\ 面白い物語を作ってくださいね。\\
====== トラブルシューティング ======
===== Q:インポートしたフォントが何かおかしい =====
A.左上の4色だけで書いていますか?\\ 4番目の黒色と間違えて、5番目以降の黒色で書いていることが有ります。\\ ちゃんと、左上の4つの色だけで書いているか確認してください。\\ \\ {{ http://i.imgur.com/16iZyjU.jpg }}
====== 技術資料 ======
此処から先はフォント構造がどうやって作られているのかという解析資料です。\\ 特に読む必要はありませんが、詳しく知りたい方はどうぞ。\\
===== アルゴリズム =====
フォントはハッシュとリスト形式で管理されています。\\
|聖魔武器フォントリストスタート|0x57994c|
|聖魔セリフフォントリストスタート|0x593f74|
|烈火武器フォントリストスタート|0xbc1fec|
|烈火セリフフォントリストスタート|0xbdc1e0|
|封印武器フォントリストスタート|0x59027c|
|封印セリフフォントリストスタート|0x5a82b0|
(海外版FEはアルゴリズムが違うような気がするので未対応。)
フォントリストスタートから、たくさんのフォントリストのポインタが伸びています。\\ どのフォントリストを使うかは、SJISの1バイト目を利用して以下の計算式で決定します。\\
探索するリスト=フォントリストスタート + (SJIS1バイト目 << 2) - 0x100
\\ 例えば、聖魔武器フォントで、紋SJIS(0xE496)だと、\\
例:紋 SJIS(0xE496)
0x57994c + (0xE4 << 2) - 0x100 = 0x579BDC
\\ よって、0x579BDCから、0xE4?? フォントリストがスタートします。\\ \\ このフォントリストを、2バイト目 0x96 を頼りに、\\ 0x579BDCから fontlist->next と、線形にたどります。\\ そして、 fontlist->SJIS2 == 0x96 のを見つけたら、\\ それが「紋」のフォントのデータということになります。\\
===== フォント構造体 =====
フォントのビットマップデータは、1文字72バイト(0x48)の固定長でリスト構造
先頭4バイトは次のリストへのポインタ 終端はNULL
5バイト目が探索のためのSJISの2バイト目の1バイト (例: 紋 SJIS(0xE496)だと、0x96)
6バイト目が文字幅(次の文字を描くとき、このサイズだけ空ける cssでいうleft-paddingみたいな)
7バイト目は謎
8バイト目は謎
以下 64バイト(0x40)の4bit無圧縮ビットマップデータです。
%%//%%フォント構造について、Cで書くと、こういうリスト構造だと思われる.
struct fontlist
{
fontlist* next; //次のフォントポインタ。 終端の場合は 0x00 00 00 00 だと思う。
BYTE SJIS2; //紋 SJIS(0xE496)だと、2バイト目の 0x96 が入る.
//ここが不一致だと、文字が出ずに不明な文字としてハートになる
BYTE WIDTH; //文字幅(次の文字を描くとき、このサイズだけ空ける cssでいうpaddingみたいな)
//0x09だと、次の文字を 9ドット開けて描く。(多分)
//0x00だと、余白がなく次の文字とかぶさってしまう。
BYTE dummy[2]; //意味不明(もしかしたら文字によって何か変わる可能性もあり、要検証)
BYTE bitmap[64]; //無圧縮 4bit bitmap
//0(2進数:00) -> 透明
//1(2進数:01) -> 薄いグレー
//2(2進数:10) -> 白
//3(2進数:11) -> 黒
//4(2進数:0100) -> 1ドット目は透明で、その1ドット横に薄いグレー。
//...
//よって、0xFF で 4ドットの黒い線が引ける.
//64バイト 0xFFで埋めると、■な四角形。
//4バイトで1ラインっぽい。 つまり、4バイト*4ドット=16ドット描ける。
//64バイト/4=16 なので、 横 16ドット 縦 16ドットなはず・・・
//ただ、64バイト 0xFFで埋めると、正方形ではなく横長の長方形っぽい絵になるので、違うのかもしれない
};
===== 擬似コード =====
//紋 SJIS(0xE496)
byte sjis1 = 0xE4;
byte sjis2 = 0x96;
dword topaddress = 57994c;
fontlist* p = topaddress + (sjis1 << 2) - 0x100;
while(*p)
{
if ( p->check == sjis2 )
{//探していたフォント
//p->width 文字幅
//p->bitmap フォント画像
return p;
}
//次のリストへ
p = p->next;
}