|
13. Мораль, Удача, Урон и ППБ
(соавторство AlexSPl, VDV_forever)
Основные моменты по морали, удачи и урону приведены в соответствующих разделах. В данном разделе, прежде всего, будут отражены алгоритмы, а так же условия и вероятности их выпадения во время той или иной битвы. 13.1 Мораль монстров во время боя Мораль - количественная характеристика отряда, условно отражающая настроение и боевой дух воинов в нём. Может принимать семь значений: Отряд с отрицательной моралью с некоторой вероятностью может пропустить свой ход. Отряд с положительной моралью - наоборот: походить дважды. Отряд с моралью 0 не пропускает ходы, но и не может совершить более одного действия за один раунд.13.1.1 Отрицательная мораль В каждом раунде отряды с отрицательной моралью непосредственно перед их ходом проходят проверку боевого духа: mod(R, 12) + 1 <= -m, (1) где mod(R, 12) - остаток от деления некоторого псевдослучайного числа R на 12, m - значение морали отряда (-3, -2 или -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) выполняется, отряд получает возможность сделать дополнительный ход. 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 равна нулю, поэтому если бы отрицательная удача всё-таки присутствовала в игре, список багов пришлось бы удлинить на один пункт. Отрицательная удача возвращена в игру в Патче ТЕ. 13.3 Подробнее о числе R R - это псевдослучайное число, которое используется для нужд алгоритмов, отвечающих за "случайные" события в игре (в том числе и за выпадение морали и удачи).
Данное число порождает последовательность псевдослучайных чисел по известному алгоритму, поэтому достаточно знать текущее (или начальное) значение R, чтобы можно было вычислить любое другое.
Безусловно, существуют алгоритмы, позволяющие получить следующее в последовательности значение R по заданному значению R0. Примечание - Узнать значение 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. Первая и вторая битвы сессии закончились обычно: 2. Первая и третья битвы сессии закончились обычно, вторая - моралью: 3. Первая битва закончилась моралью, вторая и третья - обычно: 4. Первая и третья битвы закончились моралью, вторая - обычно: 5. Первая и вторая битвы закончились моралью: Или проще ("+" - мораль): Обратите внимание на симметричность: Примечание - Варианты 3, 4 и 5 маловероятны из-за низкой вероятности получить мораль последним ходом в выпадающей битве. 13.5 Наносимый урон в бою Урон, наносимый отрядами, может помочь отличить ВБ от ППБ, а также одну ППБ от другой, буквально за несколько первых ходов,
благодаря тому, что уроны при ППБ повторяются. Ещё одно свойство ППБ заключается в повторении выпадения морали, удачи и спецабилок. 13.6 Примеры ППБ Нападение на вражеского героя, с победой и получением 8 уровней. 1 раунд 2 раунд 3 раунд После победы Расмонт получает 8 уровней (Защита +1, Сила магии +4, Знания +3). Нападение на нейтралов, с победой и получением 1 уровня. 1 раунд 2 раунд 3 раунд После победы Эргон получает 1 уровней (Защита +1). Нападение на вражеского героя в гарнизоне замка, со сбеганием, на примере задачки от Fireball. Всадники - Берсерк на горгулий и Защита; Примечание - стилистическое описание битвы, оставил в неизменном виде, т.е. автор Fireball. В первом раунде Агар (герой компа), убивает достаточное количество монстров Крег Хега, HP которых, хватает для повышения уровня. Сбегаем Крег Хэгом (героем под управлением игрока), на начало 2 раунда, когда ходят всадники. Нападение героя на нейтралов с формированием двух ППБ. ппб №1 1 раунд 2 раунд 3 раунд ппб №2 1 раунд 2 раунд 3 раунд После победы над гномами, Барок получает 2 уровня ( атака +1, сила магии +1).
Нападение героя на замок с героем в гарнизоне, с формированием двух ППБ. ппб №1 Друиды стреляют с удачей по лучникам;Фениксы сносят копейщиков; Джины бьют по лучникам; Кентавры с удачей добивают лучников; Мораляться; Кентавры добивают крестьян. ппб №2 Друиды стреляют с удачей по лучникам;Фениксы сносят копейщиков; Джины бьют по лучникам; Кентавры добивают лучников; Эльфы добивают крестьян. После победы Сундакс получает 5 уровней (Атака +3, Защита +2). Примечание - за данной битвой можно наблюдать в режиме автобоя! P.S. Таким образом, очевидным выводом является тот факт, что целенаправленная игра при помощи выпадающей битвы, является не совсем честной, поэтому использование данного метода при игре на offline турнирах не приветствуется ведущими. Помните, что если такую "удачную" битву не удастся повторить ведущим, то Ваш результат может быть аннулирован! | ||||||||||
|