Current time: 30.11.2024, 01:41 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
HD-mod. Баги и доработки
Author Message
Archer30 Offline
Moderators

Posts: 1175
Post: #76

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


Latest ERA mods and scripts in development - My GitHub
27.11.2020 21:56
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #77

Berserker,

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

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

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

***

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

Так вот в эре она не должна учитывать эровские метки цвета (а они могут быть в несколько раз длиннее отображаемого текста!!). Сделай, пожалуйста.
(This post was last modified: 28.11.2020 10:01 by baratorch.)
28.11.2020 09:26
Find all posts by this user Quote this message in a reply
Panda Away
Moderators

Posts: 1005
Post: #78

Berserker, напоминаю, что сейчас в дистрибутиве Эра находятся два патча - campaign heroes as start heroes и inferno gates teleports to any town, которые не совместимы с HD mod версий RC8 и выше, и отправляют игру в краш. Лучше бы наверное удалить их, ведь всегда найдётся тот, кто активирует их.


Тот, кто просыпается рано - жаворонок, поздно - сова. А тот, кто плохо спит и ходит с черными кругами под глазами - панда!
28.11.2020 14:39
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #79

baratorch, понял, спасибо. Попробую оба. А с переменной нужен совет. Ты её всегда инициализируешь корректно до отрисовки текста? Могу я полагаться на её начальное значение как на цвет текста и возвращать его в качестве «рисуй оригинальным цветом»?

/Panda, удалю патч на кампании и гляну, что не так со вторым. Было очень удобно пользоваться телепортом в любой город)


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
28.11.2020 15:36
Find all posts by this user Quote this message in a reply
Panda Away
Moderators

Posts: 1005
Post: #80

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"), то патч заработает, но при этом теряется иконка города в городском портале, что совсем не айс. Ну и о стабильности такого решения как сказал уже Игрик, можно только гадать...


Тот, кто просыпается рано - жаворонок, поздно - сова. А тот, кто плохо спит и ходит с черными кругами под глазами - панда!
28.11.2020 16:30
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #81

Panda, багует только с твиком <Fix.RMG.StartingHeroInPrison> = 1 , разве нет?


Image: widget.png?style=banner2

Новейший Heroes Launcher
28.11.2020 17:14
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #82

Quote:Hota.FontColor = цвет
o_Medfont_Fnt->DrawTextToPcx16(....);
baratorch,
А есть причина не передавать цвет текста напрямую аргументом?
И кто возвращает значение Hota.FontColor после вызова функции таким способом?

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


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
29.11.2020 03:28
Find all posts by this user Quote this message in a reply
Panda Away
Moderators

Posts: 1005
Post: #83

daemon_n, нет, проверил, краш есть хоть <Fix.RMG.StartingHeroInPrison> = 1, хоть =0.


Тот, кто просыпается рано - жаворонок, поздно - сова. А тот, кто плохо спит и ходит с черными кругами под глазами - панда!
29.11.2020 03:55
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #84

Panda, краш ТОЛЬКО из-за нового диалога быстрого выбора замка и героя. Возможно, есть смысл расширить его.
Потому что простое переключение стрелочками ДАЁТ выбрать геря кампании. Вот я тоже проверил103


Image: widget.png?style=banner2

Новейший Heroes Launcher
29.11.2020 13:15
Visit this user's website Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #85

(28.11.2020 15:36)Berserker Wrote:  А с переменной нужен совет. Ты её всегда инициализируешь корректно до отрисовки текста? Могу я полагаться на её начальное значение как на цвет текста и возвращать его в качестве «рисуй оригинальным цветом»?

Так. Смотри, ты объявляешь свою переменную (назовем ее EraFontColor) и помещаешь указатель на нее в HotA.FontColor.
После помещения ее указателя в HotA.FontColor, другие (ХД, например), могут менять значение твоей EraFontColor через указатель. Но владеешь то EraFontColor - ты. Ты можешь инициализировать EraFontColor нулем и смело полагаться на ее начальное значение.
ХД поместит указатель на свою переменную в HotA.FontColor, только если не найдет там другого. Т.е. в текущих эре и хд, ХД пользуется переменной EraFontColor.
Хд не обнуляет и не меняет переменную так, чтобы нарушалась последовательность расцвечиваний в эре.
29.11.2020 14:28
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #86

(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 15:39
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #87

(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):
Очевидно, служебные символы участвуют в рассчете переноса слов в строках, что неправильно.
(This post was last modified: 29.11.2020 18:30 by baratorch.)
29.11.2020 18:29
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #88

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

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

Планируешь ли ты добавлять её вызов в код отрисовки текста с прокруткой? И если да, что отлично, то там текст уже корректно распарсенный с заменами на обычные теги либо серию неразрывных пробелов, в случае картинок у меня.
Image: image.png


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
29.11.2020 19:28
Find all posts by this user Quote this message in a reply
Berserker Online
Administrators

Posts: 16657
Post: #89

Новое обновление: https://mods.hmm35.ru/Era%20Update.exe
-) ERA учитывает цвет, который HD-мод устанавливает для своих нужд через переменную "HotA.FontColor".
-) Исправлено вычисление ширины символов. Изображения в тексте теперь корректно центрируются, а символы не пропадают.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
30.11.2020 08:08
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #90

Выпустил обнову ХД 5.2 RC12.
Пофиксил и добавил почти всё, о чем говорилось в этой теме. Может быть о чем-то забыл, пишите если так.
Опция HD+ добавляет отображение таймера, шахматный таймер и ряд геймплейных фиксов (не помню уже каких). Остальные фичи HD+, которые есть в Сод - недоступны.
Запилил отдельное онлайн-лобби. Правда я сомневаюсь в востребованности данной фичи...
01.12.2020 15:37
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group