13. Мораль, Удача, Урон и ППБ
(соавторство AlexSPl, VDV_forever)
|
Основные моменты по морали, удачи и урону приведены в соответствующих разделах. В данном разделе, прежде всего, будут отражены алгоритмы, а так же условия и вероятности их выпадения во время той или иной битвы в Героях Меча и Магии I.
13.1 Мораль монстров во время боя
Мораль — количественная характеристика отряда, условно отражающая настроение и боевой дух воинов в нём. Может принимать семь значений:
Отряд с отрицательной моралью с некоторой вероятностью может пропустить свой ход. Отряд с положительной моралью — наоборот: походить дважды. Отряд с моралью 0 не пропускает ходы, но и не может совершить более одного действия за один раунд.
13.1.1 Отрицательная мораль
В каждом раунде отряды с отрицательной моралью непосредственно перед их ходом проходят проверку боевого духа:
mod(R, 12) + 1 <= -m, (1)
где mod(R, 12) — остаток от деления некоторого псевдослучайного числа R на 12, m — значение морали отряда (-3, -2 или -1).
Как известно, существует ровно 12 различных остатков от деления на 12: 0, 1, 2, …, 11. Соответственно, левая часть выражения (1) может принимать 12 значений: 1, 2, 3, …, 12. Но только в -m случаях неравенство (1) выполняется, поэтому вероятность выпадения отрицательной морали:
P(m) = -m/12
В дальнейшем, говоря о вероятностях, будем полагать, что генератор псевдослучайных чисел игры Герои Меча и Магии I является «идеальным равномерным», т.е. имеет бесконечный период(последовательность псевдослучайных чисел не имеет цикла) и генерирует любые числа из заданного диапазона
равновероятно. На самом деле, любой ГПСЧ не идеален, поэтому приведённые здесь вероятности следует принимать как ориентировочные.
Пример — Покажем, что вероятность пропуска хода отрядом при морали m = -3 равна P(-3) = 25%.
Отряд пропускает ход, если выполняется условие (1). Для нашего случая условие (1) будет выглядеть следующим образом:
mod(R, 12) + 1 <= 3
Левая часть неравенства данного может принимать значения: 1, 2, 3, …, 12, но неравенство выполняется только при трёх значениях левой части:
1, 2 и 3 (1 <= 3, 2 <= 3, 3 <= 3). Следовательно, вероятность P(-3) = 3/12 = 1/4 = 0,25.
Примечание — Неравенство (1) эквивалентно следующему:
mod(R, 12) < -m, (1*)
Стоит также отметить, что существует 25% шанс, несмотря на обычную вероятность, избежать отрицательной морали. Так вот, этот шанс есть только у компьютерных игроков. Итого, вероятность выпадения отрицательной морали у компьютерных игроков составляет:
P(m) = -m/12 * (1 — 0,25) = -m/16,
что является ещё одним подтверждением, что комп — читер.
Примечание — Отряд, начинающий битву, никогда не пропустит свой ход из-за отрицательной морали, какой бы плохой она ни была!
13.1.2 Положительная мораль
Отряды с положительной моралью проходят проверку боевого духа непосредственно после их хода:
mod(R, 24) + 1 <= m, (2) или mod(R, 24) < m, (2*)
Если условие (2) выполняется, отряд получает возможность сделать дополнительный ход.
Остатков от деления на 24 в два раза больше, чем остатков от деления на 12, поэтому вероятность выпадения положительной морали ровно в два раза меньше вероятности выпадения отрицательной (при равных значениях |m|) и равна:
P(m) = m/24
Например, при морали m = +3 у отряда в каждом раунде есть шанс P(+3) = 3/24 = 1/8 = 12,5% походить дважды.
13.1.3 Таблицы вероятностей (округление до десятых)
Вероятности пропустить ход (походить дважды) P(m) и P'(m) для игрока-человека и компьютерного игрока соответственно при заданной морали m:
Вероятности P1/5(m) и P’1/5(m) того, что хотя бы один отряд из пяти пропустит ход (походит дважды) за один раунд при заданной морали m:
Примечание — P1/5(m) = 1 — (1 — P(m))5.
13.2 Удача монстров во время боя
Удача — количественная характеристика отряда, отражающая вероятность нанести критический удар (двойной урон), либо половинный урон.
Может принимать семь значений:
Отряд с положительной удачей может рассчитывать на возможность нанести двойной урон при атаке и ответном ударе.
13.2.1 Положительная удача
Условие выпадения положительной удачи:
mod(R, 12) + 1 <= L, (3) или mod(R, 12) < L, (3*)
Вероятность нанести двойной урон равна P(L) = L/12, где L = 0, 1, 2 или 3. Отсюда видно, что удача выпадает в два раза чаще, чем положительная мораль при равных значениях m и L (m = L).
13.2.2 Отрицательная удача
При отрицательной удаче (L = -3, -2) отряд наносит половинный урон (при L = -1 отрицательная удача никак себя не проявляет).
К сожалению, в игре, без дополнительного программного вмешательства, невозможно получить отрицательное значение удачи, хотя алгоритм выпадения (в том числе звук и анимация) реализован и работоспособен. Вероятно, в проекте существовал артефакт, событие или способность монстра, понижающий удачу, но до релиза (в силу решения или ошибки разработчиков) он не добрался. Вероятность «выпадения» отрицательной удачи равна:
P(L) = -(L + 1)/12 (4)
Как видно из формулы (4), вероятность выпадения отрицательной удачи при L = -1 равна нулю, поэтому если бы отрицательная удача всё-таки присутствовала в игре, список багов пришлось бы удлинить на один пункт.
Отрицательная удача возвращена в игру в Патче ТЕ.
Примечание — в TE вероятность выпадения неудачи равна P(L) = –L/12, т.е. неудача будет выпадать даже при L = –1 (аналогично удаче).
Посмотреть на игру с отрицательной удачей на ориганальной версии игры (либо на Буке), можно скачав сейв-задачу, в которой необходимо освободить Агара от невезения, за наименьшее количество дней.
13.3 Подробнее о числе R
R — это псевдослучайное число, которое используется для нужд алгоритмов, отвечающих за «случайные» события в игре (в том числе и за выпадение морали и удачи).
Данное число порождает последовательность псевдослучайных чисел по известному алгоритму, поэтому достаточно знать текущее (или начальное) значение R, чтобы можно было вычислить любое другое.
Безусловно, существуют алгоритмы, позволяющие получить следующее в последовательности значение R по заданному значению R0.
Для вычисления нового значения R, кроме арифметических операций, используются также и логические, поэтому предсказание морали и удачи без использования специальных программ — неблагодарное занятие.
Примечание — Узнать значение R без специальных утилит или программ невозможно.
13.4 Полностью повторяемые битвы (ППБ)
ППБ — это битва, которую можно повторить точь-в-точь по описанию, при этом действия противника, уроны, наносимые отрядами, а также события, такие как мораль, удача и выпадение спецабилок, повторяются при одинаковых действиях игрока от загрузки к загрузке одной и той же битвы и поэтому становятся полностью предсказуемыми. Формирование ППБ возможно только со второй битвы любой сессии, при условии получения одного или нескольких уровней одним из героев противостоящих сторон.
Объясняется это просто: игра фиксирует R, если любой герой получает уровень (уровни) после окончания битвы. Причем не важно, как закончилась битва, победой, поражением, либо сбеганием одной из сторон.
Введем дополнительные обозначения не приведенные ранее:
Сессия — промежуток времени между загрузкой исполняемого файла героев (heroes.exe) и выходом из игры в операционную систему;
Карта битвы — это совокупность последовательности действий отрядов и героев противостоящих сторон и сопутствующих этим действиям событий и величин.
Выпадающие битвы (ВБ) — битвы, не попадающие под определение ППБ;
Вырожденная ППБ — битва, обладающая свойствами ППБ (повторяемость уронов, событий и т.п. при одних и тех же действиях игрока), но появляющаяся только единожды между предыдущей ВБ и последующими отличными от неё ППБ.
Свойства вырожденной ППБ:
— Вырожденная ППБ может появиться только после ВБ, закончившейся моралью;
— Вырожденная ППБ не повторяется от попытки к попытке, но обладает удивительным свойством полностью повторяться после любой ВБ, закончившейся моралью!
Разумеется, аббревиатура требует соблюдения всех условий выпадения ППБ;
— Сама же вырожденная ППБ не может закончиться моралью, т.к. иначе она превратится в обычную ППБ.
Попытка — это промежуток времени между двумя последовательными загрузками одного и того же сейва в течение одной сессии;
Игровой раунд — это отрезок битвы, в течение которого каждый отряд противостоящих сторон может совершить какое-либо действие (перемещение из одной точки игровой арены в другую, выстрел и т.п.) единожды или дважды (при выпадении положительной морали). Продолжительность битвы может быть измерена в игровых раундах.
Примечание — парализованные, ослепленные, а также не прошедшие проверку боевого духа отряды автоматически пропускают ход.
13.4.1 Выпадающие битвы (ВБ).
ВБ — это битва, проводимая в течение первой попытки любой сессии (может быть какой угодно с точки зрения выпадения морали, удачи и урона), а также любая другая битва, не попадающая под условия выпадения ППБ.
Верхняя граница количества возможных карт ВБ равна 1000. Т.е. в начале битвы игра генерирует число от 1 до 1000, которое используется в качестве «затравки» («семени») для генерации уронов и событий, таких, например, как выпадения морали и удачи. В действительности же, на практике, таких карт намного меньше.
Помимо этого, выпадающие битвы будут также формироваться в том случае, если герои под управлением игрока либо компа не получают один или несколько уровней во время битвы либо после её окончания.
Таким образом, при ВБ проконтролировать выпадения морали, удачи и урона невозможно или, другими словами, эти составляющие при таких битвах могут выпасть кому угодно и когда угодно!
В сложных же битвах сделать описание ВБ крайне затруднительно.
13.4.2 Условия выпадения ППБ
Начиная со второй попытки любой сессии можно получить ППБ, которая будет формироваться постоянно от попытки к попытке, если в предыдущей битве:
1) Герой под управлением игрока после окончания боя набирает достаточное количество Exp (опыта) для перехода на следующий уровень. Распространяется на все бои, т.е. с героями врага, при осаде замка и нейтралами.
2) Вражеский герой при битве с героем под управлением игрока после окончания боя, набирает достаточное количество Exp (опыта), убивая достаточное количество монстров для перехода на следующий уровень.
При любой битве, и при достаточном количестве Exp (опыта) для перехода на следующий уровень, возможны случаи, когда могут сформироваться две различные ППБ, которые будут чередоваться в строгой последовательности друг за другом!
т.е:
— начинающий битву отряд не будет проходить проверку морали в первом раунде (т.е. не получит возможность походить дважды в этом раунде), если предыдущая битва закончилась гибелью одного отряда после морали другого;
— если выпадающая битва (первая битва сессии) закончилась гибелью одного отряда после морали другого, то вторая битва НЕ будет являться ППБ (исключение: если и вторая битва закончится «на моральном ходу», то она будет являться ППБ и притом единственной).
— вторая ППБ появится только если первая закончилась «на моральном ходу» и, кроме того, третья битва закончилась не «на моральном ходу».
Примечания:
Если и третья битва закончится моралью, то ППБ будет всего одна, а предыдущая вторая окажется «вырожденной» ппб, т.е. повторяться не будет;
От перестановки мест монстров под управлением игрока в начале боя, ППБ не меняется!
13.4.2.1 Возможные варианты выпадения ППБ
Любой битве можно поставить в соответствие два числа: значение R и состояние флага проверки морали F (0 или 1) в начале битвы.
Пара чисел (R, F) однозначно определяет битву.
Пусть нас интересуют две битвы (R1, F1) и (R2, F2). Очевидно, что если R1 = R2, F1 = F2, то рассматриваемые битвы являются эквивалентными, в противном случае — нет. В частности, все ппб одного вида эквивалентны.
Как получаются ППБ?
Первая битва любой сессии является случайной (ВБ): (R, 1), где R — случайное число, а F = 1, т.е. начинающий битву отряд будет проходить проверку морали (разумеется, если мораль этого отряда положительна).
Если после битвы герой получает один или несколько уровней, значение R фиксируется R = R[fix]. Т.о. какой бы ни была битва в сессии, в случае получения героем одного или нескольких уровней после неё, следующая обязательно будет иметь вид (R[fix], 0) или (R[fix], 1). Где F = 1, если предыдущая битва завершилась обычно, т.е. последний походивший отряд не получил мораль, и F = 0, если получил.
Отсюда и следует максимальное число ППБ равное ДВУМ: (R[fix], 0), (R[fix], 1).
Возможные варианты ППБ:
1. Первая и вторая битвы сессии закончились обычно:
вб : (R, 1) — заканчивается обычно: F = 1;
ппб : (R[fix], 1) — заканчивается обычно: F = 1;
ппб : (R[fix], 1) — заканчивается обычно: F = 1;
и т.д.
2. Первая и третья битвы сессии закончились обычно, вторая — моралью:
вб : (R, 1) — заканчивается обычно: F = 1;
ппб1+ : (R[fix], 1) — заканчивается моралью: F = 0;
ппб2 : (R[fix], 0) — заканчивается обычно: F = 1;
ппб1+ : (R[fix], 1) — заканчивается моралью: F = 0;
ппб2 : (R[fix], 0) — заканчивается обычно: F = 1;
и т.д.
3. Первая битва закончилась моралью, вторая и третья — обычно:
вб+ : (R, 1) — заканчивается моралью: F = 0;
выр. ппб : (R[fix], 0) — заканчивается обычно: F = 1;
ппб : (R[fix], 1) — заканчивается обычно: F = 1;
ппб : (R[fix], 1) — заканчивается обычно: F = 1;
и т.д.
4. Первая и третья битвы закончились моралью, вторая — обычно:
вб+ : (R, 1) — заканчивается моралью: F = 0;
ппб1 : (R[fix], 0) — заканчивается обычно: F = 1;
ппб2+ : (R[fix], 1) — заканчивается моралью: F = 0;
ппб1 : (R[fix], 0) — заканчивается обычно: F = 1;
ппб2+ : (R[fix], 1) — заканчивается моралью: F = 0;
и т.д.
5. Первая и вторая битвы закончились моралью:
вб+ : (R, 1) — заканчивается моралью: F = 0;
ппб+ : (R[fix], 0) — заканчивается моралью: F = 0;
ппб+ : (R[fix], 0) — заканчивается моралью: F = 0;
и т.д.
Или проще («+» — мораль):
1. вб -> ппб -> ппб -> …
2. вб -> ппб1+ -> ппб2 -> ппб1+ -> ппб2 -> …
3. вб+ -> [вырожденная ппб] -> ппб -> ппб -> …
4. вб+ -> ппб1 -> ппб2+ -> ппб1 -> ппб2+ -> …
5. вб+ -> ппб+ -> ппб+ -> …
Обратите внимание на симметричность:
1. вб -> ппб -> ппб -> …
5. вб+ -> ппб+ -> ппб+ -> …
2. вб -> ппб1+ -> ппб2 -> ппб1+ -> ппб2 -> …
4. вб+ -> ппб1 -> ппб2+ -> ппб1 -> ппб2+ -> …
3. вб+ -> [вырожденная ппб] -> ппб -> ппб -> …
Примечание — Варианты 3, 4 и 5 маловероятны из-за низкой вероятности получить мораль последним ходом в выпадающей битве.
13.5 Наносимый урон в бою
Урон, наносимый отрядами, может помочь отличить ВБ от ППБ, а также одну ППБ от другой, буквально за несколько первых ходов, благодаря тому, что уроны при ППБ повторяются. Ещё одно свойство ППБ заключается в повторении выпадения морали, удачи и спецабилок.
Поэтому эти события при ППБ можно предсказывать по нанесённому урону. Например, феи нанесли x hp урона, стрелковая башня — y hp. Тогда с высокой долей вероятности можно узнать, какая перед нами битва, только по этой паре уронов (x, y), а также утверждать о будущем выпадении морали, удачи и спецабилок.
13.6 Примеры ППБ
Нападение на вражеского героя, с победой и получением 8 уровней.
1 раунд
Расмонт колдует «Замедление» на паладинов;
Друиды сносят 12 паладинов;
Джинны пропускают;
Фениксы пропускают;
Эльфы сносят 3 + 7 паладинов, с удачей на 2 выстреле;
Кентавры убивают 5 паладинов;
Эктор колдует «ослепление» на фениксов;
Паладины на клетку вперед.
2 раунд
Расмонт колдует «Благословление» на эльфов;
Друиды сносят 12 паладинов; Моралятся;
Друиды сносят 13 паладинов;
Джинны пропускают;
Фениксы пропускают;
Эльфы сносят 8 + 4 паладинов, с удачей на 1 выстреле;
Кентавры убивают 5 паладинов;
Эктор колдует «Замедление» на фениксов;
Паладины на клетку вперед. Моралятся. Продолжают движение вперед.
3 раунд
Расмонт колдует «Благословление» на джиннов;
Друиды с удачей сносят 25 паладинов;
Джинны по-прямой сносят 40 паладинов; На ответке умирает 35 джиннов. Моралятся;
Джинны по-прямой сносят половину паладинов, применив спецабилку;
Фениксы по диагонали снизу сносят последних 45 паладинов.
После победы Расмонт получает 8 уровней (Защита +1, Сила магии +4, Знания +3).
Нападение на нейтралов, с победой и получением 1 уровня.
1 раунд
Фениксы атакуют 3 стек гидр по-диагонали, снизу;
Друиды с удачей добивают 3 стек гидр. Мораляться;
Друиды с удачей стреляют по 5-му стеку гидр.
Эльфы выносят 1 гидру во 2-ом стеке;
Гоблины вперед.
2 раунд
Фениксы атакуют 2 стек гидр по-диагонали, сверху;
Друиды сносят 2 стек гидр;
Эльфы сносят 4-ый стек гидр;
Гоблины добивают 5-ый стек гидр. Мораляться. Пропускают ход.
3 раунд
Фениксы атакуют 1 стек гидр;
Друиды с удачей убивают 1 гидру в оставшемся стеке;
Эльфы с удачей на 2-ом выстреле добивают последную гидру.
После победы Эргон получает 1 уровней (Защита +1).
Нападение на вражеского героя в гарнизоне замка, со сбеганием, на примере задачки от Fireball.
Всадники — Берсерк на горгулий и Защита;
Мечники — становятся перед крестьянами;
Копейщики — становятся по диагонали вправо вниз от мечников;
Крестьяне — по диагонали бьют по драконам с Удачей.
Примечание — стилистическое описание битвы, оставил в неизменном виде, т.е. автор Fireball.
В первом раунде Агар (герой компа), убивает достаточное количество монстров Крег Хега, HP которых, хватает для повышения уровня. Сбегаем Крег Хэгом (героем под управлением игрока), на начало 2 раунда, когда ходят всадники.
Нападение героя на нейтралов с формированием двух ППБ.
ппб №1
1 раунд
Джинны сносят 5-ый стек гномов;
Кентавры стреляют по 4-му стеку гномов;
Эльфы атакуют 4-ый стек гномов;
На ответке от джиннов умирает 3 стек гномов.
2 раунд
Джинны сносят 4-ый стек гномов;
Кентавры стреляют по 2-му стеку гномов с удачей;
Эльфы атакуют 2-ой стек гномов.
3 раунд
Джинны сносят 2-ой стек гномов, по диагонали снизу; Моралятся;
Джинны добивают, последний, 1-ый стек гномов.
ппб №2
1 раунд
Джинны сносят 5-ый стек гномов;
Кентавры стреляют по 4-му стеку гномов с удачей;
Эльфы атакуют 4-ый стек гномов с удачей на 2-ом выстреле;
На ответке от джиннов умирает 3 стек гномов.
2 раунд
Джинны сносят 4-ый стек гномов;
Кентавры стреляют по 2-му стеку гномов;
Эльфы атакуют 2-ой стек гномов.
3 раунд
Джинны сносят 2-ой стек гномов по диагонали снизу;
Кентавры стреляют по 1-му стеку гномов;
Эльфы атакуют 1-ый стек гномов;
На ответке от джиннов умирает последний, 1-ый стек гномов.
После победы над гномами, Барок получает 2 уровня (
атака +1, сила магии +1).
Нападение героя на замок с героем в гарнизоне, с формированием двух ППБ.
ппб №1
Друиды стреляют с удачей по лучникам;
Фениксы сносят копейщиков;
Джины бьют по лучникам;
Кентавры с удачей добивают лучников; Мораляться;
Кентавры добивают крестьян.
ппб №2
Друиды стреляют с удачей по лучникам;
Фениксы сносят копейщиков;
Джины бьют по лучникам;
Кентавры добивают лучников;
Эльфы добивают крестьян.
После победы Сундакс получает 5 уровней (Атака +3, Защита +2).
Примечание — за данной битвой можно наблюдать в режиме автобоя!
P.S. Таким образом, очевидным выводом является тот факт, что целенаправленная игра при помощи выпадающей битвы, является не совсем честной, поэтому использование данного метода при игре на offline турнирах не приветствуется ведущими. Помните, что если такую «удачную» битву не удастся повторить ведущим, то Ваш результат может быть аннулирован!
Добавить комментарий