Wineバグ修正、動作リスト追加

文字色が抜ける問題は、

 --- dlls/gdi/freetype.c 22 Jul 2004 19:42:31 -0000      1.63
 +++ dlls/gdi/freetype.c 27 Jul 2004 15:51:01 -0000
 @@ -2243,6 +2243,7 @@
 
         pFT_Outline_Translate(&ft_face->glyph->outline, -left, -bottom );
 
 +       memset(buf, 0, needed);
         pFT_Outline_Get_Bitmap(library, &ft_face->glyph->outline, &ft_bitmap);
 
         if(format == GGO_GRAY2_BITMAP)
 @@ -2262,7 +2263,7 @@
         for(row = 0; row < height; row++) {
             ptr = start;
             for(col = 0; col < width; col++, ptr++) {
 -               *ptr = (*(unsigned int*)ptr * mult + 128) / 256;
 +               *ptr = ((unsigned int)*ptr * (mult-1) + 128) / 256;
             }
             start += pitch;
         }

という修正をしたら直った。(要するに0〜64の65階調で結果を返さなければいけないところで最大値が65になっていた。その他にも細かいバグが2つ程)

動いたゲーム

やっぱり動かない/動作に問題のあるゲーム

「ぼくの〜」は一応動くものの、ときどき「音声データを変換できません」というエラーが出る。デバッガで追っかけてみると、最終的にacmFormatSuggest()から呼ばれるPCM_GetFormatIndex()が失敗しているみたいだけど、どこを直せば良いのかまだ分かっていない。

沙耶の唄」のRuntime Errorはどうもゲーム自体のバグっぽい。たぶんソースとしてはこんな感じで(設定ファイルを読み込んでいる部分)

p=strtok(s,"\t =");
r=s+strlen(s);
mem=malloc(r-p);
assert(mem);

strtokがNULLを返すことが考慮されてなくて、巨大なメモリを確保しようとして失敗しているようだ。Windowsではベースアドレスが違うのでたまたま動いていたらしい。で、それをハンドアセンブル&バイナリ書き換えというかなりスマートじゃないやり方で直してみてもまだ動かない。現象としては背景が黒くなったままで最初のロゴすら表示されない。ここを抜ければあとは動く気はするんだけどなあ。

ロケ夏はBGMが鳴らない。Wineの以前のバージョンでは音が出ていた気もするので設定がおかしい可能性もある。らくえんの体験版は効果音は鳴るが声が出ない*1パルフェふぁんBOXに含まれるクイズゲームは、文字の表示が化ける、音が出ない等、まともに動かない。それ以前の工画堂作品(といってもパルフェシリーズだけだけど)については、リージョンの処理が時間かかりすぎて、動作はするけどパフォーマンス的にやや問題有。

動作テストしたゲームが偏りまくってるのは自分の趣味なので気にしちゃいけない。

*1:たぶん「ぼくの〜」と原因は同じだけど、このゲームの場合、声が聴こえないと面白さの大部分が削がれるので、動かない分類にした