[戻る] [ダウンロード] [バグ情報] [使ってみる]

U7J

Ultima VIIの日本語化支援ツールを作成しようという企みです。
実行環境としてExultの利用を前提としています。
作成するのは日本語テキストやフォントの作成ツールとExultに対するパッチです。
日本語化したデータの公開はしません。というかライセンス等の問題をクリアしないといけないので無理です。

それと・・・完成はいつになるんでしょうね?
日本語化支援ツールは日本語化modではありません。どちらかと言うと日本語化modを作成する為のプログラムです。
それなりに手間のかかる作業を必要としますし、翻訳作業は自分でしなければなりません。

1 current status : 少しは進んだ?(@_@)

フィニガンさんと会話 馬小屋の惨状

本やスクロールはフォントサイズを大きく変更します。
フェローシップの本

標識、プレートの日本語訳は画面下部に白文字で表示します。
標識、プレートの日本語訳

プレイヤー名にひらがなカタカナを使用できます。
ひらがなプレイヤー名


できること できないこと 次リリースでの予定?
[TOP]

2 日本語化支援ツール(暫定版)

日本語化は以下の手順で行うこととし、それぞれの手順で必要なツールを作成します。

(1) テキストデータの抽出 ゲームで使用しているテキストデータを日本語化の対象データとして抽出します。
(2) 日本語テキストの作成 抽出したテキストを翻訳して日本語テキストを作成します。
(3) 日本語テキストへの置き換え 作成した日本語テキストを元のテキストと置き換えます。
(4) 不足フォントの検出 日本語の表示に必要なフォントデータが不足していないか調べます。
(5) フォント作成 日本語フォントの作成・編集を行います。
(6) テストプレイ ゲーム中で日本語化したテキストを表示させ間違いがないか確認します。

2.1 テキストデータの抽出

ゲーム中で使用するテキストは複数のファイルに存在しています。
  1. USECODE
    ゲーム中でのオブジェクトやNPCの動作をコントロールするファイルです。この中に会話データが収められています。
  2. TEXT.FLX
    オジェクトの名前や定型的な短いセリフ等が収められています。
  3. NPC.DAT
    NPCの名前を保持しています。
    このファイルはINITGAME.DATにアーカイブされていて、START NEW GAMEで新しくキャラクタを作成したときに展開されます。
  4. MAINSHP.FLX(BGのみ)
    Black Gateイントロダクション、ガーディアンの台詞とバッドエンドのテキストが収められています。
  5. ENDSHAPE.FLX(BGのみ)
    Black Gateイントロダクション、ガーディアンが消えたあとの水色字幕の画像データが収められています。
  6. exultmsg.txt
    Exultに含まれるファイルです。
    NPC用のセリフの一部、Black Gateのエンディング、Serpent Isleのイントロダクションのテキストが含まれています。

これらファイル中からテキストデータを抽出します。

今のところ、USECODEからの抽出はUSECODE逆アセンブラ、TEXT.FLXNPC.DATMAINSHP.FLX(BGのみ)はそれぞれ単体の展開・置換ツールとなっています。
USEOCDEからのテキスト抽出で、次段の日本語テキストの作成で使用できるテキストの構造データをどこまで自動的に作成できるか試行していたのですが、断念しました。
手作業で少しずつ作成中です。

exultmsg.txtの内容はちょっと問題あるかなとも思いましたが日本語化ツールに含めてしまいました。
内容はBGのENDGAME.EXE、SIのINTRO.EXE、ENDGAME.EXEから該当テキストをピックアップしています。一部Exultとは違う内容になっています。

このファイルはBGとSIで共通で使用される為、BGとSIで日本語文字に違うコードを割り当てると正しく表示できなくなります。
その為、BGあるいはSIのSTATICフォルダからも読み込むようにExultを変更します。

Black Gateイントロダクションのガーディアンの消えたあとの水色字幕はENDSHAPE.FLXに画像として保持しています。
これを日本語化する為に字幕画像の作成プログラムを追加しました。
テキストを指定して画像を作成するものとBMPファイルから作成するものの2種類あります。
[TOP]

2.2 日本語テキストの作成

USECODEの内容を分りやすく表示して、それに対応するテキストを入力するツールを考えていますが、まださっぱり手付かずの状態です。
表示内容に選択的な部分があれば、そのON/OFFを適宜切り替えたりといった事が出来るようにしたいと考えています。

現状ではテキストファイルをエディタ等で変更しなければなりません。
USECODE内でのテキストの順序と実際に表示される順序は違っているのでかなり大変です。

