Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Меняем разрешение в Героях (HDmod)
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > HD-мод
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55
hippocamus
Быстрая битва - это зgорово! Наверное лучшая фича у них. По сравнению со спорным одновременным ходом.
Sadness
Возможно это баг Тазара, кстати. Только что, в ожидании хода оппонента сделал райтклик на Тазара (естественно он главный + светился в таверне), и игра закрашилась
baratorch
Цитата(Vaflya @ 21 Aug 2012, 23:14) *
Возможно это баг Тазара, кстати. Только что, в ожидании хода оппонента сделал райтклик на Тазара (естественно он главный + светился в таверне), и игра закрашилась

не могу повторить. без крашлога и сейва точно помочь ничем не смогу.
Sadness
Цитата(baratorch @ 22 Aug 2012, 06:00) *
Цитата(Vaflya @ 21 Aug 2012, 23:14) *
Возможно это баг Тазара, кстати. Только что, в ожидании хода оппонента сделал райтклик на Тазара (естественно он главный + светился в таверне), и игра закрашилась

не могу повторить. без крашлога и сейва точно помочь ничем не смогу.


Я попытаюсь воспроизвести, но не гарантирую успех.
Sadness
К сожалению, ничего не вышло, как не тыкал - видимо нужно ждать спонтанно данный баг.
Немного потестировал RC3, есть парочка нюансов, буквально на вскидку.

Сразу же в глаза, ни один из курсоров не поддерживает CTRL, чтобы курсор не покидал приделы окна. Другие клавиши пробовал - не помогло. :-)
Дальше - при включённых курсорах (<SystemCursors> = 1) в открывающемся окошке захваченных нычек 2+ уровня пропадает курсор!
"Лечится" только в случае, если нет свободного слота для новых существ, втыкаем Enter, нам пишут что местов нет, курсор появляется.
Ну и третье: было очень удобно запихивать сейвы автоматом - в папку. Сейчас всё в корневую падает, не есть хорошо.

Если ещё что-либо найду - допишу.

ps
Я уже нинуп оказывается! :-)
ppss
На счёт бага Тазика. Либо это точно связано именно с этим героем, либо гипотетически, возможно, что в таверне будет светиться таз с 1 ангелом, а не лошок с ангелом, 3 арчерами, 1 кентавром и двумя гнолями. Лично я не встречал на практике, что светится в таверне герой с "меньшим количеством HP", даже несмотря на уровень.
Sadness
Цитата(Vaflya @ 22 Aug 2012, 09:57) *
К сожалению, ничего не вышло, как не тыкал - видимо нужно ждать спонтанно данный баг.
Немного потестировал RC3, есть парочка нюансов, буквально на вскидку.

Сразу же в глаза, ни один из курсоров не поддерживает CTRL, чтобы курсор не покидал приделы окна. Другие клавиши пробовал - не помогло. :-)
Дальше - при включённых курсорах (<SystemCursors> = 0) в открывающемся окошке захваченных нычек 2+ уровня пропадает курсор!
"Лечится" только в случае, если нет свободного слота для новых существ, втыкаем Enter, нам пишут что местов нет, курсор появляется.
Ну и третье: было очень удобно запихивать сейвы автоматом - в папку. Сейчас всё в корневую падает, не есть хорошо.

Если ещё что-либо найду - допишу.

ps
Я уже нинуп оказывается! :-)
ppss
На счёт бага Тазика. Либо это точно связано именно с этим героем, либо гипотетически, возможно, что в таверне будет светиться таз с 1 ангелом, а не лошок с ангелом, 3 арчерами, 1 кентавром и двумя гнолями. Лично я не встречал на практике, что светится в таверне герой с "меньшим количеством HP", даже несмотря на уровень.


Кстати, ещё кое-что:
Русские символы из игры копируются в неподдерживаемой кодировке, возможно это так же исправляется, как в своё время исправлялись русские символы в eng+rus pack
tolich
Цитата(Vaflya @ 22 Aug 2012, 20:41) *
Русские символы из игры копируются в неподдерживаемой кодировке.
Выбрать русскую раскладку клавиатуры перед нажатием Ctrl+C.
hippocamus
Вафля, пожалуйста, избегайте жаргона, не принятого на этом форуме. Мне пришлось всю страницу пересмотреть, чтобы вломиться, что тазик - это Тазар.
Sadness
Цитата(hippocamus @ 22 Aug 2012, 22:19) *
Вафля, пожалуйста, избегайте жаргона, не принятого на этом форуме. Мне пришлось всю страницу пересмотреть, чтобы вломиться, что тазик - это Тазар.


Воу) извиняй)
Тазар для меня является тазиком года эдак с 2005, когда начал активно играть в онлайн)
Prizvel
Выхватил вылет, вот содердимое HD_CRASH_INFO.TXT:




Shurup
Небольшие пожелания к лаунчеру:
- если будет куда, добавить кнопку "открыть папку с игрой в проводнике".
- Где-то в лаунчере отображать номер версии HD Мода.
- Вернуть "текущее разрешение экрана" в список разрешений (или я просто не знаю баг, почему эта опция выпилена?)

По самой игре
- отвязать родные настройки игры от реестра.
Vizit0r
Цитата(Shurup @ 23 Aug 2012, 10:00) *
- Где-то в лаунчере отображать номер версии HD Мода.

двумя руками за.

RC4 - а не много ли кандидатов? уже ж вроде весь функционал из 2.8 перенесен, баги выловлены, а дополнительный функционал уже можно добавлять в дробных версиях - 3.X(X).

Впрочем, дело хозяйское (точнее, авторское)
hippocamus
Играю и наслаждаюсь быстрой битвой с отменой. Но поймал баг:
- боевые машины (в данном случае тележка) не восстанавливаются при переигрывании (может быть только в том случае, если при быстрой битве была уничтожена ТОЛЬКО тележка, не знаю).

И проблемы с кнопкой "Пригласить героя". Вместо неё красные круги зачёркнутые на жёлтом фоне. Играть можно, но ошибка ресурсов мешает..
baratorch
да, спасибо, боевые машины совсем из головы вылетели.
то же должно происходить и с баллистой/палаткой/пушкой.

