Классические диалоги текстов с прокруткой разбивают текст на строки, каждая из которых отрисовывается отдельно. Соответственно, прокрутка идёт шагами построчно. Вот функция разбивки (0x4B58F0)
ApiJack.StdSplice(Ptr($4B58F0), @New_Font_TextToLines, ApiJack.CONV_THISCALL, 4);
Модуль Эры перехватывает её, очищает строки диалога и проводит свою разбивку с учётом тегов, выравниваний и изображений в тексте. Никакого отображения в левом верхнем углу не может быть в норме.
Собственно, вот все мои перехваты без учёта правки для китайского языка:
Code:
Core.Hook(@Hook_GetCharColor, Core.HOOKTYPE_BRIDGE, 8, Ptr($4B4F74));
Core.Hook(@Hook_BeginParseText, Core.HOOKTYPE_BRIDGE, 6, Ptr($4B5255));
Core.Hook(@Hook_CountNumTextLines, Core.HOOKTYPE_CALL, 5, Ptr($4B5275));
Core.Hook(@Hook_CountNumTextLines, Core.HOOKTYPE_CALL, 5, Ptr($4B52CA));
Core.Hook(@Hook_ScrollTextDlg_CreateLineTextItem, Core.HOOKTYPE_CALL, 5, Ptr($5BA547));
ApiJack.HookCode(Ptr($4B547B), @Hook_Font_DrawTextToPcx16_DetermineLineAlignment);
ApiJack.HookCode(Ptr($4B54EF), @Hook_Font_DrawTextToPcx16_End);
ApiJack.StdSplice(Ptr($4B5580), @New_Font_CountNumTextLines, ApiJack.CONV_THISCALL, 3);
ApiJack.StdSplice(Ptr($4B5680), @New_Font_GetLineWidth, ApiJack.CONV_THISCALL, 2);
ApiJack.StdSplice(Ptr($4B56F0), @New_Font_GetMaxLineWidth, ApiJack.CONV_THISCALL, 2);
ApiJack.StdSplice(Ptr($4B5770), @New_Font_GetMaxWordWidth, ApiJack.CONV_THISCALL, 2);
ApiJack.StdSplice(Ptr($4B57E0), @New_Font_GetTextWidthForBox, ApiJack.CONV_THISCALL, 3);
ApiJack.StdSplice(Ptr($4B58F0), @New_Font_TextToLines, ApiJack.CONV_THISCALL, 4);
// Fix TransformInputKey routine to allow entering "{" and "}"
Core.p.WriteDataPatch(Ptr($5BAFB5), ['EB08']);
Archer30, interesting. Is the issue preserved without HD mod?