他のテキストについては抽出したファイルを元にそのまま翻訳すればよいので、専用プログラムは無くてもなんとかなるのではと思っています。
[TOP]

2.3 日本語テキストへの置き換え

作成した日本語テキストで使用している文字を調べ、それぞれに文字コードを与えて、データファイル中のテキストと置き換えていきます。
いくつかの場面では単純な日本語テキストへの置き換えでは対応できない事が判っているため、USECODEに関しては、USECODEアセンブラを作成し、プログラムの追加・変更を行えるようにします。
TEXT.FLXNPC.DATMAINSHP.FLX(BGのみ)については抽出時に使用するツールに置換機能を持たせているのでそれを使用します。
Black GateのENDSHAPE.FLX内にあるイントロダクションの字幕は画像生成して置き換えを行います。
[TOP]

2.4 不足フォントの検出

手付かずです。
日本語テキストへの置き換え時に使用している文字が確定するので、それを元にフォントデータをチェックして不足フォントが無いか調べます。
このチェックは日本語テキストへの置き換えとフォント作成のどちらからも行えるようにしたいと考えています。
[TOP]

2.5 フォント作成

ゲームで使用しているフォントはFONTS.VGAMAINSHP.FLXENDGAME.DAT(BGのみ)、INTRO.DAT(SIのみ)に含まれています。
日本語フォントデータはBlack Gate、Serpent Isleの両方で使用できるようにしたいので、フォント作成処理でそれぞれのゲーム用にFONTS.VGAを再構成するようにします。

この機能もほぼ手付かずです。

とりあえずの回避策としてシステムで使用しているフォントを変換してFONTS.VGAMAINSHP.FLXENDGAME.DAT(BGのみ)、INTRO.DAT(SIのみ)に追加するツールを作成しました。
使い勝手は良くありません。
[TOP]

2.6 Exultの改造

今のところ以下の改造を行っています。
  1. プレイヤーキャラクタ名の入力
    ひらがな、カタカナを使用できるようにします。
    漢字変換はユーザが入力する文字を事前に知ることが出来ず、フォントを用意できないため未対応です。
    入力方法はローマ字かな変換入力のみです。
  2. 標識・プレート・墓石の日本語訳表示
    これらは元の英語やルーン文字のまま表示し、画面の下に日本語訳を表示します。その為の機能を追加します。
  3. へび文字の本・スクロールの表示
    Serpent Isleでへび文字が読めない場合は元の英語テキストを元にしたへび文字表示、読めるようになったら日本語テキストを表示します。
  4. イントロダクション等の日本語化
    字幕の文字列等Exult内で保持している部分を日本語化します。
    日本語にする・しないを実行時に選択できるように出来ないかなぁとか思っています。
  5. スピーチ代替テキストの常時表示
    BGでトリンシックを出た直後等に台詞を音声で再生し、音声を使用しない(サウンドカード未使用時等)ときには赤文字で台詞のテキストを表示しています。
    この台詞表示を音声使用にかかわらず常にするようにします。
    USECODEのプログラム修正も必要かと思っていましたが大丈夫そうです。
    ただし、半透明で表示されるガーディアンの顔等を表示しないようにするには修正が必要になります。
  6. イントロダクション、エンディングの日本語化
    音声使用にかかわらず常に字幕を表示することができるようにします。
    Serpent Isleのエンディング字幕も表示できるようにします。 本家でも2016-01-31版でSerpent Isleのエンディング字幕が表示できるようになりました。
2.と3.については以下のようにUSECODEに日本語と英語のテキストを埋め込み、Exult内で分離し、必要に応じてそれらを表示します。

<U7J>日本語テキスト<=>英語テキスト</U7J>

タグがちょっとカッコ悪いです。

複数行で表示される表札、プレートの場合、日本語テキストは1行目に全て埋め込むようにします。
2行目以降の日本語テキストは破棄して表示しません。

本やスクロールはデータ量がかなりあり、日本語と英語両方のデータを抱えこむことになると関数サイズが64Kバイトを越えてしまいます。
その為にUSECODEアセンブラも32ビット拡張命令に対応させます。
今のところ、プログラムコード自体が増加する事はまず無いはずなので、テキストデータへのオフセット値を扱う命令のみ対応するようにしています。

5.についてはExult内でスピーチ再生後のステータスを変更することでUSECODEの代替テキスト表示処理を実行させるようにしています。