ща, посплю, поправлю и выложу новую версию. в новой версии, кстати, вторичный навык при повышении опыта будет быстро браться даблкликом.
Etoprostoya
Цитата(hippocamus @ 23 Aug 2012, 21:48) *
И проблемы с кнопкой "Пригласить героя". Вместо неё красные круги зачёркнутые на жёлтом фоне. Играть можно, но ошибка ресурсов мешает..

Наверняка сборка от Чёрного Фантома? Там ещё при правом клике на гарнизоне на карте какая-то ерунда показывается. Если так, то в низу первого сообщения у него в теме есть фикс этой проблемы.
Sadness
Появлась идейка, довольно лёгкая для исполнения:
В окне найма существ можно набрать цифрами количество, но, обычно это не столь необходимо. А вот в рынке - как раз очень нужно!
Можно было бы ввести интеллектуальный ввод, помимо примитивного. Поясню:
если менять, например, самоцветы на золото, мы можем выбрать 10 самоцветов, им будет соответствовать, скажем, 500 золота.

А вот если нам нужно получить 500 золота - мы вводим в соответствующее поле, и мод сам считает, сколько самоцветов нам на это нужно потратить.
Округление, разумеется, в большую сторону потребуется сделать, например нужно 1000 золота, курс 1:37, значит при вводе 1000 золота, мод автоматически переведёт это значение на 1036, которым будет соответствовать 29 единиц ресурса (дерево или руда, если это принципиально).


Так же есть небольшой баг с временным пропаданием героя, например, в ожидании хода оппонента на главного героя нападает лошок, проигрывает, после чего сам исчезает, а вместе с ним изчезает и главный герой до конца хода, потом, разумеется, появляется. Иначе бы это был критичный баг :-)
Vizit0r
предложение - в окне обмена сделать, чтобы например при клике по кнопке передачи артов с зажатым Ctrl или Alt передавались только неиспользуемые артефакты (с рюкзака в рюкзак). Одетые остаются на герое.
Ндоедает порядком, когда в богатых картах у героя за несколько битв полностью забитый рюкзак, и больше не берутся - приходится создавать героев и по одному перекидывать ненужные арты.
SAG19330184
Цитата(Vizit0r @ 24 Aug 2012, 09:56) *
предложение - в окне обмена сделать, чтобы например при клике по кнопке передачи артов с зажатым Ctrl или Alt передавались только неиспользуемые артефакты (с рюкзака в рюкзак). Одетые остаются на герое.
Ндоедает порядком, когда в богатых картах у героя за несколько битв полностью забитый рюкзак, и больше не берутся - приходится создавать героев и по одному перекидывать ненужные арты.

с Shift - ТОЛЬКО используемые, с CTRL - ТОЛЬКО неиспользуемые. Надоедает, что вместе с нужными артефактами передаются все свитки с ненужной магией (типа призыва лодки или защиты от стихий)

Бараторч, сложно ли реализовать мини-блокнот в сейве? если игра откладывается, то потом сложно вспомнить что хотел сделать и в особенности из каких внешних двеллов уже забрал армию, а из каких - нет. делать пометки в обычных текстовых файлах неудобно - много времени на переключение из игры, создание файла, добавление туда информации, поиска нужной папки для сохранения
Vizit0r
проверил - был неправ.
baratorch
Цитата(SAG19330184 @ 24 Aug 2012, 15:21) *
Цитата(Vizit0r @ 24 Aug 2012, 09:56) *
предложение - в окне обмена сделать, чтобы например при клике по кнопке передачи артов с зажатым Ctrl или Alt передавались только неиспользуемые артефакты (с рюкзака в рюкзак). Одетые остаются на герое.
Ндоедает порядком, когда в богатых картах у героя за несколько битв полностью забитый рюкзак, и больше не берутся - приходится создавать героев и по одному перекидывать ненужные арты.

с Shift - ТОЛЬКО используемые, с CTRL - ТОЛЬКО неиспользуемые. Надоедает, что вместе с нужными артефактами передаются все свитки с ненужной магией (типа призыва лодки или защиты от стихий)

так это с самых первых бета-версий в 3.0 есть

hippocamus
Ещё ошибка - при касте Заклинательниц они
- на секунду синеют и замирают (должно быть быстрее)
затем накладывают закл и
- карта и интерфейс исчезает, остаётся только диалог (бой), даже рамочки у него нет, всё остальное чёрное
Восстанавливается всё при открытии книги заклинаний вручную. Или после окончания боя. Т.е. оно не критично, но неприятно опять же.
Vizit0r
Цитата(baratorch @ 24 Aug 2012, 13:31) *
Цитата(SAG19330184 @ 24 Aug 2012, 15:21) *
Цитата(Vizit0r @ 24 Aug 2012, 09:56) *
предложение - в окне обмена сделать, чтобы например при клике по кнопке передачи артов с зажатым Ctrl или Alt передавались только неиспользуемые артефакты (с рюкзака в рюкзак). Одетые остаются на герое.
Ндоедает порядком, когда в богатых картах у героя за несколько битв полностью забитый рюкзак, и больше не берутся - приходится создавать героев и по одному перекидывать ненужные арты.

с Shift - ТОЛЬКО используемые, с CTRL - ТОЛЬКО неиспользуемые. Надоедает, что вместе с нужными артефактами передаются все свитки с ненужной магией (типа призыва лодки или защиты от стихий)

так это с самых первых бета-версий в 3.0 есть

я не всегда имею возможность читать ченч-логи при выходе новых версий. Сейчас вот читаю описание на сайте - много интересностей нарыл, оказывается я дофига всего пропустил.
Кстати, про Ctrl и Shift при передаче артов там что-то ни слова не нашел.

baratorch, спасибо за мегамод!

P.S.
Цитата
- [Ctrl]+click и [Shift]+click на героя/замок в окне приключений перемещает их вверх/вниз в списках.

