xclannad(1)

調子に乗って今度は xclannad に手を出します。

 なんとかソースを拾ってきました。xclannad-7hc.tar.gz です。しかし、make でエラー。clannad は持っていなかったような気がするので、モチベーションが上がらないので終了。

と思いましたが、gcc のバージョンが上がっているので、より厳密なコンパイルをするようになったので、単純なエラーです。
 もともと、C 言語の自由さが好きだったし、その様に書いています。正しいことはいいことなのですが、余裕がないのは嫌です。もちろん、自由さ(曖昧さ)がバグのもとだということも理解できるので、面倒だとは思いながら従いますけど。
 そういえば、clannad は多分持っています。ただ、最初のバージョンじゃないので xclannad で動くかどうかわかりません。
 コンパイルは通りました。メディアを探さないといけません。

 clannad と 智代アフターを見つけました。
 これらのゲームの解像度は 800×600 なのですが、configure で 800×600 を指定しても 640×480 で表示されます。xlovesys.cc を書き直しました。
 初期画面は出ました。しかし、ウィンドウのタイトルが文字化けしています。
 テキストを表示させようとするところで、Cannot find glyph, code xxxx と大量に出して Segmentation fault します。
 プログラムは、Xkanon と同様に euc で記述されています。またテキスト表示部分を追いかけていくことになります。楽し!

 調べていくとやはり、font/codeconv.cc で受け取る文字は 1 バイト分しか受け取っていないようです。呼び出し元はかなりの数になるので、一つ一つ潰していくしかありません。

 grep で探すと、3 ファイル、7箇所のようです。
 ざっと見たところ unicode を2 byteとして処理しているようです。CJK統合漢字というものらしいです。

 font/text_stream.cc を修正し、Cannot find glyph, code xxx はなくなりましが、Segmentation fault します。しかしエラーメッセージは出ません。困りました。
 しかしこのソースの作者は sjis や euc の判別になんで 0 未満で判断するのでしょう。
 そうじゃなくて、1 バイトの最上位ビットで判断するのが正しい判定だと思うのですが。
 いや、これだけソースがかけるんだから、これは、作者によるトラップに違いありません。
他のところもそうなっていると思われます。

 どこで落ちているのかわからないので gdb を使いました。
 scn2k_text.cc:608
 で落ちているようです。

 ウィンドウタイトルは euc で描画しようとしているので文字化けします。UTF-8 に変えました。
 更に調べていくとバックログ周りで落ちているようです、現在のデータをバックログへコピーしようとして落ちています。コピーをコメントにしたら動きました。
 バックログはなくていいかな。

 先に進めるようになったら今度は、clannad のキャラの音声が出ないことに気づきました、智代アフターは出るようです。
 clannad の設定画面で音声のチェックが×になっていてマウスを乗せると、主人公の名前を岡崎朋也にしないと音声が出ないと出てきます。
 最初の画面で NAME を選んでも、初期化もできないし、文字入力もできません。どうすればいいんでしょう。

Xclannad

Posted by sirius