2012/07/29

book.swfと本のフォント について

スカイリムの日本語化について、ずっと疑問に思っていたことがありました。
それは……日本語版の「book.swf」について。

スカイリムの日本語化について検索してみると、必ず、日本語版のSkyrim - Interface.bsaから「font_jp.swf」「fontconfig.txt」「book.swf」の三つを解凍して取り出して差し替えろ、ということがどこのサイト様を見ても書かれています。
おばちゃんは最初、"book.swf"というのは、書籍に使われているフォントが埋め込まれているファイルなのかと思っていました。
ところが、ふと、「book.swf」のファイルのサイズを見てみたら……軽すぎるのです。
どう頑張っても重たい日本語フォントが入るサイズじゃない。
いったいbook.swfって何なんだろ……まあ、名前からして書籍関連の何かなのは確実なのですが、ずっと不思議に思いながらも特に不都合はなかったので、わからないまま放置していたのでした。
ところがある日、書籍に使われているフォントを変更しようとして「あれ?」と思いました。

fontconfig.txtの$SkyrimBooksに他のフォントを指定しても変更できない。
書籍のフォントは、fontconfig.txtのどこをどう弄っても、ゼニマックス・アジア版の楷書体のフォント(Skyrim_JP_BookFont)以外にはならないのです。

↓これが日本語版書籍本文用デフォルトフォントのSkyrim_JP_BookFont

不思議なのは、日記やメモなどに使われている手書き風の文字の$HandwrittenFontと$HandwrittenBoldはフォント変更できるのです。
でも、$SkyrimBooksだけはどうしても変わらない。
たとえ$SkyrimBooksに何も指定しなくても、"Skyrim_JP_BookFont"で表示される。
何なの?これ。

$SkyrimBooksというのは、名前からして明らかに一般的な書籍の本文のフォントを指定する変数だと思うのです。
それなのに$SkyrimBooksに指定したフォントはまったく反映されず、font_config.txtのどこにも指定していないSkyrim_JP_BookFontが本のフォントとして堂々と居座っている……
考えられるのは、ただ一つ。
犯人は……日本語版の「book.swf」……奴しか考えられません。

そこで日本語版のbook.swfをData/Interfaceフォルダから抜いてみると……案の定、あっさりと書籍の文章がfontconfig.txtの$SkyrimBooksで指定したフォントに変わってくれました。
つまり英語版のSkyrim - Interface.bsaに含まれているbook.swfなら、$SkyrimBooksの指定が効くのです。
おそらく日本語版のbook.swfでは、$SkyrimBooksというfontconfigで指定できるフォント変数ではなく、直接"Skyrim_JP_BookFont"のフォントが指定されちゃっているのでしょう。


* * * * *

…とまあ、上記のような次第で、おばちゃんは日本語化の際に、日本語版のbook.swfって本当に必要なの??と常々疑問に思っていたのです。
日本語版のbook.swfを入れずに英語版のまま本を開いてみても問題なく日本語表示できるようですし、fontconfig.txtの$SkyrimBooksの指定でフォントも切り替えられます。
これなら、わざわざデフォルトのSkyrim_JP_BookFontに固定された日本語版の"book.swf"を入れなくてもいいんじゃない??
そう思っていたのですが……やはり日本語版のbook.swfには、そうしなければいけない理由があって、あのような不思議な仕様になっていたのです。
日本語版のbook.swfはいらない子、と結論を出すのは早すぎました。


先日、1.7βをプレイしていたら、配達人が手紙を持ってきました。
何かと思ったら『友達からの手紙』です。
街や家や洞窟内などでシャウトを使うとたまに発生する、あの謎めいた手紙……(友達って誰?どこで見てるの?)……なんだか久しぶりに見るなあと思って手紙を開いたら、文字が思いっきり『□□□□□□□□』になっていて愕然としました。
あれええええ????何で化けてんの??
スカイリムのフォントについてはもう把握した、と思ってたのに……嘘おおおおん。

↓文字化けして□□□状態になった『友達からの手紙』

試しに日本語版のbook.swfを入れたら、見事に文字化けが直ります。
くそう、要らない奴と思ってたのに……しぶとい子ねえ。
他にどんなものが化けているのか、もう一度、徹底的に調べてみると「アーヴェルの日記」や「エルトリスのノート」や「感染者のメモ」が□□□□になっていました。
…………………。