на замки работает, на героев нет. левой, правой КМ, левые-правые Ctrl\Shift - неважно.
baratorch
Цитата(Vizit0r @ 24 Aug 2012, 18:54) *
я не всегда имею возможность читать ченч-логи при выходе новых версий. Сейчас вот читаю описание на сайте - много интересностей нарыл, оказывается я дофига всего пропустил.
Кстати, про Ctrl и Shift при передаче артов там что-то ни слова не нашел.
...
Цитата
[Ctrl]+click и [Shift]+click на героя/замок в окне приключений перемещает их вверх/вниз в списках.

на замки работает, на героев нет. левой, правой КМ, левые-правые Ctrl\Shift - неважно.

вы смотрели описание актуальное для 2.80

описание актуальное для 3.0 RC1 здесь: http://sites.google.com/site/heroes3hd/description3
оно станет доступным из меню сайта позже
в комплекте с 3.0 идет файл beta changelog.txt или rc changelog.txt - можете смотреть что изменилось относительно RC1
Sadness
+1 баг в RC4 и последнем хотфиксе:

кнопки быстрой покупки существ статичны, то бишь на 7 позиции в кастле - всегда ангелы. А если, предположим, у меня не отстроены лошади и грифы - то 7 кнопка будет пустая. Но, несмотря на это, рабочая. А при клике на ангелов, собственно, выдаёт монахов, потому что не отстроены 3 и 5 здания.
Соответственно, логично предположить, что кнопка скупки из портала в данже - не работает, т.к. восьмая позиция неактивна.
Sadness
И да, катастрофически не хватает захвата окном курсора при удержании CTRL
baratorch
HoMM3 HD 3.0 RC5:

http://sites.google.com/site/heroes3hd/rus/download

Цитата
RC4 -> RC5 (26.08.2012)


RC4 хотфикс:
[-] ошибка с исчезновением боевых машин при переигрывании автобоя
[+] вторичный навык при повышении опыта быстро берётся даблкликом.
[ ] в окне обмена работают сочетания [CTRL] или [SHIFT] + кнопка передачи стека из ХД 2.9,
[ ] функция полной передачи армии с одновременным выбором единички доступна теперь по [ALT] + кнопка передачи стека

Общее:
[-] исправлена пара ошибок режима 32-bit MMX: при не измененном масштабе картинки но измененном размере окна применялся фильтр, при некоторых разрешениях при запуске в полноэкранном режиме смещалась влево картинка игры
[+] добавлена возможность не давать курсору покинуть окно игры.
- - - [CTRL]+[TAB] - освобождает/захватывает окном курсор.
- - - < ClipCursor > = 1 - курсор захвачен окном при запуске игры, < ClipCursor > = 0 - не захвачен при запуске.


InterfaceExtensions:
[-] исправлена быстрая покупка существ в городе по клику на иконку с приростом (уровень существа был привязан к кнопке статически)

TournamentExtensions:
[+] добавлено глобальное ускорение взаимодействия с картой (как в WT, но с нюансами)
- - - при посещении/поднятии ряда объектов на карте не выводится стандартное окно сообщения, однако информация выводится в правой нижней панели окна приключений (как при подборе ресурсов)
- - - время отображения информации в инфо-панели равно 7 сек. (оригинальная инфа о подборе ресурса - 5 сек.)
- - - включается/отключается опцией < SkipMapMsgs >
Объекты, подвергшиеся нововведению:
- шахты ресурсов, мельницы, мистический сад, сарай, тюрьма, вуаль тьмы, маяк, палатка ключника, буй, обелиск, логово воров, русалка, водоем, обломки, святилище, камень учения, оазис, бивачный костер
- повозка, морской сундук (если не артефакт)
- цветной страж (если палатка не посещена)
- магический колодец (если воссстановил ману, то в инфо-панели рисуется не стандартный текст, а иконка очков заклинаний с количеством)
- магический источник (если удвоил ману, то в инфо-панели рисуется не стандартный текст, а иконка очков заклинаний с количеством)
- сирены
- библиотека просвещения
- картограф (если карта уже куплена)
- скелет, пирамида, хижина провидца, банки существ, склеп, улей, консерватория, утопия, могила воина, покинутый корабль, место кораблекрушения (если пустые)
- все объекты, изменяющие боевой дух/удачу
- все объекты бесплатно повышающие на +1 первичные навыки
- будки с заклинаниями (если уже изучено)
- артефакты
- дерево знаний (если повышает бесплатно или уже повышало)
- поднятие существ некромантией после битвы
hippocamus
Спасибо за нововведения.
Мой баг-репорт остался незамеченным, или просто пока не смотрел?
Цитата(hippocamus @ 24 Aug 2012, 15:05) *
Ещё ошибка - при касте Заклинательниц они
- на секунду синеют и замирают (должно быть быстрее)
затем накладывают закл и
- карта и интерфейс исчезает, остаётся только диалог (бой), даже рамочки у него нет, всё остальное чёрное
Восстанавливается всё при открытии книги заклинаний вручную. Или после окончания боя. Т.е. оно не критично, но неприятно опять же.



Разрешение 1280х1024. Все остальные настройки по умолчанию.
Bes
baratorch

ты реально меня восхищаешь и в тоже время убиваешь...
неуспеваю я твою новость про HD в ВК опубликовать, как ты спустя 11 часов новую версию выдаёшь...
Bes
кстати, а где ссылка на офиц.странице HD на скачивание RC6?
я конечно же скачал, но пришлось мудрить с ссылками
hippocamus
Бараторч, а можешь сделать кроме кнопки "Переиграть вручную" кнопку "Автобой с магией"? Иногда банально герой вешает вначале общее ускорение или благословение, и исход битвы круто меняется, неохота опять же каждый раз переигрывать вручную.
Sadness
Цитата(hippocamus @ 26 Aug 2012, 21:50) *
Бараторч, а можешь сделать кроме кнопки "Переиграть вручную" кнопку "Автобой с магией"? Иногда банально герой вешает вначале общее ускорение или благословение, и исход битвы круто меняется, неохота опять же каждый раз переигрывать вручную.



