Создание сценариев - средний уровень

Материал из Wesnoth Life Wiki
Перейти к: навигация, поиск

Быстрое перемещение

Создание сценариев

Создание сценариев - средний уровень

В этом руководстве мы залезем поглубже в секреты WML и построения сценария: события, объяснения использования некоторых специальных атрибутов, более продвинутая настройка сторон...

События

Вы можете запускать некоторые действия, которые должны происходить по сценарию, используя механизм событий. Давайте посмотрим на пример простого события. Предположим, что Вы хотите, чтобы Конрад сказал: "it's getting cold" когда он попадёт на локацию (4,8):

 [event]
   name=moveto
   [filter]
     id=Konrad
     x=4
     y=8
    [/filter]
    [message]
      speaker=Konrad
      message= _ "It's getting cold"
    [/message]
 [/event]

Во-первых, Вы должны определить имя события. Тут мы говорим о событии 'moveto', подразумевающим, что оно возникает каждый раз, когда юнит куда-то перемещается. Для списка возможных имён событий смотрите EventWML

Конечно мы не хотим, чтобы событие срабатывало при каждом движении юнита, так что мы используем тег [filter], чтобы фильтровать события движения и выбрать лишь то, которое нам нужно. Как использовать фильтры описано в FilterWML.

Специальные атрибуты

Обратите внимание, что обычно набор действий выполняется только один раз. Однако, Вы можете определить набор действий, который будет выполняться каждый раз при срабатывании события, если добавите в определение события атрибут first_time_only=no.

В таком случае, когда событие срабатывает, игрок не сможет отменить ход, даже если это было событие moveto. Мы можем сделать сценарий, в котором ходы вообще нельзя будет отменять, добавив событие

[event]
  name=moveto
  first_time_only=no
[/event]

(оно не будет ничего делать, но помешает игроку отменить ход)

Событие:

[event]
  name=enemies defeated
  [endlevel]
    result=victory
    bonus=yes
  [/endlevel]
[/event]

вызывается при уничтожении противников и вызывается автоматически в конце каждого сценария. Чтобы оно не срабатывало добавьте атрибут victory_when_enemies_defeated=no в главный тег (обычно [scenario]).

Атрибут disallow_recall=yes не позволит игроку призывать (recalling) (но оставляет возможность вербовать) юнитов в это сценарии.

Атрибуты fog=yes и shroud=yes могут быть помещены в тег [side], что создаст для этой стороны туман войны (то есть не позволит видеть ходы противника) или скроет для неё карту.

Дополнительная настройка сторон

Итак, как Вы уже видели в Создание сценариев - введение, Вы можете настроить то, с чем начинает игру игрок или AI, а так же задать некоторые опции, контролирующие поведение AI. Как можно понять из тега [side], приведённого ниже, мы рассмотрим интересные вещи, которые помогут нам контролировать стороны в игре. Я не собираюсь объяснять всё, только ключевые моменты.

[scenario]
.
.
.

  [side]
    type=Lich
    id=Galga
    side=2
    canrecruit=yes

    #ifdef EASY
     recruit=Skeleton,Revenant,Blood Bat,Ghost,Bone Shooter
     recruitment_pattern=fighter,fighter,archer,scout
     gold=300
    #endif

    #ifdef NORMAL
     recruit=Skeleton,Revenant,Chocobone,Blood Bat,Wraith,Bone Shooter,Dark Adept 
     recruitment_pattern=fighter,fighter,archer,scout
     gold=500
    #endif

    #ifdef HARD
     recruit=Skeleton,Revenant,Chocobone,Wraith,Bone Shooter,Dark Adept
     recruitment_pattern=fighter,fighter,archer,scout
     gold=700
    #endif

    aggression=1.0
    village_value=0.0
    leader_value=50.0
    enemy=1
  [/side]
[/scenario]

Как можно видеть из листинга, приведённого выше, тег [side] может оказаться достаточно запутанным. Инструкции #ifdef понять достаточно легко. Если игрок играет на уровне EASY, тогда выполняется всё, указанное между #ifdef EASY и #endif, остальные же операторы просто игнорируются. Если уровень сложности установлен на NORMAL, тогда выполняется всё между #ifdef NORMAL и #endif. Если же уровень сложности HARD - тогда, как понятно, выполнятся операторы между #ifdef HARD и #endif. Благодаря этому Вы можете настроит сценарий для каждого уровня сложности по своему. Тут, кстати, есть два новых ключа: village_value иleader_value.

Теперь давайте посмотрим кое-что более интересное. Файл карты содержит тайлы земли - это самый нижний слой. Юниты же идут во время игры по самому верхнему слою. Это всё хорошо, но было бы неплохо поместить на карту какие-нибудь предметы, верно? Что если Вы хотите разместить здания или зелье или что-то ещё на карте? Это легко! Используйте тег [item]:

[scenario]
.
.
.

  [item]
    x=31
    y=43
    image=item-holywater.png 
  [/item]

.
.
.
[/scenario]

Тег [item] очень просто использовать, как можно видеть из примера. У него есть три ключа: первые два - x иy - определяют расположение предмета на карте, а третий - image - это файл с изображением этого предмета; картинка должна находиться в папке с изображениями. Просто, правда?

Теперь у Вас достаточно информации для того чтобы сделать интересно выглядящий сценарий с настроенным AI. Это уже много. Так что теперь можно подумать о том, как вписать ваш сценарий в кампанию. Это достигается показом вступления перед началом сценария, для этого нужен тег [story].

[scenario]
.
.
.

  [story]
    [part]
      background=portraits/elves/transparent/high-lord.png
      story= _ "...And so he entered the dark and gloomy cave..."
    [/part]
    .
    .
    . 
  [/story]
.
.
. 
[/scenario]

Тег story содержит текст, который показывается игроку перед началом сценария. Вы можете его не использовать, тогда вступление будет опущено. Тег story состоит из частей (расположенных в тегах [part]). Каждая часть может содержать несколько ключей, описывающих содержимое этого тега. Смотрите IntroWML.

Дополнительно