最初は『友達からの手紙』が文字化けして□□□になってしまうのは、もしかしたらクエスト中に文面が生成されるからなのかな……と思いました。
『友達からの手紙』は「WICastMagic04(id:00023EE4)シャウト・言葉の壁について学ぶ」クエストの関連アイテムで、プレイヤーがシャウトを使った場所や、プレイヤーが未修得の他のシャウトのある壁の場所などが、手紙の文中で表示されます。
その時のゲームの状況によって変わる単語は、予め手紙の文章として用意することはできないので、その部分は特殊なタグになっています。
たとえば、『友達からの手紙』の元の文章(※Skyrim_Japanese.DLSTRINGSファイル内にある)はこんな感じです。
<font face=""$HandwrittenBold"">
<Alias=Player> へ

お前が <Alias=Location> でスゥームの力を披露した時、少し騒ぎになった。全員がドラゴンボーンの帰還を望んでいた訳ではないからな。

私個人は才能を磨き成長していく姿を見たいと望んでいる。今のスカイリムには本当の英雄が必要だ。

<Alias=Dungeon> に目を向けるべきだ。あそこには不思議な力の源があって、解放できるのはドラゴンボーンしかいない。

よろしく頼む。

友より
</font>

この<Alias=○○○>という箇所に、プレイヤーの名前だのシャウトを使った場所だのが、その時のゲームの状況に応じて代入されて、最終的な手紙の文章になるわけです。
だから……その文章がリミックスされる作業の途中に、文字化けの原因があるのではないかと思ったのでした。
しかし『エリトリスのノート』は?『アーヴェルの日記』は?『感染者のメモ』は?
これらは確かにクエストがらみで発生するものですが……文中に後で変換されるタグのようなものは含んではいません。そもそもクエストがらみで発生するジャーナルが全部化けるのだとしたら、他にもたくさんある筈です。


いったい何が原因なんだろう、とあれこれ調べたり試したり頭をかきむしったり……
いろいろ悪戦苦闘している最中、ふと、これらの文字化けするジャーナル達には共通する点があることに気が付きました。
それは……$HandwrittenBoldが使われている、ということ。
もう一つの手書き風文字の$HandwrittenFontに指定されているものなら、たとえそれが文中に<Alias=○○○>を含むクエスト中生成ジャーナルであっても、文字化けせずにきちんと表示されるのです。
化けるのは$HandwrittenBoldの方だけ。


メモや手紙、日記の類に使用される手書き風文字の$HandwrittenFontと$HandwrittenBoldについては、どこがどう違うのか、どういった箇所で使い分けられているのか、今まで深く考えたことがありませんでした。
ちなみにこの二つのフォント変数は、英語版でも日本語版でも両方とも同じフォントが指定されています。
(英語版だとSkyrimBooks_Handwritten_Bold、日本語版はSkyrim_JP_HandWriteFontです)
DLSTRINGSファイルの中を覗いてみてみると、手書き文字の指定は、圧倒的に$HandwrittenFontの方が多くて、$HandwrittenBoldはごくわずかなんですよね。
『友達からの手紙』も『エリトリスのノート』も『アーヴェルの日記』も『感染者のメモ』も、そのごくわずかの中の一部だったのです。
これは……
もしかして、$HandwrittenBoldの日本語表示が文字化けする原因が、英語版のbook.swfの中にあるんじゃない?


そう考えて、英語版のbook.swfをデコンパイルして中身を調べてみたところ、なんと英語版のbook.swfには、英語版の手書き文字デフォルトフォントであるSkyrimBooks_Handwritten_Boldが、「$HandwrittenBold」として直接swf内に埋め込まれていました。
つまり、英語版のbook.swfでは、fontconfig.txtで指定されて読み込まれている筈のフォント変数・$HandwrittenBoldの上に、さらにもう一度、自分自身でSkyrimBooks_Handwritten_Boldというデフォルトの欧文フォントを上書きして設定していたのです。
(なんでこんな意味のないことを……意味ないよね?)
これじゃあ、日本語は化けて当然です。
だってfontconfig.txtでいくら日本語のフォントを指定してやっても、book.swfがそのフォントをさらに上書きして欧文フォントで定義しちゃってるんだもの。
なんでこんないらんことすんのよお!


…というか、この状態だと、日本語が文字化けするだけじゃなく英語テキストの環境下でも$HandwrittenBoldはデフォルト固定でフォント変更がきかない、という不自由さが発生している筈です。
今まで手書き文字の$HandwrittenFontと$HandwrittenBoldは、fontconfig.txtでフォント変更が可能、と思っていましたが、実は変更可能だったのは$HandwrittenFontの方だけだったんですね。
まったく気が付きませんでした。
……う~む。
日本語版は「$SkyrimBooks」の指定が効かず、英語版は「$HandwrittenBold」の指定が効かない……結局、どっちもどっちだった、ってことね!
ちなみに、英語版のbook.swfから「$HandwrittenBold」として埋め込まれたSkyrimBooks_Handwritten_Boldの欧文フォントのデータ部分をさっくり削除してやると、見事に日本語の文字化けが解消されました。
これですべてのフォントがfontconfig.txtで指定したとおりのフォントで表示されます。