тогда неплохо было бы для онлайна "переиграть бой", после боя вручную ))
и зациклить)
SAG19330184
нужна опция: отключение читкодов в турнирном режиме
AlexSpl
2baratoch: На HW ответить не могу. Раз зашла речь про квик-комбат, то, может, чем поможет эта инфа. В принципе там вся тема посвящена багам квика.
Berserker
Жесть, нужно чаще использовать быструю битву и брать много гидр.
Sav
Это точно был SoD 3.2? Что-то непохоже на правду, в коде явственно прописано бить только тех, кто рядом (цикл по рядом стоящих гексам). В отладчике в коде многоголового удара при быстрой битве гидра бьёт не больше стеков, чем надо.
AlexSpl
Цитата
Это точно был SoD 3.2?

Не совсем - 4.0 RU. Хотя какая разница?

Цитата
В отладчике в коде многоголового удара при быстрой битве гидра бьёт не больше стеков, чем надо.

Точно квик-комбат, а не автобой смотрите? Неплохо бы аналогичный лог увидеть для сравнения.

Цитата
Жесть, нужно чаще использовать быструю битву и брать много гидр.

Не только гидры так странно себя ведут, но и церберы ещё, к примеру

baratoch пишет:
Цитата
в квике, после того как вначале все стрекозы покусают гидру, они БОЛЬШЕ НЕ ХОДЯТ!!! гидра стоит и безнаказанно убивает стоящих вокруг нее стрекоз!!!!!!!!

Возможно, истина где-то посередине. Возможно, после того, как мухи соберутся вокруг гидры, AI продолжает генерировать ходы, однако по какой-то причине отряды остаются на месте.
Sav
Цитата(AlexSpl)
Хотя какая разница?

Разница в том, что я анализировал (и вижу смысл анализировать в дальнейшем) только 3.2, в 4.0 другой код и за то, что там, я ничего сказать не могу.


Цитата(AlexSpl)
Точно квик-комбат, а не автобой смотрите? Неплохо бы аналогичный лог увидеть для сравнения.

Задолбаюсь ведь составлять такой лог. Могу дать лог вызовов функции нанесения урона.
Лучше даже так проверю - дам вражескому герою 7 крестьян и если гидре хоть раз нанесут урон после урона крестьянину - значит не всех она бьёт.

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

Хм, а это вполне возможно, в H3 в некоторых местах игровые моменты привязаны к отображению.

Всё, разобрался. Стрекозы не ходят не только в быстрой битве, но и в обычной. Они просто боятся бить гидру, а о том, что можно отступить и что ответка одна и сразу кончится, не знают. Это просто несовершенство ИИ.
AlexSpl
Цитата
Всё, разобрался. Стрекозы не ходят не только в быстрой битве, но и в обычной. Они просто боятся бить гидру, а о том, что можно отступить и что ответка одна и сразу кончится, не знают. Это просто несовершенство ИИ.

Поведение мух зависит ещё и от уровня сложности. Мой лог - для 160%. Но попробуйте сравнить один и тот же бой для 100% и 200% - результаты будут разными (даже при обычной битве).
Sav
Да, на 160% они так не делают.
Vizit0r
может в быстрой битве боевой-ИИ импользуется только самый простой?
я просто не в курсе, может такое быть хотя бы теоретически или ИИ общий и неделимый.
baratorch
Sav, не разобрался.
Вот лог урона по стэку (без магии с запретом боевого духа и удачи 4 гидры хаоса против 18x5 стрекоз в улье, 0 атака 0 защита героя) 160% сложность
1 - квик (все гидры живы)
2 - авто (одна умирает)
стабильно

441379: - атака стрекоз
4400DF: - атака гидры

налицо неадекват квика
AlexSpl
Неплохо бы числа в конце строк в координаты (X, Y) законвертить, а то не понятно. Ведь это координаты, если не ошибаюсь?
Ага, это урон. Плохо, что здесь не видно координат стеков. Ведь по логу атак нельзя говорить о том, где именно расположены стеки мух.
Sadness
Цитата(SAG19330184 @ 27 Aug 2012, 13:06) *
нужна опция: отключение читкодов в турнирном режиме


Зачем? Если используются пароли - по сути не нужна. А если не используются, то любая вторая копия игры попросту запускается без турнирного режима, делается сейв GM1, если необходимо, и все читы снова работают.


Цитата
налицо неадекват квика


Если это неизменённый квик 3.2/4.0, то лично я бы не брался за его исправление. Это оригинальный баг игры, уже многим известно, что на квике комп лучше справляется против стрелковых блоков. Там даже где-то приводился совершенно фееричный пример выигрыша заведомо более слабыми войсками.
Если разбирать неадекватность каждого из юнитов - выйдет жуткая работа, зато если всё исправить - появится куча ярых противников квика: ведь раньше-то он давал лучшие результаты!

