Неофициальный сайт игры Герои меча и магий III Во имя богов
Теория ERM'а
Немного теории. Вы когда-нибудь играли в пошаговую стратегию? Скорее всего что да, ведь кто не пробовал себя в шахматах? Не смотря на древность игры, над ней и в наше время ломают головы Великие гроссмейстеры. А все потому, что каждая игра, несмотря на конечное число фигур и их возможностей, является уникальной. Ясное дело, что в компьютерном мире эта игра нашла не только свое развитие, но и логическое продолжение, а именно - в пошаговых стратегиях, прародителем коих, несомненно, является King's Bounty. Сейчас есть не одна сотня пошаговых стратегий, но я хотел бы рассмотреть более подробно одну их них - Heroes of Might and Magic, точнее ее модификацию WoG. Основное отличие WoG от обычных Героев заключается в том, что вы имеете непосредственную возможность динамически менять правила игры, в зависимости от происходящих в ней событий. Также можно создавать свои собственные загадки и квесты, которые описываются в игре на языке ERM. В целом, возможности ERM ограничиваются только вашей фантазией, что позволяет создавать, например, карты с историческими событиями или карты-загадки. Язык ERM не является чем-то очень сложным, в нем есть всего лишь три типа команд: генераторы, приемники и инструкции, но их количество довольно большое. Генераторы - это такие команды, которые следят за всеми событиями в игре, и реагируют на заданные, а приемники, соответственно, выполняют все, что вы придумаете по данному событию. Инструкции же служат для начальной установки параметров к генераторам и приемникам. Запоминать нужные команды несложно, все они состоят всего лишь их двух символов. Готовый текст на ERM-е называется скриптом и размещается непосредственно в теле карты в разделе временных событий, как текстовое сообщение или во внешнем ERM-файле. Есть также множество готовых скриптов, которые считаются стандартными для WoG и их присутствие в теле карты необязательно. Их включение/отключение можно делать в настройках игры и они дают возможность гибко настроить правила и возможности по своему усмотрению. Приведу несколько примеров с возможностями ERM: представьте себе, что вашему Герою нужно пройти небольшой участок территории, который состоит из различных типов местности. Есть, скажем, четыре переключателя, с помощью которых можно менять участки местности. Пока не будет сложена одна однотипная дорожка, пройти дальше будет нельзя. Задачка чем-то напоминает puzzle. Или еще - нужно вам порвать/заключить союз с тем или другим игроком - пожалуйста, это возможно, в отличии от обычной версии игры. Можно также выбросить все артефакты с рюкзака на землю или нанять бродячих монстров и натравить их на противника…
Ближе к практике. Теперь можно более подробно рассмотреть синтаксис применения ERM-команд. Все ERM-команды имеют универсальный формат: ЗАГОЛОВОК[:ПАРАМЕТРЫ/КОМАНДЫ]. Перед заголовком ставятся два символа, которые определяют тип команды, так для генератора это !?, приемника - !!, а для инструкции - !#. После заголовка, перед заданием параметров и команд, можно использовать идентификаторы и условия, которые позволяют привязать данную команду к определенному объекту на карте или событию и задать условия выполнения данной команды соответственно. Идентификаторы имеют формат записи N[/N[/N[...]]], а условия - &N[/N[/N[...]]], где N - число, зависящее от типа применяемой команды. Для использования условий специально зарезервировано 1000 переменных, которые могут принимать значения «Правда» и «Ложь» и называются флагами. Если в условии нужно чтобы определенный флаг был «Правдой», то просто указывается его номер, если же нужен противоположный результат, то перед номером флага ставится знак минус. Рассмотрим небольшой пример: попробуем создать магическую гору, которую сможет посетить герой. При посещение такой горы герой получит некоторое количество очков магии, которое будет определяться как знания героя умноженные на 40, за что у героя будут забираться все оставшиеся очки хода. Сразу отмечу, что для наших экспериментов нужна 3.56 версия WoG-а или выше.
1. Итак, запускаем редактор карт, создаем в нем небольшой участок местности, размещаем на ней героя и любую гору из имеющихся. Например, участок горы, который будет доступным для посещения героем будет иметь координаты x=10, y=12, уровень=0 (поверхность, для подземелья уровень=1)
2. Создаем временное событие, для чего нажимаем «Ctrl+Enter» и выбираем закладку «События»/«Timed Event». Создаем новое событие, ставим день события равным 672 (чтобы наш скрипт на выводился на экран, как простое текстовое сообщение) и назовем его "Магическая скала". Первой строчкой в тексте скрипта всегда пишется ZVSE.
3. Используем инструкцию, чтобы сделать участок горы возможным для посещения: !#TR10/12/0:P1; и еще одну инструкцию !#TR10/12/0:E0;, которая нужна, чтобы закрепить за выбранным участком горы «желтый» генератор. «Желтый» генератор нужен чтобы отличить простой участок территории от территории, занятой объектом. Также наделим скалу свойствами другого объекта, например, магического колодца !#OB10/12/0:T49; (в данном случае 49 - тип объекта, магический колодец). Теперь, чтобы гора у нас не стала обычным колодцем, нужно отключить его обычные свойства !#OB10/12/0:S;.
4. Чтобы при наведении на скалу указателя мыши и нажатия правой кнопки выводился текст "Магическая скала", нужна еще одна инструкция: !#VRz1:S^Магическая скала^; [нужный текст мы присвоим переменной z1] !#OB10/12/0:H1; [теперь по правому клику на скале будем видеть значение z1]
5. Теперь запишем генератор, срабатывающий при посещении участка нашей горы: !?OB10/12/0;
6. Если генератор сработает, то покажем сообщение: !!IF:M^При подходе к горе вы чувствуете прилив магической силы^;
7. И, наконец, даем герою очки магии: !!HE-1:Fd0/d0/d0/?v1; [запишем знания героя в переменную v1], !!VRv1:*40; [умножим v1 на 40], !!HE-1:Iv1; [даем очки магии], !!IF:Q1/35/v1/1^^; [показываем картинку с добавленным количеством очков магии].
8. Забираем у героя все очки хода: !!HE-1:W0;
Все, скрипт готов, он будет выглядеть так:
ZVSE
!#TR10/12/0:P1;
!#TR10/12/0:E0;
!#OB10/12/0:T49;
!#OB10/12/0:S;
!#VRz1:S^Магическая скала ^;
!#OB10/12/0:H1;
!?OB10/12/0;
!!IF:M^ При подходе к горе вы чувствуете прилив магической силы^;
!!HE-1:Fd0/d0/d0/?v1;
!!VRv1:*40;
!!HE-1:Iv1;
!!IF:Q1/35/v1/1^^;
!!HE-1:W0;
Можно сохранять карту и тестировать ее в игре.
Генераторы
Когда игрок активирует определенный генератор, появляется возможность активировать один или более приемников. Признаком завершения блока приемников после генератора служит любой другой генератор. Генератор вызывается без параметров и может содержать только условия, например: !?BA0&v10=51; (сработает, если переменная v10 равна 51). Вот список всех генераторов:
!?AE - генератор, срабатывающий при одевании/снятии артефакта
!?BA - контролирует процесс боя
!?BF - контролирует поле боя
!?BG - тип действия на любую группу монстров
!?BR - начало хода
!?CM - нажатие правой кнопки мыши
!?CO - для командиров
!?FU - функция
!?GE - глобальное событие
!?HE - когда герой атакует
!?HL - герой получает следующий уровень
!?HM - срабатывает перед началом движения героя