(12.12.2021 21:01)planetavril Wrote: [ -> ]The final version will also be in English or will remain only Russian?
Если никто так и не сделает перевод, то только на Русском. Увы, в английском я ничего не понимаю.
(12.12.2021 21:05)Raistlin Wrote: [ -> ]Кстати, код создания охраны я недавно переписал с нуля для своего проекта - могу прислать, может быть, это будет полезно.
Спасибо, но на ассемблере наверное всё равно придётся переписать всю функцию целиком, вместе с корневыми воговскими функциями на пропуск фазы атаки. Прямо сейчас и начну. Заодно и в редактор монстров поддержку охраны добавлю.
Насколько я помню, ход они не пропускают - просто у них нулевая скорость. Я обнулял им скорость после каждого действия в битве, а также там пришлось поставить хук на вычисление скорости при замедлении - движок игры норовил поставить 1. Хук я поставил в 0x448A2E, сама функция выглядит так:
PHP Code:
// Блокируем установку минимальной скрости существа на 1, если это охранник.
_int_ __stdcall ModifySlowMul(LoHook* h, HookContext* c)
{
_BattleStack_* Stack = (_BattleStack_*)c->ecx;
// Если у существа есть босс
if ((int)Boss[Stack->side][Stack->index_on_side])
{
// Перепрыгиваем установку еах на 1
c->return_address = 0x448A37;
return NO_EXEC_DEFAULT;
}
return EXEC_DEFAULT;
}
Массив Boss из 42-х элементов хранит указатели на стеки Санта-гремлинов, призвавших текущих охранников.
Переписал всю функцию охраны Санта-Гремлинов. Весь отвратительный воговский код убран, работают оригинальные содовские вызовы для получения соседних клеток отряда и призыва монстров на них, соответственно, код функции стал в разы короче и работает быстрее. Осталось сбалансировать параметры охраны относительно силы родительского монстра и добавить расстановку из редактора.

(12.12.2021 21:05)Raistlin Wrote: [ -> ]XEPOMAHT, 0x75CDA2. Жаль, что на Windows 2003 не получится открыть мою базу для IDA - там эта функция есть...
Кстати, код создания охраны я недавно переписал с нуля для своего проекта - могу прислать, может быть, это будет полезно.
Поделись, пожалуйста, в целевой теме по Сантам..
http://wforum.heroes35.net/showthread.php?tid=6342
Хорошо, но не прямо сейчас, а через некоторое время, когда закончу и выложу соответствующее обновление.
Функция охраны сделана полностью.

Вдогонку к охране сант сделаны следующие изменения:
1. Взаимоотношений охраны сант к самим сантам в ERA+ нет никаких. После смерти сант, охрана будет охранять их трупы. В ВоГе охране давалась нормальная скорость после смерти хозяев, но это реализовано чёрт знает как и как нибудь (в исходных кодах на СИ разобраться не удалось, т.к. данная фенечка была зашифрована профессиональными программистами так, что прочитать это может только такой же другой профессиональный программист, до чего автор ERA+ пока не дорос, увы), поэтому в ERA+ подобный механизм я повторять не стал, ну и ладно...
2. Охрана - теперь полноценные призывные монстры с соответствующими свойствами.
3. Движок игры воспринимает охрану сант так же как боевых машин, т.е. для победы достаточно перебить самих сант, охрану можно не трогать. Соответственно, ежераундные обнуления скорости и хуки-костыли на изменение скорости при колдовстве ускорения/замедления и каких-то новых заклинаний, изменяющих скорость не боевых машин, больше не требуются.
4. Боевые машины теперь можно раздавать нейтралам - игра при этом не будет пытаться удалить БМ с отсутствующих на поле боя героев.
5. Тифон теперь напрямую контролирует, каким монстрам показывать синий прямоугольник с количеством монстров, а каким нет.
XEPOMAHT, что касается цены откупа?
Призывные ж монстры не учитываются при откупе?!
Касательно 1 - когда я переписывал вызов охраны, я даже не пытался разобраться в воговских костылях и сделал по-своему: в триггере BG1 (после любого действия в битве) я просто пробегался по всем охранникам и ставил им скорость 0, а также хукнул замедление - все остальное обработалось само. То есть, 1 хук и 1 триггер + табличка на 40*4 байт для хранения статуса охранника (если точнее, то указателя на стек, призвавший охрану).
(14.12.2021 14:59)daemon_n Wrote: [ -> ]что касается цены откупа?
В рассчёт откупа входят только отряды армии, в структуре которых указан Номер_слота_в_армии_героя. У призваных естественно там будет -1, кроме демонологии.
(14.12.2021 18:41)Raistlin Wrote: [ -> ]в триггере BG1 (после любого действия в битве) я просто пробегался по всем охранникам и ставил им скорость 0, а также хукнул замедление - все остальное обработалось само. То есть, 1 хук и 1 триггер + табличка на 40*4 байт для хранения статуса охранника (если точнее, то указателя на стек, призвавший охрану).
У меня параметры устанавливаются сразу после призыва и действуют до конца боя. ERM-триггеры не используются, скорость не меняется, всегда остаётся на 0.
(14.12.2021 20:56)XEPOMAHT Wrote: [ -> ]В рассчёт откупа входят только отряды армии, в структуре которых указан Номер_слота_в_армии_героя. У призваных естественно там будет -1, кроме демонологии.
А вот и нет.
Боевые машины тоже входят в стоимость откупа.
Для катапульты стоит стоимость в 1 золотой.
В хоте, я заметил, все машины тоже на время боя стоят 1 золотой.
У себя в сборке я тоже всем машинам на время боя сделал такую цену, что выглядит более логичным, ведь отступление сохраняет машины.
Так что я и затриггерился, услышав про боевые машины. Но, как сказал
Bes, раз существа призванные, то вряд ли учитываются при подсчёте откупа
Дошла очередь до заполнения зон препятствий новыми объектами в генераторе случайных карт. Пока как-то так, приходится осваивать с 0 методом научного тыка, хотя кто-то наверное знает, что в одном известном моде такое уже делали (но знаниями с сообществом естественно не поделились).

Как я понимаю, эти объекты будут иметь новый подтип?
(19.12.2021 15:10)Grossmaster Wrote: [ -> ]Как я понимаю, эти объекты будут иметь новый подтип?
Они имеют новые типы - заняты слоты неиспользованых в игре объектов. Подтип всегда 0, чтобы использовать общий содовский текстовик для всех объектов как в редакторе карт, так и в игре.
Ну и легендарные мемные кактусы - уже в ERA+

XEPOMAHT, приятные новости. Я сразу же приметил отсутствие оригинальных объектов при генерации. Это трудности в ходе эксперимента, или намеренное решение для испытания генерации? Или я что-то не так понял?