Все уже не один раз замечали, что автобой реально либо сильно лучше либо сильно хуже играет тот же бой на квике, так что если его менять - то не для онлайна, поскольку конкретно это - уже сильное вмешательство в геймплей
Sav
Кажется, нашёл ошибку.
Код
signed int __thiscall A0_Battle_Stack_Draw_Flying_sub_4B47A0(_BattleStack_ *this, int TarGex)
{
  int StartGex_Coloumn_v2; // ecx@1
  int TarGex_v3; // ebx@1
  _BattleStack_ *this_v4; // esi@1
  signed __int64 Distance_v5; // qax@13
  signed int Flying_Distance_v6; // ecx@13
  int StartGexNum_mul_112_v7; // edx@13
  char *TarGexNum_mul_112_v8; // ecx@13
  double Distance_sqr_v9; // ST48_8@13
  int FramesCount_v10; // edi@14
  float Frames_Count_v11; // ST68_4@16
  float X_Dist_v12; // ST64_4@16
  float Y_Dist_v13; // ST64_4@16
  void *Def_v14; // eax@17
  float MovingAnim_Time_v15; // ST5C_4@21
  float Frame_X_Speed_v16; // ST5C_4@24
  float Frame_Y_Speed_v17; // ST60_4@24
  int v18; // ebx@24
  int v19; // edi@24
  int v20; // ecx@24
  DWORD v21; // eax@32
  int v22; // eax@34
  int v25; // [sp+Ch] [bp-44h]@24
  int v26; // [sp+10h] [bp-40h]@24
  DWORD WaitingTime_v27; // [sp+20h] [bp-30h]@21
  float Y_Speed_v28; // [sp+28h] [bp-28h]@16
  float X_Speed_v29; // [sp+2Ch] [bp-24h]@16
  signed int Start_Y_v30; // [sp+30h] [bp-20h]@13
  signed int Start_X_v31; // [sp+34h] [bp-1Ch]@13
  int Frames_Remained_v32; // [sp+38h] [bp-18h]@22
  float Curr_X_v33; // [sp+3Ch] [bp-14h]@21
  int X_Dist_v34; // [sp+40h] [bp-10h]@13
  float Curr_Y_v35; // [sp+40h] [bp-10h]@21
  int Y_Dist_v36; // [sp+44h] [bp-Ch]@13
  float Def_Frames_Count_v37; // [sp+44h] [bp-Ch]@21
  signed int Def_FramesCount_v38; // [sp+48h] [bp-8h]@19
  char Need_Change_Orientation_v39; // [sp+4Fh] [bp-1h]@2

  this_v4 = this;
  TarGex_v3 = TarGex;
  StartGex_Coloumn_v2 = this->GexNum_dword38 % 17;
  if ( StartGex_Coloumn_v2 <= TarGex % 17 )
  {
    if ( StartGex_Coloumn_v2 >= TarGex % 17 )
      Need_Change_Orientation_v39 = 0;
    else
      Need_Change_Orientation_v39 = this_v4->Orientation_dword44 == 0;
  }
  else
  {
    Need_Change_Orientation_v39 = this_v4->Orientation_dword44 == 1;
  }
  if ( A0_Battle_Need_Open_Bridge_sub_466D10((int)A0_BattleMgr_dword_699420, this_v4, TarGex) )
  {
    this_v4->AnimSectionNum_dword3C = 2;
    this_v4->AnimFrameNum_dword40 = 0;
    A0_Battle_Draw_sub_493FC0((int)A0_BattleMgr_dword_699420, 1, 0, 0, 0, 1, 0);
    A0_Battle_Open_CastleBridge_sub_466DA0((int)A0_BattleMgr_dword_699420);
  }
  if ( this_v4->Creature_29dword74.Flags_dword10 & 1 )
  {
    if ( Need_Change_Orientation_v39 )
    {
      TarGex_v3 = (this_v4->Orientation_dword44 != 0 ? 2 : 0) - 1 + TarGex;
      TarGex += (this_v4->Orientation_dword44 != 0 ? 2 : 0) - 1;
    }
  }
  A0_Battle_Clear_Stack_Image_sub_446550(this_v4);
  if ( Need_Change_Orientation_v39 )
    A0_Battle_Stack_Ch_Orient_sub_446440(this_v4, 1);
  StartGexNum_mul_112_v7 = 112 * this_v4->GexNum_dword38;
  Start_Y_v30 = *(_WORD *)((char *)&A0_BattleMgr_dword_699420->hex[0].Y_Position + StartGexNum_mul_112_v7);
  Start_X_v31 = *(_WORD *)((char *)&A0_BattleMgr_dword_699420->hex[0].X_Position + StartGexNum_mul_112_v7);
  TarGexNum_mul_112_v8 = (char *)A0_BattleMgr_dword_699420 + 112 * TarGex_v3;
  Y_Dist_v36 = *((_WORD *)TarGexNum_mul_112_v8 + 227) - Start_Y_v30;
  X_Dist_v34 = *((_WORD *)TarGexNum_mul_112_v8 + 226) - Start_X_v31;
  Distance_sqr_v9 = (double)(X_Dist_v34 * X_Dist_v34 + Y_Dist_v36 * Y_Dist_v36);
  Distance_v5 = (signed __int64)sqrt(LODWORD(Distance_sqr_v9), HIDWORD(Distance_sqr_v9));
  Flying_Distance_v6 = this_v4->Anim_21dword110.FlightAnim_FrameDistance_dword50;
  if ( Flying_Distance_v6 <= 0 )
    FramesCount_v10 = 1;
  else
    FramesCount_v10 = ((_DWORD)Distance_v5 + Flying_Distance_v6 / 2) / Flying_Distance_v6;
  Frames_Count_v11 = (double)FramesCount_v10;
  X_Dist_v12 = (double)X_Dist_v34;
  X_Speed_v29 = X_Dist_v12 / Frames_Count_v11;
  Y_Dist_v13 = (double)Y_Dist_v36;
  Y_Speed_v28 = Y_Dist_v13 / Frames_Count_v11;
  if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
  {
    this_v4->IsMoving_byte30 = 1;
    A0_Battle_Stack_StartSound_sub_43D260(this_v4, 6);
    A0_Battle_Stack_DrawMoving_Or_ChangeOrientDraw_sub_446660(this_v4, 20, -1, 0);
    A0_Battle_Stack_StartSound_sub_43D260(this_v4, 0);
    A0_Battle_RemoveStack_From_Gexes_sub_468310(A0_BattleMgr_dword_699420, this_v4);
    Def_v14 = this_v4->Def_dword164;
    this_v4->AnimSectionNum_dword3C = 0;
    if ( *((_DWORD *)Def_v14 + 10) > 0 && **((_DWORD **)Def_v14 + 11) )
      Def_FramesCount_v38 = ***((_DWORD ***)Def_v14 + 7);
    else
      Def_FramesCount_v38 = 0;
    Curr_X_v33 = (double)Start_X_v31;
    Curr_Y_v35 = (double)Start_Y_v30;
    Def_Frames_Count_v37 = (double)Def_FramesCount_v38;
    MovingAnim_Time_v15 = (double)this_v4->Anim_21dword110.MovingAnim_Time_dword48;
    WaitingTime_v27 = (signed __int64)(MovingAnim_Time_v15
                                     * A0_BattleSettings_PeriodMults_dword_63CF7C[*(_DWORD *)&A0_Reg_Key_CombatSpeed_dword_69883C]
                                     / Def_Frames_Count_v37);
    if ( FramesCount_v10 > 0 )
    {
      Frames_Remained_v32 = FramesCount_v10;
      do
      {
        this_v4->AnimFrameNum_dword40 = 0;
        if ( Def_FramesCount_v38 > 0 )
        {
          do
          {
            v25 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616];
            v26 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620];
            v18 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624];
            Frame_X_Speed_v16 = X_Speed_v29 / Def_Frames_Count_v37;
            Curr_X_v33 = Frame_X_Speed_v16 + Curr_X_v33;
            v19 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628];
            v20 = *(_DWORD *)(WndMgr_dword_6992D0 + 64);
            Frame_Y_Speed_v17 = Y_Speed_v28 / Def_Frames_Count_v37;
            Curr_Y_v35 = Frame_Y_Speed_v17 + Curr_Y_v35;
            A0_DrawSurface16_sub_44DF80(
              *(void **)&A0_BattleMgr_dword_699420->field_5394[28],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624]
            - *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616]
            + 1,
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628]
            - *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620]
            + 1,
              *(_DWORD *)(v20 + 48),
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620],
              *(_DWORD *)(v20 + 36),
              *(_DWORD *)(v20 + 40),
              *(_DWORD *)(v20 + 44),
              0);
            *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616] = dword_6AAD50;
            *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620] = dword_6AAD54;
            *(_QWORD *)&A0_BattleMgr_dword_699420->f13300[2624] = qword_6AAD58;
            A0_BattleMgr_dword_699420->f13300[2604] = 1;
            A0_Battle_Stack_Draw_sub_43DE60(this_v4, (signed __int64)Curr_X_v33, (signed __int64)Curr_Y_v35, 0);
            A0_BattleMgr_dword_699420->f13300[2604] = 0;
            if ( v25 > *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616] )
              v25 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616];
            if ( v26 > *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620] )
              v26 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620];
            if ( v18 < *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624] )
              v18 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624];
            if ( v19 < *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628] )
              v19 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628];
            A0_Wait_Till_Time_sub_4F8980(A0_NextTimeToDrawingWait_dword_6989E8);
            v21 = timeGetTime() - A0_NextTimeToDrawingWait_dword_6989E8;
            if ( (signed int)WaitingTime_v27 > (signed int)v21 )
              v21 = WaitingTime_v27;
            A0_NextTimeToDrawingWait_dword_6989E8 += v21;
            A0_FlipScreenArea_sub_603190(WndMgr_dword_6992D0, v25, v26, v18 - v25 + 1, v19 - v26 + 1);
            v22 = this_v4->AnimFrameNum_dword40 + 1;
            this_v4->AnimFrameNum_dword40 = v22;
          }
          while ( v22 < Def_FramesCount_v38 );
          TarGex_v3 = TarGex;
        }
      }
      while ( Frames_Remained_v32-- != 1 );
    }
  }
  A0_Battle_Gex_Put_Stack_sub_4683A0(A0_BattleMgr_dword_699420, this_v4, TarGex_v3);
  this_v4->GexNum_dword38 = TarGex_v3;
  if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
  {
    A0_Battle_Stack_StartSound_sub_43D260(this_v4, 7);
    A0_End_Sample_sub_59A180(A0_SoundMgr_dword_699414, *((_DWORD *)this_v4->Move_Sound_dword170 + 7));
    A0_Battle_Stack_DrawMoving_Or_ChangeOrientDraw_sub_446660(this_v4, 21, -1, 0);
    A0_Battle_Stack_DrawMoving_Or_ChangeOrientDraw_sub_446660(this_v4, 2, 1, 0);
    this_v4->IsMoving_byte30 = 0;
  }
  A0_Battle_Stack_AfterActionRemoveSpells_sub_4441F0(this_v4, 0);
  return 1;
}

