Хмм..
Попробовал начать игру на "BHТренировка", сохранился, перезапуск игры, загрузился (без матюков причём), всё ок.
НО: проверял на версии от 29.11..
Сейчас перекачаю свежую и попробую ещё разок..
UPD.: Поробовал на свежескачанной - глюк не всплыл..
(14.12.2013 12:31)Berserker Wrote: [ -> ]Вообще, какая магия может сделать так, что командиры будут с нулевым количеством сразу?
Может из-за различий в версиях Эры? Судя по сэйву у тебя 2.50+. На 2.43-2.46 повторить сможешь? Я у себя подобного просто ни разу не наблюдал.
У меня Era 2.46, если что..
!?BR; [начало раунда]
** Проверка на смерть командиров
!!BMv9997:N?y1; [y1=0, если командир правого мертв...]
!!BMv9996:N?y2; [y2=0, если командир левого мертв...]
Ещё в тёмной фазе возвращает 0 для левого в моей сохранёнке.
Блин, ненавижу отладку ЕРМ.
Последовательность событий и результаты:
Отряды в норме - тип/количество верные по всем 0..41.
v9996 = 2
v9997 = 24
Со старой битвы. Оба командира в предыдущем бою начинали бой с отрядами. Поэтому их номера были отличны от 0.
В новый бой командир идёт без армии.
!?BA0
отряды в норме
!?BA52
отряды в норме
!?BR; v997=-1. Чёрный раунд
отряды в норме
вызывается проверка отряда №2 (v9996). Командир считается умершим. Вызываются функции очистки
!?BF;
отряды в норме
!?BR; v997=0. Чёрный раунд
отряды в норме
вызывается проверка отряда №2 (v9996). Командир считается умершим. Вызываются функции очистки
!?BR; v997=0. Светлый раунд. Командир отображается без цифр, ибо он теперь осадное орудие
отряды в норме
вызывается проверка отряда №2 (v9996). Командир считается умершим. Вызываются функции очистки
!?FU77007; фаза регенерации
отряды в норме
вызывается 9041 - поиск отряда командира, найден 0-й
диалог выбора карты
поражение
Функция очистки фильтрует по v9996-7, но те имеют значения со старой битвы.
Можно начать новую карту. Без войск с неверным v9996 всё равно хана. Только в этот раз проиграл ИИ )))
Как я понял, не учитывался вызов BR для раундов -1 и 0 в тёмной фазе. Это действительно странно, учитывая, что тактика отключена и у героя её нет. Почему срабатывает чёрная - хз.
Киньте кто-нибудь, пожалуйста, Mods\WoG\angel.dll и era.dll.
(03.12.2013 12:46)Berserker Wrote: [ -> ]Вчера только дописал библиотеку для сбалансированного ГСЧ.
Что значит "сбалансированный"?
Гарантированное мат. ожидание на последовательности заданного размера. Динамическая корректировка диапазона генерируемых значений в зависимости от ожидаемой M(X) на оставшейся части последовательности.
Т.е. генерация какого-то специфического для Battle Heroes распределения?
Сам ГСЧ вот проверенный:
https://dl.dropboxusercontent.com/u/4473...omFrog.pas
Вызывать RandShort. После Randomize вызвать, скажем, RandFrogSetup(1, Random(0x100000), Random(0x100000) or 1). (это не проверял - в Монте-Карло Randomize не нужен)
Нет, Серж, мои генераторы используют геройский ГСЧ как базу (
http://pastebin.com/FYZkeCA7). Соответственно никаких рассинхронизаций в сетевой игре и т.д. Вдобавок, они именно гарантируют среднее значение на последовательности, что является в некоторой степени гарантией баланса и придаёт смысл формулировкам класса «шанс 20%» для цепочек событий умеренного размера. Подробнее я написал в статье по соседству.
Но за ссылку спасибо )
*Злорадствует*
Проверил на Эре 2.46. Это баг мода. Нужно определять номера отрядов командиров хотя бы в !?BF. Иначе BR -1 превратит всех в боевые машины.
Проверочный код до боя:
Да, ни разу не встретил заклинание неудачи, а оно очень сильно сейчас. Надо это исправлять. В Г4 неудача гарантировала 1,5х урон по врагу, что было очень эффективно.
Berserker Wrote:Проверил на Эре 2.46. Это баг мода. Нужно определять номера отрядов командиров хотя бы в !?BF. Иначе BR -1 превратит всех в боевые машины.
Несколько странно, что кроме тебя этот баг никто не нашел и не смог повторить. Подскажи, какой именно участок кода "превратит всех в боевые машины". Что-то я не нашел навскидку (да и не помню, чтоб писал).
И если уж надо добавить функционал в BR, то просто помести туда строку:
UPD: нашел, где проставляется флаг БМ (после смерти командира это происходит, чтобы остальных убивать не надо было). И путем хитрых манипулияций с твоим сэйвом с 5го раза удалось посторить багу! До этого командир 4 раза нормально действовал, только вот его количество не отображалось ))
Теперь у меня блин вопрос, как оно до этого нормально работало...
UPD2: короче, 2я строка решает проблему