Skip to content

Commit 21fcbfa

Browse files
committed
TSA: TH19 MSG is TH19 specific and does not apply to games after that
1 parent 3d71150 commit 21fcbfa

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

thcrap_tsa/src/layout.cpp

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ typedef HGDIOBJ WINAPI SelectObject_type(
4040

4141
DETOUR_CHAIN_DEF(CreateCompatibleDC);
4242
W32U8_DETOUR_CHAIN_DEF(CreateFont);
43+
W32U8_DETOUR_CHAIN_DEF(GetTextExtentPoint32);
4344
DETOUR_CHAIN_DEF(DeleteObject);
4445
DETOUR_CHAIN_DEF(SelectObject);
4546
W32U8_DETOUR_CHAIN_DEF(TextOut);
4647
auto chain_TextOutW = TextOutW;
48+
auto chain_GetTextExtentPoint32W = GetTextExtentPoint32W;
4749
/// -------------
4850

4951
/// TH06-TH09 font cache
@@ -669,7 +671,7 @@ size_t GetTextExtentBase(HDC hdc, const json_t *str_obj)
669671
SIZE size = {0};
670672
const char *str = json_string_value(str_obj);
671673
const size_t str_len = json_string_length(str_obj);
672-
GetTextExtentPoint32(hdc, str, str_len, &size);
674+
chain_GetTextExtentPoint32U(hdc, str, str_len, &size);
673675
return size.cx;
674676
}
675677

@@ -682,6 +684,40 @@ size_t TH_STDCALL text_extent_full(const char *str)
682684
return lay.cur_x;
683685
}
684686

687+
BOOL layout_GetTextExtentPoint32A(HDC hdc, LPCSTR lpString, int c, LPSIZE psizl) {
688+
layout_state_t lay = { hdc };
689+
690+
BOOL ret1 = chain_GetTextExtentPoint32U(hdc, lpString, c, psizl);
691+
if (!ret1) {
692+
return FALSE;
693+
}
694+
695+
layout_process(&lay, NULL, lpString, c);
696+
psizl->cx = lay.cur_x;
697+
698+
return TRUE;
699+
}
700+
701+
BOOL layout_GetTextExtentPoint32W(HDC hdc, LPCWSTR lpString, int c, LPSIZE psizl) {
702+
BOOL ret1 = chain_GetTextExtentPoint32W(hdc, lpString, c, psizl);
703+
if (!ret1) {
704+
return FALSE;
705+
}
706+
707+
size_t lpString_len = c * UTF8_MUL + 1;
708+
VLA(char, lpString_utf8, lpString_len);
709+
size_t lpString_utf8_c = StringToUTF8(lpString_utf8, lpString, lpString_len);
710+
711+
layout_state_t lay = { hdc };
712+
713+
layout_process(&lay, NULL, lpString_utf8, lpString_utf8_c);
714+
psizl->cx = lay.cur_x;
715+
716+
UTF8_FREE(lpString);
717+
718+
return TRUE;
719+
}
720+
685721
size_t TH_STDCALL text_extent_full_for_font(const char *str, HFONT font)
686722
{
687723
// TH08 doesn't create the DC prior to the first binhacked call of this.
@@ -798,6 +834,9 @@ void layout_mod_detour(void)
798834
"DeleteObject", fontcache_DeleteObject, &chain_DeleteObject,
799835
"TextOutA", layout_TextOutU, &chain_TextOutU,
800836
"TextOutW", layout_TextOutW, &chain_TextOutW,
837+
838+
"GetTextExtentPoint32W", layout_GetTextExtentPoint32W, &chain_GetTextExtentPoint32W,
839+
"GetTextExtentPoint32A", layout_GetTextExtentPoint32A, &chain_GetTextExtentPoint32U,
801840
NULL
802841
);
803842

thcrap_tsa/src/th06_msg.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ const msg_format_t END_TH10 = { 2, 1, msg_crypt_th09, {
881881

882882
const msg_format_t* msg_format_for(tsa_game_t game)
883883
{
884-
if(game >= TH19) {
884+
if(game == TH19) {
885885
return &MSG_TH19;
886886
} else if(game >= TH14) {
887887
return &MSG_TH14;

0 commit comments

Comments
 (0)