Можно заметить, что A0_Battle_RemoveStack_From_Gexes_sub_468310(A0_BattleMgr_dword_699420, this_v4), т. е. удаление стека с гекса, происходит только если !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420), т. е. если битва отрисовывается на экран. При этом A0_Battle_Gex_Put_Stack_sub_4683A0(A0_BattleMgr_dword_699420, this_v4, TarGex_v3), т. е. постановка стека на новый гекс, выполняется всегда.
Таким образом, стрекозы отлетают от гидр, но при этом ссылки на них остаются у гексов вокруг гидры, гидра бьёт через эти ссылки, а они при анализе видят, что гидра сильно ответит, если её ударить, и не бьют её сами. Т. е. это баг не гидры, но любого летающего.
Sadness
Цитата(Sav @ 27 Aug 2012, 19:58) *
Кажется, нашёл ошибку.
Код
signed int __thiscall A0_Battle_Stack_Draw_Flying_sub_4B47A0(_BattleStack_ *this, int TarGex)
{
  int StartGex_Coloumn_v2; // ecx@1
  int TarGex_v3; // ebx@1
  _BattleStack_ *this_v4; // esi@1
  signed __int64 Distance_v5; // qax@13
  signed int Flying_Distance_v6; // ecx@13
  int StartGexNum_mul_112_v7; // edx@13
  char *TarGexNum_mul_112_v8; // ecx@13
  double Distance_sqr_v9; // ST48_8@13
  int FramesCount_v10; // edi@14
  float Frames_Count_v11; // ST68_4@16
  float X_Dist_v12; // ST64_4@16
  float Y_Dist_v13; // ST64_4@16
  void *Def_v14; // eax@17
  float MovingAnim_Time_v15; // ST5C_4@21
  float Frame_X_Speed_v16; // ST5C_4@24
  float Frame_Y_Speed_v17; // ST60_4@24
  int v18; // ebx@24
  int v19; // edi@24
  int v20; // ecx@24
  DWORD v21; // eax@32
  int v22; // eax@34
  int v25; // [sp+Ch] [bp-44h]@24
  int v26; // [sp+10h] [bp-40h]@24
  DWORD WaitingTime_v27; // [sp+20h] [bp-30h]@21
  float Y_Speed_v28; // [sp+28h] [bp-28h]@16
  float X_Speed_v29; // [sp+2Ch] [bp-24h]@16
  signed int Start_Y_v30; // [sp+30h] [bp-20h]@13
  signed int Start_X_v31; // [sp+34h] [bp-1Ch]@13
  int Frames_Remained_v32; // [sp+38h] [bp-18h]@22
  float Curr_X_v33; // [sp+3Ch] [bp-14h]@21
  int X_Dist_v34; // [sp+40h] [bp-10h]@13
  float Curr_Y_v35; // [sp+40h] [bp-10h]@21
  int Y_Dist_v36; // [sp+44h] [bp-Ch]@13
  float Def_Frames_Count_v37; // [sp+44h] [bp-Ch]@21
  signed int Def_FramesCount_v38; // [sp+48h] [bp-8h]@19
  char Need_Change_Orientation_v39; // [sp+4Fh] [bp-1h]@2

  this_v4 = this;
  TarGex_v3 = TarGex;
  StartGex_Coloumn_v2 = this->GexNum_dword38 % 17;
  if ( StartGex_Coloumn_v2 <= TarGex % 17 )
  {
    if ( StartGex_Coloumn_v2 >= TarGex % 17 )
      Need_Change_Orientation_v39 = 0;
    else
      Need_Change_Orientation_v39 = this_v4->Orientation_dword44 == 0;
  }
  else
  {
    Need_Change_Orientation_v39 = this_v4->Orientation_dword44 == 1;
  }
  if ( A0_Battle_Need_Open_Bridge_sub_466D10((int)A0_BattleMgr_dword_699420, this_v4, TarGex) )
  {
    this_v4->AnimSectionNum_dword3C = 2;
    this_v4->AnimFrameNum_dword40 = 0;
    A0_Battle_Draw_sub_493FC0((int)A0_BattleMgr_dword_699420, 1, 0, 0, 0, 1, 0);
    A0_Battle_Open_CastleBridge_sub_466DA0((int)A0_BattleMgr_dword_699420);
  }
  if ( this_v4->Creature_29dword74.Flags_dword10 & 1 )
  {
    if ( Need_Change_Orientation_v39 )
    {
      TarGex_v3 = (this_v4->Orientation_dword44 != 0 ? 2 : 0) - 1 + TarGex;
      TarGex += (this_v4->Orientation_dword44 != 0 ? 2 : 0) - 1;
    }
  }
  A0_Battle_Clear_Stack_Image_sub_446550(this_v4);
  if ( Need_Change_Orientation_v39 )
    A0_Battle_Stack_Ch_Orient_sub_446440(this_v4, 1);
  StartGexNum_mul_112_v7 = 112 * this_v4->GexNum_dword38;
  Start_Y_v30 = *(_WORD *)((char *)&A0_BattleMgr_dword_699420->hex[0].Y_Position + StartGexNum_mul_112_v7);
  Start_X_v31 = *(_WORD *)((char *)&A0_BattleMgr_dword_699420->hex[0].X_Position + StartGexNum_mul_112_v7);
  TarGexNum_mul_112_v8 = (char *)A0_BattleMgr_dword_699420 + 112 * TarGex_v3;
  Y_Dist_v36 = *((_WORD *)TarGexNum_mul_112_v8 + 227) - Start_Y_v30;
  X_Dist_v34 = *((_WORD *)TarGexNum_mul_112_v8 + 226) - Start_X_v31;
  Distance_sqr_v9 = (double)(X_Dist_v34 * X_Dist_v34 + Y_Dist_v36 * Y_Dist_v36);
  Distance_v5 = (signed __int64)sqrt(LODWORD(Distance_sqr_v9), HIDWORD(Distance_sqr_v9));
  Flying_Distance_v6 = this_v4->Anim_21dword110.FlightAnim_FrameDistance_dword50;
  if ( Flying_Distance_v6 <= 0 )
    FramesCount_v10 = 1;
  else
    FramesCount_v10 = ((_DWORD)Distance_v5 + Flying_Distance_v6 / 2) / Flying_Distance_v6;
  Frames_Count_v11 = (double)FramesCount_v10;
  X_Dist_v12 = (double)X_Dist_v34;
  X_Speed_v29 = X_Dist_v12 / Frames_Count_v11;
  Y_Dist_v13 = (double)Y_Dist_v36;
  Y_Speed_v28 = Y_Dist_v13 / Frames_Count_v11;
  if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
  {
    this_v4->IsMoving_byte30 = 1;
    A0_Battle_Stack_StartSound_sub_43D260(this_v4, 6);
    A0_Battle_Stack_DrawMoving_Or_ChangeOrientDraw_sub_446660(this_v4, 20, -1, 0);
    A0_Battle_Stack_StartSound_sub_43D260(this_v4, 0);
    A0_Battle_RemoveStack_From_Gexes_sub_468310(A0_BattleMgr_dword_699420, this_v4);
    Def_v14 = this_v4->Def_dword164;
    this_v4->AnimSectionNum_dword3C = 0;
    if ( *((_DWORD *)Def_v14 + 10) > 0 && **((_DWORD **)Def_v14 + 11) )
      Def_FramesCount_v38 = ***((_DWORD ***)Def_v14 + 7);
    else
      Def_FramesCount_v38 = 0;
    Curr_X_v33 = (double)Start_X_v31;
    Curr_Y_v35 = (double)Start_Y_v30;
    Def_Frames_Count_v37 = (double)Def_FramesCount_v38;
    MovingAnim_Time_v15 = (double)this_v4->Anim_21dword110.MovingAnim_Time_dword48;
    WaitingTime_v27 = (signed __int64)(MovingAnim_Time_v15
                                     * A0_BattleSettings_PeriodMults_dword_63CF7C[*(_DWORD *)&A0_Reg_Key_CombatSpeed_dword_69883C]
                                     / Def_Frames_Count_v37);
    if ( FramesCount_v10 > 0 )
    {
      Frames_Remained_v32 = FramesCount_v10;
      do
      {
        this_v4->AnimFrameNum_dword40 = 0;
        if ( Def_FramesCount_v38 > 0 )
        {
          do
          {
            v25 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616];
            v26 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620];
            v18 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624];
            Frame_X_Speed_v16 = X_Speed_v29 / Def_Frames_Count_v37;
            Curr_X_v33 = Frame_X_Speed_v16 + Curr_X_v33;
            v19 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628];
            v20 = *(_DWORD *)(WndMgr_dword_6992D0 + 64);
            Frame_Y_Speed_v17 = Y_Speed_v28 / Def_Frames_Count_v37;
            Curr_Y_v35 = Frame_Y_Speed_v17 + Curr_Y_v35;
            A0_DrawSurface16_sub_44DF80(
              *(void **)&A0_BattleMgr_dword_699420->field_5394[28],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624]
            - *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616]
            + 1,
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628]
            - *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620]
            + 1,
              *(_DWORD *)(v20 + 48),
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616],
              *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620],
              *(_DWORD *)(v20 + 36),
              *(_DWORD *)(v20 + 40),
              *(_DWORD *)(v20 + 44),
              0);
            *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616] = dword_6AAD50;
            *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620] = dword_6AAD54;
            *(_QWORD *)&A0_BattleMgr_dword_699420->f13300[2624] = qword_6AAD58;
            A0_BattleMgr_dword_699420->f13300[2604] = 1;
            A0_Battle_Stack_Draw_sub_43DE60(this_v4, (signed __int64)Curr_X_v33, (signed __int64)Curr_Y_v35, 0);
            A0_BattleMgr_dword_699420->f13300[2604] = 0;
            if ( v25 > *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616] )
              v25 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2616];
            if ( v26 > *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620] )
              v26 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2620];
            if ( v18 < *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624] )
              v18 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2624];
            if ( v19 < *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628] )
              v19 = *(_DWORD *)&A0_BattleMgr_dword_699420->f13300[2628];
            A0_Wait_Till_Time_sub_4F8980(A0_NextTimeToDrawingWait_dword_6989E8);
            v21 = timeGetTime() - A0_NextTimeToDrawingWait_dword_6989E8;
            if ( (signed int)WaitingTime_v27 > (signed int)v21 )
              v21 = WaitingTime_v27;
            A0_NextTimeToDrawingWait_dword_6989E8 += v21;
            A0_FlipScreenArea_sub_603190(WndMgr_dword_6992D0, v25, v26, v18 - v25 + 1, v19 - v26 + 1);
            v22 = this_v4->AnimFrameNum_dword40 + 1;
            this_v4->AnimFrameNum_dword40 = v22;
          }
          while ( v22 < Def_FramesCount_v38 );
          TarGex_v3 = TarGex;
        }
      }
      while ( Frames_Remained_v32-- != 1 );
    }
  }
  A0_Battle_Gex_Put_Stack_sub_4683A0(A0_BattleMgr_dword_699420, this_v4, TarGex_v3);
  this_v4->GexNum_dword38 = TarGex_v3;
  if ( !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420) )
  {
    A0_Battle_Stack_StartSound_sub_43D260(this_v4, 7);
    A0_End_Sample_sub_59A180(A0_SoundMgr_dword_699414, *((_DWORD *)this_v4->Move_Sound_dword170 + 7));
    A0_Battle_Stack_DrawMoving_Or_ChangeOrientDraw_sub_446660(this_v4, 21, -1, 0);
    A0_Battle_Stack_DrawMoving_Or_ChangeOrientDraw_sub_446660(this_v4, 2, 1, 0);
    this_v4->IsMoving_byte30 = 0;
  }
  A0_Battle_Stack_AfterActionRemoveSpells_sub_4441F0(this_v4, 0);
  return 1;
}