6.はExultに含まれるexultmsg.txtが日本語化の対象になります。
このファイルにあるのはデータファイルに含まれずプログラム内に埋め込まれていたテキストを抽出したもののようです。
BGとSIで別の文字コードを割り当てると正しく表示できなくなるので、各ゲームのSTATICフォルダからも読み込めるように変更します。

スナップショット版を元にしたものをときどきリリースします。
Exult Studioについては全く考慮していません。
[TOP]

3 文字コードについて

改造版Exultでは文字コードにUTF-8やシフトJISといった既存のコード体系とは違ったものを使用しています。
U7日本語化ツールでデータファイルを作成する際に使用している文字を調べてそれぞれに固有の番号を割り当てます。

コード 文字種別
1バイト目 2バイト目 3バイト目
0x00 〜 0x7F - - 英数字、記号
(0x1Eと0x1Fは名前の途中で改行しないようにする処理で使用しています)
0x80 〜 0xF3 - - 1バイト日本語文字(ひらがな、カタカナ、濁点、半濁点、長音)
0xF4 〜 0xFF 0x30 〜 0x39
0x41 〜 0x5A
0x61 〜 0x7A
0x80 〜 0xF3
- 2バイト日本語文字(2136文字)
かな以外の日本語文字数(種類)が2136文字以下のとき
0xF4 〜 0xFE 0x30 〜 0x39
0x41 〜 0x5A
0x61 〜 0x7A
0x80 〜 0xF3
- 2バイト日本語文字(1958文字)
かな以外の日本語文字数(種類)が2137文字以上のとき
最大33642文字

フォントデータのサイズ制限により33642文字まで使用できない場合があります
Exultはもともと大量のフォントを扱う事を想定していないはずなのでパフォーマンス上の問題も発生しそうです

実際には5000文字もあれば十分だと思います。
0xFF 0x30 〜 0x39
0x41 〜 0x5A
0x61 〜 0x7A
0x80 〜 0xF3
0x30 〜 0x39
0x41 〜 0x5A
0x61 〜 0x7A
0x80 〜 0xF3
3バイト日本語文字(31684文字)
0xF4 0x30 〜 0x39
0x41 〜 0x5A
- ローマ字かな変換用の反転文字
(メニュー画面とcheat screen用のフォントのみ)

1バイトでは日本語文字すべては収まりきらないので、0xF4〜0xFFをシフトコードとし、最大3バイトで表現しています。
2、3バイト目のコード範囲が飛び飛びになっているのは、記号はゲーム内で特殊な機能を持たせている場合がある為です。 そういった箇所で日本語テキストが誤認識されないよう記号を全て除いています。
シフトJISの2バイト目が0x5C(¥)で誤動作する問題のような事を避けているという事です。

また、メニュー画面とcheat screenで使用するフォントはプレイヤー名入力のローマ字かな変換のときに使用する反転文字の為に36文字分を固定で割り当てています。(8文字はプログラムの都合で未使用)

日本語文字に1バイトのものと2、3バイトのものがあるのは、NPC名のサイズに16バイトという上限がある為です。
例えばLord Britishの場合カタカナ表記だと「ロード・ブリティッシュ」になり11文字です。日本語文字が全て2バイトだとすると22バイト必要となり16バイトの領域には収まりません。
これが半角カナのように1文字1バイト、濁点・半濁点にも1バイト使用すると「ロート゛・フ゛リティッシュ」の13バイトとなり16バイトの領域に収まります。
ひらがなも1バイトで表現できるようにしているのは、プレイヤー名で使用したいからです。

ひらがな、カタカナ以外の文字数(種類)が2136文字以下のときは2バイトで表現し、2137文字以上になったら2バイトと3バイトを併用して最大33642文字まで使用可能です。
ただしフォントデータのサイズに上限があるので33642文字まで使用できない場合もあります。
実際には5000文字もあれば十分だと思います。
JIS漢字コードで定められているのはJIS X 0208で6879文字、JIS X 0213でも11233文字です。

暫定版(2009-06-13)では1バイト文字が8文字、2バイト文字が744文字、合計752文字でしたが予想以上に使用文字数が多かったため割り当てを変更しました。
version 0.0.9(2011-09-18)までは2バイト文字は最大2136文字、3バイト文字は使用できませんでした。

もともとがNPC名のバイト数制限なのでファイルフォーマットを拡張するという方法も考えられますが、それはExultの改造範囲が広がり確認しきれなくなりそうだったので却下しました。
今でも遅々として進まないのに、さらに遅れる要因が増えるのは困るというのもあります。(^_^;
[TOP]
[戻る]