そんなわけで、書籍や手紙、メモ類のフォントをすべて変更したい場合は、英語版や日本語版の「book.swf」をそのまま使えません。
固定指定されたフォント名と埋め込まれたフォント情報を消してやらないといけません。

【関連記事】
fontconfig.txtについて
スカイリムのEverywhere系フォントについて
スカイリム手書き文字用カスタムフォント(ふい字)

11 件のコメント:

  1. 修正版book.swf のパッチ 公開お願いできないでしょーか

    返信削除
  2. お待たせしてすみません。
    こちらに公開しました。 →修正版book.swf
    すべての本やメモ類をチェックしたわけではありませんので、もし不具合があったらお知らせ下さいね。

    返信削除
    返信
    1. とんでもないです。。
      一方的で失礼なお願いにもかかわらずありがとうございます。
      フォントで本の文字化けがずっと気になっていました。。素人の力では当然解決できずにいた所こちらの記事をみつけました!

      他にはないスカイリムの記事で陰ながら応援しています

      はいパッチ万一不具合がありましたら返信します

      削除
  3. こんばんは
    パッチは完ぺきでした。この後もプレイ中に万一なにか発見しましたら報告します。

    えー、、突然なんですが、以前obachan様の記事でopentypeのフォントがどうしてもスカイリムに適用できないとの事を思い出しまして・・

    もしかしたら既に知っておられるかもしれないのですが、

    http://www.vector.co.jp/soft/win95/art/se326509.html

    このフリーソフトでSWFを直接D&Dしますと、フォントの詳細が書かれたTXTファイルが出力され、フォントの正式名称が判ります。

    これでわたしはOPENTYPEのフォントもスカイリムに適用できました。

    パッチを作成できる方に釈迦に説法かもしれませんが・・(汗)
    余計な情報でしたらすみません。。

    返信削除
    返信
    1. 返信どうも有難うございます。
      Opentypeのフォントも使えるんですね。そうかあ……やはり名前がポイントだったんですね。
      わざわざ教えていただいて有難うございます。
      紹介していただいた「HugFlash」も、とっても便利ですね!
      これだったら、Flashでパパっと作ったフォントを簡単にスカイリムに持ってこれますね。
      このツールを使えば、そんなに手順がややこしくならなそうなので、自分でフォント埋め込みswfを作る方法の記事を復活させようかなあ…
      フォントはライセンスの問題があるので、やはり自分でswfデータを作って使用するのが一番無難なんですよね。
      色々、ためになる情報を本当に有難うございます。
      また良かったら覗きにいらしてくださいね。

      削除
  4. 記事中のアーヴェルの日記の文字化けで検索し、この記事にたどり着きました。パッチのおかげでようやく□□□の羅列から解放されました。本当にありがとうございました。コンパイルなど何もわかっていなかった身としてはobachanさんは魔法使いに見えます。サルモールが恐れられる訳ですね!

    返信削除
  5. いつもありがとうございますm(_ _)m
    色々と活用させて頂いており
    楽しいスカイリム生活を送らせて
    頂いております。

    返信削除
  6. はじめまして
    パッチ使わせていただきました。
    おかげで本が読めるようになりました!
    世界に入り込むRPGに本は欠かせませんので、凄く助かりました^^
    ・・・・しかし、記事に書いてあることが半分くらいしか理解出来ないorz
    これからも記事で勉強させていただきます!

    返信削除
  7. はじめましてこんばんわ。
    最近skyrimをはじめましたが、本の文字化けが気になっていました。
    公開していただいているファイル使わせてもらったところ、
    問題なく表示されました!!
    本当にありがとうございます!

    英語のやつはいまいちわかりませんが(;´∀`)

    返信削除
  8. はじめまして
    カスタムフォントを作成しているところ、どうも文字化けが治らない箇所がありましてこちらにたどり着きました。
    修正版book.swfを組み込んだカスタムフォントをNexusにアップしましたが、問題がある場合は削除させていただきますので、その際はコメントをいただければと思います。
    http://www.nexusmods.com/skyrim/mods/61653

    返信削除
    返信
    1. 記事内容を拝見し、自身で変更したものを使うこととしました。
      大変参考になる記事をありがとうございます。

      削除