Wake of Gods Forum | Форум Во Имя Богов

Full Version: HD-mod. Баги и доработки
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10
Berserker and Baratorch, this is just too good to be true! Now the Asian community enjoys the 32-bit mode at the same time with other parts of the world!
I cannot thank you enough for this. 132
Berserker,

в ХД теперь не работает расцветка текста такого плана

Hota.FontColor = цвет
o_Medfont_Fnt->DrawTextToPcx16(....);

Я не видел исходники, но можно как-то в эре восстанавливать исходное значение Hota.FontColor после использования, а не обнулять?

***

И еще. В героях есть такая функция
int __thiscall Fnt_GetLineWidth_sub_4B5680(void *this, const char *text_line)
она возвращает длину строки текста в пикселях и не учитывает символы { и }

Так вот в эре она не должна учитывать эровские метки цвета (а они могут быть в несколько раз длиннее отображаемого текста!!). Сделай, пожалуйста.
Berserker, напоминаю, что сейчас в дистрибутиве Эра находятся два патча - campaign heroes as start heroes и inferno gates teleports to any town, которые не совместимы с HD mod версий RC8 и выше, и отправляют игру в краш. Лучше бы наверное удалить их, ведь всегда найдётся тот, кто активирует их.
baratorch, понял, спасибо. Попробую оба. А с переменной нужен совет. Ты её всегда инициализируешь корректно до отрисовки текста? Могу я полагаться на её начальное значение как на цвет текста и возвращать его в качестве «рисуй оригинальным цветом»?

/Panda, удалю патч на кампании и гляну, что не так со вторым. Было очень удобно пользоваться телепортом в любой город)
Berserker, спасибо, было бы неплохо, если inferno gates teleports to any town будет исправлен, будет замечательно, т.к. без это патча постройка в городе совсем бесполезная. Что не так уже расписал Игрик:
"campaign heroes as start heroes.bin не может быть совместимым с диалогом HD, потому что он изменяет массив выбора героев, вроде бы делая этот массив по 1 или 2 байта (ЕМНИП). Краш обеспечен, потому что HD ничего о замене таких данных не знает.
   inferno gates teleports to any town.bin - я так понимаю HD создаёт свой диалог Городского Портала. При таких раскладах заплатка никак не может функционировать в диалоге HD, да и слава богу... Опять были бы краши".
Если выключить пункт "<UI.Ext.TownPortalDlg>" ( перевести в "0"), то патч заработает, но при этом теряется иконка города в городском портале, что совсем не айс. Ну и о стабильности такого решения как сказал уже Игрик, можно только гадать...
Panda, багует только с твиком <Fix.RMG.StartingHeroInPrison> = 1 , разве нет?
Quote:Hota.FontColor = цвет
o_Medfont_Fnt->DrawTextToPcx16(....);
baratorch,
А есть причина не передавать цвет текста напрямую аргументом?
И кто возвращает значение Hota.FontColor после вызова функции таким способом?

Функцию подсчёта длина строки/линии точно нужно перехватывать? Ведь я произвожу предобработку текста, вырезая всё между { и }.
daemon_n, нет, проверил, краш есть хоть <Fix.RMG.StartingHeroInPrison> = 1, хоть =0.
Panda, краш ТОЛЬКО из-за нового диалога быстрого выбора замка и героя. Возможно, есть смысл расширить его.
Потому что простое переключение стрелочками ДАЁТ выбрать геря кампании. Вот я тоже проверил103
(28.11.2020 15:36)Berserker Wrote: [ -> ]А с переменной нужен совет. Ты её всегда инициализируешь корректно до отрисовки текста? Могу я полагаться на её начальное значение как на цвет текста и возвращать его в качестве «рисуй оригинальным цветом»?

Так. Смотри, ты объявляешь свою переменную (назовем ее EraFontColor) и помещаешь указатель на нее в HotA.FontColor.
После помещения ее указателя в HotA.FontColor, другие (ХД, например), могут менять значение твоей EraFontColor через указатель. Но владеешь то EraFontColor - ты. Ты можешь инициализировать EraFontColor нулем и смело полагаться на ее начальное значение.
ХД поместит указатель на свою переменную в HotA.FontColor, только если не найдет там другого. Т.е. в текущих эре и хд, ХД пользуется переменной EraFontColor.
Хд не обнуляет и не меняет переменную так, чтобы нарушалась последовательность расцвечиваний в эре.
(28.11.2020 16:30)Panda Wrote: [ -> ]"campaign heroes as start heroes.bin не может быть совместимым с диалогом HD, потому что он изменяет массив выбора героев, вроде бы делая этот массив по 1 или 2 байта (ЕМНИП). Краш обеспечен, потому что HD ничего о замене таких данных не знает.

