xsys3 再び

また、xsys3 を動かしてみます。

http://www.02.246.ne.jp/~torutk/cxx/x11/string.html を見て、日本語表示を試してみました。xft を使った日本語表示のみ、日本語で表示できました。

 そこで、xft を使って xsys3 でテキストの表示を試してみることにしました。ところが、xft では表示されませんでした。試しに euc-jp ロケールを追加し、ロケールに euc を指定してサンプルをコンパイルしてみたら、国際化対応関数で日本語の表示ができました。

 xsys3 でも、euc に文字列を変換して、表示することができました。なかなか表示されず、トレースしていったら、最終的に一箇所、#if 1 で切り分けられていた箇所を #if 0 にしたら、文字が表示されました。

 元の XDrawImageString16 関数では日本語が豆腐になってしまいますが、XbmDrawImageString 関数では、ちゃんと表示されました。他の関数も一部 Xmb の関数に変更しました。

 夢幻泡影を動かしてみましたが、一部実装されていない命令があるようです。選択肢の選択の枠とかが描画されなかったりします。それ以外では、特に問題はないようです。もっとも、音が一切でないのですが。

 他のソフトも試してみました。DPS 全部はうまく動かないようです。Rance4.1、Rance4.2 は動きました。Ambivalents 二律背反は文字が重なってしまいました。

 よく調べると、何度も同じ文章を描画しています。また、カラーマップを書き換えているようです。カラーマップは画像を表示するとき、画像のカラーマップを使っていますが、文字の描画では使っていません。

 カラーマップを使って文字を描画するようにしないと駄目なようです。ディスプレイに色を登録する処理は、XStoreColor と、XStoreColors を #define で無効にしてありますが、登録しようとしている色を利用して、テーブルを書き換えることにしました(pixels配列)。

 結果、二律背反は文字をフェードアウトさせていました。また、選択の枠も表示されるようになりました。

 DPS 全部は、ゲーム選択画面の文字が表示されません。なぜでしょう。適当にクリックしていくとゲームが始まりますが、ゲーム中の選択肢の文字が表示されなくなりました。

 ゲーム中の選択肢の文字色は #eeeeee ですが、これだと表示されず、強制的に #ffffff にすると表示されます。文字色が #eeeeee の時は #ffffff にするようにしたところ、ゲーム中の選択肢が表示されるようになりました。それでも、ゲーム選択画面では、吹き出しの中のメッセージが表示されません。

 更に調べました。今度は、#if 0 で処理が切り分けられていた場所を、#if 1 にしたところ、吹き出しも、選択肢も表示されるようになりました。

とりあえず動かしてみたゲーム。

  • ALICEの館3
  • D.P.S 全部
  • Rance 4.1 〜お薬工場を救え〜
  • Rance 4.2 〜エンジェル組〜
  • Ambivalenz -二律背反-
  • あゆみちゃん物語
  • ぷろ すちゅーでんとG
  • 宇宙快盗 ファニーBee
  • 夢幻泡影

 試しに国際化対応関数からもとの関数に戻し font 指定をいろいろ変えてやったら、日本語が普通に表示されました。さらに、 #if 0 とか #if 1 を戻しても正しく日本語が表示されました。何だ。結局日本語表示の問題は、カラーマップをきちんと処理していなかったせいのようです。

 これで音以外はなんとかなったと思います。音がないとさびしいけど、FM 音源を実装するのは無理でしょ。

 修正を整理し、必要のない修正はもとに戻し、さらに、DEPTH_24 の定義でコンパイルを分けるのはやめました。display の色深度をみて、8 ビットカラーと 24 ビットカラーの両方で動くようにしました。もっとも、8 ビットカラーはもとの処理をするだけで、動くかどうかチェックはしていません。

 パッチのみですが、作ったパッチはラズパイでエロゲのXsys3からどうぞ。

xsys3

Posted by sirius