Можно заметить, что A0_Battle_RemoveStack_From_Gexes_sub_468310(A0_BattleMgr_dword_699420, this_v4), т. е. удаление стека с гекса, происходит только если !A0_Battle_ShouldNotRenderBattle_sub_46A080((int)A0_BattleMgr_dword_699420), т. е. если битва отрисовывается на экран. При этом A0_Battle_Gex_Put_Stack_sub_4683A0(A0_BattleMgr_dword_699420, this_v4, TarGex_v3), т. е. постановка стека на новый гекс, выполняется всегда.
Таким образом, стрекозы отлетают от гидр, но при этом ссылки на них остаются у гексов вокруг гидры, гидра бьёт через эти ссылки, а они при анализе видят, что гидра сильно ответит, если её ударить, и не бьют её сами. Т. е. это баг не гидры, но любого летающего.


Сильно облегчил задачу!
Berserker
Исправлять однозначно.
Sadness
Цитата(Berserker @ 27 Aug 2012, 20:27) *
Исправлять однозначно.


А по-мне, так сила — в незнании. До n-го дня никто и знать не знал про такой лютый баг, играли себе спокойно
Sav
Да, это действительно эта ошибка.
Вот исправление:
Код
// При постановке стека на гекс после полёта предварительно убираем его с предыдущих гексов, если надо.
void __stdcall HiHook_AfterFly_ChangeStackPosition(HiHook* h, _BattleMgr_* this_, _BattleStack_* stack, _int32_ tar_hex_ix)
{
  // Если битва не отрисовывается, убираем стек с гексов.
  if (this_->ShouldNotRenderBattle())
  {
    CALL_2(void, __thiscall, 0x468310, this_, stack);
  }
  
  // Ставим стек на гекс.
  CALL_3(void, __thiscall, h->GetDefaultFunc(), this_, stack, tar_hex_ix);
}

Код
// При постановке стека на гекс после полёта предварительно убираем его с предыдущих гексов, если надо.
  _PI->WriteHiHook(0x4B4B84, CALL_, EXTENDED_, THISCALL_, HiHook_AfterFly_ChangeStackPosition);


С ним 1 гидра хаоса убивает 35 стрекоз из 60 в быстрой битве.
tolich
Замечу, что кроме того, что гидра атакует удалённо летунов, ещё к ней и подойти будет проблематично, ведь соседние ячейки поля боя заняты.
Sav
Не уверен, вполне возможно, что стек может встать на гекс, на котором стоит он сам (может же двухгексовый подойти в любую сторону на 1 шаг).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.