Да, совместимости нет и не будет. Чтобы хотя бы не вылетало, нужно вместо уплотнения данных расширять стек, но HD-мод всё равно увидит только максимум 16 героев. Поэтому смысла нет.

(28.11.2020 16:30)Panda Wrote: [ -> ]   inferno gates teleports to any town.bin - я так понимаю HD создаёт свой диалог Городского Портала. При таких раскладах заплатка никак не может функционировать в диалоге HD, да и слава богу... Опять были бы краши".
Если выключить пункт "<UI.Ext.TownPortalDlg>" ( перевести в "0"), то патч заработает, но при этом теряется иконка города в городском портале, что совсем не айс. Ну и о стабильности такого решения как сказал уже Игрик, можно только гадать...

Бинарным патчем функцию адского портала лучше вообще не трогать. Если нужно убирать проверку на тип города, совместимую с HD-модом, то нужно делать плагином. Сам inferno gates teleports to any town.bin по-любому уже может считаться устаревшим и рекомендован к удалению.
(29.11.2020 03:28)Berserker Wrote: [ -> ]
Quote:Hota.FontColor = цвет
o_Medfont_Fnt->DrawTextToPcx16(....);
baratorch,
А есть причина не передавать цвет текста напрямую аргументом?
Есть. Универсальный, работающий годами, код ХД, который не хочется менять.

Quote:И кто возвращает значение Hota.FontColor после вызова функции таким способом?
ХД возвращает.
Hota.FontColor = цвет
o_Medfont_Fnt->DrawTextToPcx16(....);[/quote]
Hota.FontColor = 0
и делает это в тот момент, в который не страшно эре.

Quote:Функцию подсчёта длина строки/линии точно нужно перехватывать? Ведь я произвожу предобработку текста, вырезая всё между { и }.
Я много в хд использую эту функцию подсчета длины. Я могу конечно сам ее поменять или, пихать в нее текст без цветовых кодов.
Просто мне кажется раз это фича эры, то фича должна быть доделана до конца.

В игре проверил, вроде проблем из-за этого нет, однако похоже есть место где и сами разрабы косячат с подсчетом длины (не используют свою же, упомянутую ф-ию) - это элемент диалога "многострочный текст с полосой прокрутки".

Вот пример одного текста с избыточной длиной кода расцветки эры(1), без расцветки(2) и с избыточной расцветкой простыми фигурными скобками(3):
Очевидно, служебные символы участвуют в рассчете переноса слов в строках, что неправильно.
baratorch, плагин на азиатские языки использует свою Fnt_DrawCharacter для GBK-пар символов, ничего не зная об HD. Я добавляю поддержку картинок в тексте, тоже свой перехват ставлю. Со временем, возможно, вовсе заменю вызов HD_Fnt_DrawCharacter своей с опциональной 32-битной отрисовкой. Но раз ты восстанавливаешь значение Hota.Color, то попробую использовать его в качестве значения по умолчанию, чтобы HD код работал без правок. Хотя передача параметров через глобальные переменные чуток костыльный способ со своими недостатками.

С функцией получения ширины строки, конечно, вопросы. Сам видишь, она часть внутренних функций отрисовки (как и DrawCharacter), не идеально подходящая на свободный вызов внешним кодом. Чем сложнее формат текста (простой/цветной/с тегами картинок/с выравниванием), тем геморойнее по указателю на любую часть текста вернуть ширину конкретной строки без репарсинга (точнее, невозможно). С теми картинками уже в расчёт включается ширина def/pcx, Приведи, пожалуйста, примеры кода, где ты используешь эту функцию в отрыве от вывода текста.

Планируешь ли ты добавлять её вызов в код отрисовки текста с прокруткой? И если да, что отлично, то там текст уже корректно распарсенный с заменами на обычные теги либо серию неразрывных пробелов, в случае картинок у меня.
Image: image.png
Новое обновление: https://mods.hmm35.ru/Era%20Update.exe
-) ERA учитывает цвет, который HD-мод устанавливает для своих нужд через переменную "HotA.FontColor".
-) Исправлено вычисление ширины символов. Изображения в тексте теперь корректно центрируются, а символы не пропадают.
Выпустил обнову ХД 5.2 RC12.
Пофиксил и добавил почти всё, о чем говорилось в этой теме. Может быть о чем-то забыл, пишите если так.
Опция HD+ добавляет отображение таймера, шахматный таймер и ряд геймплейных фиксов (не помню уже каких). Остальные фичи HD+, которые есть в Сод - недоступны.
Запилил отдельное онлайн-лобби. Правда я сомневаюсь в востребованности данной фичи...
Pages: 1 2 3 4 5 6 7 8 9 10
Reference URL's