あーさん日記

https://akkera102.sakura.ne.jp/gbadev/ の中の人

不完全パッチ

「果てしなく青い、この空の下で...。」メモリアル版(v1.03)windows11不完全パッチです。下側メッセージのとき改行ズレがあります。

原理はGetTextMetricsA APIの戻り値を変更しています。

BOOL GetTextMetrics(
  [in]  HDC          hdc,
  [out] LPTEXTMETRIC lptm
);

LPTEXTMETRICのtmAveCharWidthを×2して、tmMaxCharWidthに値を入れています。MS ゴシックを使っているので等幅フォントです。半角を×2して全角としています。

参考ページ:
https://learn.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-gettextmetrics
https://www.tokovalue.jp/GetTextMetrics_U.htm

※
書き換え前:
411A18 FF1524304300 CALL DWORD PTR DS:[433024] GDI32.GetTextMetricsA

書き換え後:
00411A18   . E9 C30F0200    JMP AOZORA.004329E0

004329E0   > FF15 24304300  CALL DWORD PTR DS:[<&GDI32.GetTextMetric>; \GetTextMetricsA
004329E6   . 8B4D 80        MOV ECX,DWORD PTR SS:[EBP-80]
004329E9     49             DEC ECX
004329EA     03C9           ADD ECX,ECX
004329EC     894D 84        MOV DWORD PTR SS:[EBP-7C],ECX
004329EF    ^E9 29F0FDFF    JMP AOZORA.00411A1D

00011A18: FF E9
00011A19: 15 C3
00011A1A: 24 0F
00011A1B: 30 02
00011A1C: 43 00
00011A1D: 00 90
000329E0: 00 FF
000329E1: 00 15
000329E2: 00 24
000329E3: 00 30
000329E4: 00 43
000329E6: 00 8B
000329E7: 00 4D
000329E8: 00 80
000329E9: 00 49
000329EA: 00 03
000329EB: 00 C9
000329EC: 00 89
000329ED: 00 4D
000329EE: 00 84
000329EF: 00 E9
000329F0: 00 29
000329F1: 00 F0
000329F2: 00 FD
000329F3: 00 FF

※
おまけ 起動時ゲームCDのエラーメッセージボックス非表示
0000C605: 75 EB  

追記:
エンディング曲はCDDAのため、CDが入っていないと無音です。ご注意ください。

追記10/4:
「DEC ECX」命令を追加。右側メッセージの縦横表示は良好。下側メッセージは行ごとに1文字分足りてないので改行がおかしいです。

追記10/28:
全キャラグットエンドとおまけシナリオ確認済。

追記11/1:
FixMetricsというツールがあるのでそちらを使った方が無難かも。エロゲーマー御用達みたいです。