Игромания - Игрострой. S.T.A.L.K.E.R. Создание типовых квестов — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Игромания - Игрострой. S.T.A.L.K.E.R. Создание типовых квестов — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Новая страница: «На PDA Меченого поступило очередное задание — найти и уничтожить в глухой чащобе волка-отш...»)
 
(Косметические правки. <<< aka_sektor)
 
(не показаны 2 промежуточных версий 1 участника)
Строка 1: Строка 1:
 
На PDA Меченого поступило очередное задание — найти и уничтожить в глухой чащобе волка-отшельника. Темный-темный лес. Звенящая тишина. Отсутствие видимых признаков жизни. Внезапно Меченый видит на опушке домик, заходит внутрь и встречается с хозяином, который рассказывает главному герою обо всех ужасах, творящихся в здешних местах.
 
На PDA Меченого поступило очередное задание — найти и уничтожить в глухой чащобе волка-отшельника. Темный-темный лес. Звенящая тишина. Отсутствие видимых признаков жизни. Внезапно Меченый видит на опушке домик, заходит внутрь и встречается с хозяином, который рассказывает главному герою обо всех ужасах, творящихся в здешних местах.
 +
  
 
Нет, это не сюжет продолжения «'''Сталкера'''», а всего лишь одна дополнительная миссия, разработанная в нашей игрострой-лаборатории. В прошлых статьях по модифицированию «Сталкера» мы изучили интерфейс редактора карт из официального SDK, а также научились конструировать несложные уровни для игры на основе стандартных объектов и новых сцен, изготовленных в '''3DS Max'''. Сегодня мы двинемся дальше — осветим тему написания несложных типовых квестов для игры.
 
Нет, это не сюжет продолжения «'''Сталкера'''», а всего лишь одна дополнительная миссия, разработанная в нашей игрострой-лаборатории. В прошлых статьях по модифицированию «Сталкера» мы изучили интерфейс редактора карт из официального SDK, а также научились конструировать несложные уровни для игры на основе стандартных объектов и новых сцен, изготовленных в '''3DS Max'''. Сегодня мы двинемся дальше — осветим тему написания несложных типовых квестов для игры.
 +
  
 
= Быстрый старт =
 
= Быстрый старт =
 +
 
Поскольку официальный редактор не позволяет править уровни одиночной игры, а как следствие — редактировать файлы скриптов, путей следования NPC и другие ресурсы, мы будем писать квесты в... обычном «Блокноте». У данного подхода есть всего лишь один минус, который отпугивает большинство модмейкеров, — отсутствие удобной оболочки, редактора для просмотра содержимого файлов просто нет. Зато плюсов куда больше: возможность правки любых параметров, открытые для редактирования исходные коды и многое другое. Игра стоит свеч.
 
Поскольку официальный редактор не позволяет править уровни одиночной игры, а как следствие — редактировать файлы скриптов, путей следования NPC и другие ресурсы, мы будем писать квесты в... обычном «Блокноте». У данного подхода есть всего лишь один минус, который отпугивает большинство модмейкеров, — отсутствие удобной оболочки, редактора для просмотра содержимого файлов просто нет. Зато плюсов куда больше: возможность правки любых параметров, открытые для редактирования исходные коды и многое другое. Игра стоит свеч.
 +
  
 
С чего же начать? Первым делом попрактикуемся в создании несложных типовых заданий типа ''«убить сталкера», «уничтожить лагерь», «найди ценный артефакт»''.
 
С чего же начать? Первым делом попрактикуемся в создании несложных типовых заданий типа ''«убить сталкера», «уничтожить лагерь», «найди ценный артефакт»''.
 +
  
 
Запустите «Блокнот» и подгрузите в него файл '''task_manager.ltx''' из директории '''gamedata\config\misc''' с распакованной игрой (если у вас есть лишь недавно установленная версия «Сталкера», разархивируйте базы данных игры при помощи утилиты '''S.T.A.L.K.E.R. Data Unpacker''').
 
Запустите «Блокнот» и подгрузите в него файл '''task_manager.ltx''' из директории '''gamedata\config\misc''' с распакованной игрой (если у вас есть лишь недавно установленная версия «Сталкера», разархивируйте базы данных игры при помощи утилиты '''S.T.A.L.K.E.R. Data Unpacker''').
 +
  
 
Файл содержит информацию о простейших игровых заданиях. Структура его следующая. В первой части файла — от оператора '''[list]''' до кейворда '''sar_monolith''' — объявляются специальные метки, ответственные за подключение новых квестов к игре. Пример одной из таких конструкций — буквосочетание '''tm_kill_stalker_5''', это название типовой миссии. Во второй части файла — после ключевого слова '''sar_monolith''' — размещаются тексты заданий: цели, задачи, ссылки на диалоги. Разберем структуру одного из квестов, начинающегося со специальной метки '''[tm_kill_stalker_3]''' (обратите внимание, что при объявлении задания в первой части файла квадратные скобки ставить не нужно):
 
Файл содержит информацию о простейших игровых заданиях. Структура его следующая. В первой части файла — от оператора '''[list]''' до кейворда '''sar_monolith''' — объявляются специальные метки, ответственные за подключение новых квестов к игре. Пример одной из таких конструкций — буквосочетание '''tm_kill_stalker_5''', это название типовой миссии. Во второй части файла — после ключевого слова '''sar_monolith''' — размещаются тексты заданий: цели, задачи, ссылки на диалоги. Разберем структуру одного из квестов, начинающегося со специальной метки '''[tm_kill_stalker_3]''' (обратите внимание, что при объявлении задания в первой части файла квадратные скобки ставить не нужно):
  
'''[tm_kill_stalker_3]'''
 
  
'''type = kill_stalker'''
+
<code>[tm_kill_stalker_3]
  
'''community = actor'''
+
type = kill_stalker
  
'''text = tm_kill_stalker_3_text'''
+
community = actor
  
'''description = tm_kill_stalker_3_descr'''
+
text = tm_kill_stalker_3_text
  
'''parent = trader'''
+
description = tm_kill_stalker_3_descr
  
'''target = sim_stalker_novice'''
+
parent = trader
  
''';reward_money = 1000'''
+
target = sim_stalker_novice
  
'''reward_reputation = -5'''
+
;reward_money = 1000
  
'''reward_rank = 2'''
+
reward_reputation = -5
  
'''reward_item = af_blood'''
+
reward_rank = 2
  
'''time = 86400'''
+
reward_item = af_blood
 +
 
 +
time = 86400
 +
 
 +
prior = 2</code>
  
'''prior = 2'''
 
  
 
Рассмотрим основные параметры. Самый первый — '''type''' — отвечает за тип задания, в данном случае — уничтожить сталкера ('''kill_stalker'''). В игре предусмотрено несколько видов стандартных заданий: уничтожение/защита лагеря (параметр '''eliminate_lager/defend_lager'''), убийство сталкера ('''kill_stalker'''), поиск артефакта/конечности монстра/предмета ('''artifact/monster_part/find_item''').
 
Рассмотрим основные параметры. Самый первый — '''type''' — отвечает за тип задания, в данном случае — уничтожить сталкера ('''kill_stalker'''). В игре предусмотрено несколько видов стандартных заданий: уничтожение/защита лагеря (параметр '''eliminate_lager/defend_lager'''), убийство сталкера ('''kill_stalker'''), поиск артефакта/конечности монстра/предмета ('''artifact/monster_part/find_item''').
  
+
 
 
''Поскольку специальных редакторов и утилит для изменения «Сталкера» нет, приходится править скрипты в «Блокноте», а игровые тексты — в табличном редакторе Excel. Не очень удобно, но альтернативы просто нет:'' http://storage5.static.itmages.ru/i/13/0703/h_1372879823_4434148_4825edfdb7.jpg<br />
 
''Поскольку специальных редакторов и утилит для изменения «Сталкера» нет, приходится править скрипты в «Блокноте», а игровые тексты — в табличном редакторе Excel. Не очень удобно, но альтернативы просто нет:'' http://storage5.static.itmages.ru/i/13/0703/h_1372879823_4434148_4825edfdb7.jpg<br />
 
http://storage5.static.itmages.ru/i/13/0703/h_1372879824_7949187_db9398f9b3.jpg
 
http://storage5.static.itmages.ru/i/13/0703/h_1372879824_7949187_db9398f9b3.jpg
 +
  
 
Параметр '''community''' определяет группировку, к которой принадлежит главный герой. По умолчанию во всех миссиях в качестве значения данной характеристики используется ключевое слово '''actor''' (персонаж).
 
Параметр '''community''' определяет группировку, к которой принадлежит главный герой. По умолчанию во всех миссиях в качестве значения данной характеристики используется ключевое слово '''actor''' (персонаж).
 +
  
 
'''text''' — название записи в файле '''stable_task_manager.xml''', содержащей текст задания. Текст отображается в диалогах.
 
'''text''' — название записи в файле '''stable_task_manager.xml''', содержащей текст задания. Текст отображается в диалогах.
 +
  
 
'''description''' — запись в файле '''stable_task_manager.xml'''. Здесь собран текст миссии, выводимый на PDA Меченого.
 
'''description''' — запись в файле '''stable_task_manager.xml'''. Здесь собран текст миссии, выводимый на PDA Меченого.
 +
  
 
Следующая настройка — атрибут '''parent''' — определяет имя заказчика, в данном случае '''trader''' (торговец Сидорович).
 
Следующая настройка — атрибут '''parent''' — определяет имя заказчика, в данном случае '''trader''' (торговец Сидорович).
 +
  
 
'''target''' — цель миссии, в текущем квесте — убийство одного из сталкеров — '''novice''' ('''sim_stalker_novice''').
 
'''target''' — цель миссии, в текущем квесте — убийство одного из сталкеров — '''novice''' ('''sim_stalker_novice''').
 +
  
 
'''reward_money''' — награда, которую получит игрок после выполнения задания.
 
'''reward_money''' — награда, которую получит игрок после выполнения задания.
 +
  
 
'''reward_reputation''' — число очков репутации, добавляемое игроку после прохождения квеста. Вы можете понизить Меченому репутацию за выполнение задания, выставив в качестве значения атрибута любое целое отрицательное число.
 
'''reward_reputation''' — число очков репутации, добавляемое игроку после прохождения квеста. Вы можете понизить Меченому репутацию за выполнение задания, выставив в качестве значения атрибута любое целое отрицательное число.
 +
  
 
'''reward_rank''' — количество ранговых очков за выполнение миссии.
 
'''reward_rank''' — количество ранговых очков за выполнение миссии.
 +
  
 
'''reward_item''' — бонусные предметы, вручаемые главному герою, за прохождение квеста.
 
'''reward_item''' — бонусные предметы, вручаемые главному герою, за прохождение квеста.
 +
  
 
'''time''' — время (в секундах), в течение которого игрок должен пройти миссию.
 
'''time''' — время (в секундах), в течение которого игрок должен пройти миссию.
 +
  
 
'''prior''' — приоритет данного задания перед остальными. Цифра 1 ставится в том случае, если задание крайне важно, и далее по нисходящей.
 
'''prior''' — приоритет данного задания перед остальными. Цифра 1 ставится в том случае, если задание крайне важно, и далее по нисходящей.
 +
  
 
Самое время попрактиковаться и модифицировать какой-нибудь оригинальный игровой квест. Отыщите строку '''[tm_kill_stalker_5]''' (для вызова меню поиска в «Блокноте» воспользуйтесь комбинацией горячих клавиш '''Ctrl+F''') и модифицируйте параметры данной миссии. Например, вы можете просто повысить/понизить сложность игры, увеличив или уменьшив время, отведенное игроку на выполнение задания (параметр '''time'''), снять значок блокировки строки (символ ;), '''reward_money''' (денежное вознаграждение) или, скажем, придать параметру '''reward_reputation''' значение ноль, чтобы Меченый не терял репутацию в Зоне.
 
Самое время попрактиковаться и модифицировать какой-нибудь оригинальный игровой квест. Отыщите строку '''[tm_kill_stalker_5]''' (для вызова меню поиска в «Блокноте» воспользуйтесь комбинацией горячих клавиш '''Ctrl+F''') и модифицируйте параметры данной миссии. Например, вы можете просто повысить/понизить сложность игры, увеличив или уменьшив время, отведенное игроку на выполнение задания (параметр '''time'''), снять значок блокировки строки (символ ;), '''reward_money''' (денежное вознаграждение) или, скажем, придать параметру '''reward_reputation''' значение ноль, чтобы Меченый не терял репутацию в Зоне.
 +
  
 
= Текстовый беспредел =
 
= Текстовый беспредел =
 +
 
С правкой исходного кода миссии мы разобрались. Движемся дальше и приступаем к модификации игровых текстов. Загляните в каталог '''gamedata\config\text\rus''' установленной игры, отыщите в директории файл '''stable_task_manager.xml''' и откройте его при помощи табличного редактора '''Microsoft Excel'''.
 
С правкой исходного кода миссии мы разобрались. Движемся дальше и приступаем к модификации игровых текстов. Загляните в каталог '''gamedata\config\text\rus''' установленной игры, отыщите в директории файл '''stable_task_manager.xml''' и откройте его при помощи табличного редактора '''Microsoft Excel'''.
 +
  
 
После запуска программы вы увидите, что вся информация из '''XML'''-файла будет распределена по двум столбцам — '''A''' и '''B''', которым соответствуют названия '''id''' (идентификационный номер) и '''text''' (текст). Если спускаться плавно вниз по столбцу '''id''', то нетрудно установить так называемую закономерность. Строки '''3, 6, 9''' и далее в арифметической прогрессии содержат заголовок типовой миссии. Строки '''4, 7, 10, 13, 16''' с окончанием '''_descr''' — краткое описание (цель задания), выводимое на PDA главного героя. Ну а строки '''5, 8, 11, 14''' и далее, заканчивающаяся на '''_text''', содержат текст, отображаемый во время диалога с персонажем, у которого вы получили задание.
 
После запуска программы вы увидите, что вся информация из '''XML'''-файла будет распределена по двум столбцам — '''A''' и '''B''', которым соответствуют названия '''id''' (идентификационный номер) и '''text''' (текст). Если спускаться плавно вниз по столбцу '''id''', то нетрудно установить так называемую закономерность. Строки '''3, 6, 9''' и далее в арифметической прогрессии содержат заголовок типовой миссии. Строки '''4, 7, 10, 13, 16''' с окончанием '''_descr''' — краткое описание (цель задания), выводимое на PDA главного героя. Ну а строки '''5, 8, 11, 14''' и далее, заканчивающаяся на '''_text''', содержат текст, отображаемый во время диалога с персонажем, у которого вы получили задание.
 +
  
 
Таким образом, для изменения текстов того или иного одноуровневого задания, прописанного в файле '''task_manager.ltx''', вам нужно проделать следующие нехитрые манипуляции. Первым делом скопируйте в «Блокнот» название определенной миссии из '''task_manager.ltx''' (без квадратных скобок), ее описание для вывода на PDA (параметр '''description''') и текст диалога ('''text'''). Затем поочередно отыщите выписанные ключевые слова в XML-файле '''stable_task_manager.xml''' и модифицируйте текст каждой из записей. Закончив правку задания, сохраните все изменения и протестируйте квест в игре.
 
Таким образом, для изменения текстов того или иного одноуровневого задания, прописанного в файле '''task_manager.ltx''', вам нужно проделать следующие нехитрые манипуляции. Первым делом скопируйте в «Блокнот» название определенной миссии из '''task_manager.ltx''' (без квадратных скобок), ее описание для вывода на PDA (параметр '''description''') и текст диалога ('''text'''). Затем поочередно отыщите выписанные ключевые слова в XML-файле '''stable_task_manager.xml''' и модифицируйте текст каждой из записей. Закончив правку задания, сохраните все изменения и протестируйте квест в игре.
 +
  
 
{| class="wide"
 
{| class="wide"
Строка 80: Строка 105:
 
|-
 
|-
 
|
 
|
* Чтобы оставить свой собственный авторский след в файле task_manager.ltx, да и вообще в любом конфигурационном файле «Сталкера», нужно всего-то лишь поставить в нужном месте (после кода или с новой строки) символ точки с запятой и после него вживить комментарий, например: '''tm_eliminate_camp_4 ; игроманский комментарий, не удалять'''.<br />
+
* Чтобы оставить свой собственный авторский след в файле task_manager.ltx, да и вообще в любом конфигурационном файле «Сталкера», нужно всего-то лишь поставить в нужном месте (после кода или с новой строки) символ точки с запятой и после него вживить комментарий, например: '''tm_eliminate_camp_4 ; игроманский комментарий, не удалять'''.
*Далеко не все квесты, написанные разработчиками, вошли в оригинальную игру. Что, никогда о таком не слышали? Тогда имейте в виду, что, например, в файле '''task_manager.ltx''' содержится ряд закомментированных, но вполне рабочих заданий, цель которых сводится к убийству сталкеров и поиску полезных вещиц. После тщательного прочесывания документа на наличие такого рода заданий мы обнаружили следующие заблокированные квесты:<br />
+
  
''';--[barmen_eliminate_camp_3]'''
 
  
''';--[barmen_find_item_1]'''
+
*Далеко не все квесты, написанные разработчиками, вошли в оригинальную игру. Что, никогда о таком не слышали? Тогда имейте в виду, что, например, в файле '''task_manager.ltx''' содержится ряд закомментированных, но вполне рабочих заданий, цель которых сводится к убийству сталкеров и поиску полезных вещиц. После тщательного прочесывания документа на наличие такого рода заданий мы обнаружили следующие заблокированные квесты:
  
''';--[barmen_find_item_2]'''
 
  
''';--[barmen_find_item_3]'''
+
<code>;--[barmen_eliminate_camp_3]
 +
 
 +
;--[barmen_find_item_1]
 +
 
 +
;--[barmen_find_item_2]
 +
 
 +
;--[barmen_find_item_3]</code>
 +
 
  
 
*Для преобразования геймплея S.T.A.L.K.E.R. достаточно поправить всего лишь несколько параметров каждой типовой миссии в файле '''task_manager.ltx'''. Как вариант, вы можете значительно сократить время, отведенное на выполнение каждого квеста, занизить очки репутации за прохождение той или иной миссии, но в то же время в несколько раз увеличить число бонусов и денежных средств.
 
*Для преобразования геймплея S.T.A.L.K.E.R. достаточно поправить всего лишь несколько параметров каждой типовой миссии в файле '''task_manager.ltx'''. Как вариант, вы можете значительно сократить время, отведенное на выполнение каждого квеста, занизить очки репутации за прохождение той или иной миссии, но в то же время в несколько раз увеличить число бонусов и денежных средств.
 
|}
 
|}
 +
  
 
= Квестострой =
 
= Квестострой =
 +
 
Теперь, когда вы изучили основы редактирования однотипных игровых заданий, можно попробовать силы в написании своего собственного квеста — создать необходимые записи в менеджере заданий (файл '''task_manager.ltx'''), а также снабдить квест текстовыми описаниями.
 
Теперь, когда вы изучили основы редактирования однотипных игровых заданий, можно попробовать силы в написании своего собственного квеста — создать необходимые записи в менеджере заданий (файл '''task_manager.ltx'''), а также снабдить квест текстовыми описаниями.
 +
  
 
Запустите «Блокнот» и подгрузите в него файл '''task_manager.ltx''' из директории '''gamedata\config\misc'''. Отыщите ключевое слово '''sar_monolith''' и после него с новой строки добавьте следующую конструкцию:
 
Запустите «Блокнот» и подгрузите в него файл '''task_manager.ltx''' из директории '''gamedata\config\misc'''. Отыщите ключевое слово '''sar_monolith''' и после него с новой строки добавьте следующую конструкцию:
  
'''; Ваш авторский комментарий
 
  
[mission_name]'''
+
<code>; Ваш авторский комментарий
 +
 
 +
[mission_name]</code>
 +
 
  
 
Здесь '''[mission_name]''' — произвольное наименование квеста, например, '''tm_kill_stalker_7'''.
 
Здесь '''[mission_name]''' — произвольное наименование квеста, например, '''tm_kill_stalker_7'''.
 +
  
 
Далее скопируйте какое-нибудь типовое задание, например, '''[tm_kill_stalker_2]''' в буфер обмена и поместите дубликат в самый конец документа. Измените название клонированной миссии, заключенное в квадратные скобки, на название квеста, объявленного вами в списке заданий. Модифицируйте параметры оригинальной миссии, при необходимости добавьте в код миссии дополнительные команды. Самое главное — не забудьте поправить значения параметров '''text''' и '''description''', которые соответствуют названиям текстовых записей в файлах
 
Далее скопируйте какое-нибудь типовое задание, например, '''[tm_kill_stalker_2]''' в буфер обмена и поместите дубликат в самый конец документа. Измените название клонированной миссии, заключенное в квадратные скобки, на название квеста, объявленного вами в списке заданий. Модифицируйте параметры оригинальной миссии, при необходимости добавьте в код миссии дополнительные команды. Самое главное — не забудьте поправить значения параметров '''text''' и '''description''', которые соответствуют названиям текстовых записей в файлах
 +
  
 
'''gamedata\config\gameplay\storyline_info_taskmanager.xml''' и '''gamedata\config\text\rus\stable_task_manager.xml'''. Затем откройте «Блокнотом» XML-файл '''storyline_info_taskmanager.xml''' из каталога '''gamedata\config\gameplay''' с игрой и добавьте в конец файла следующий блок:
 
'''gamedata\config\gameplay\storyline_info_taskmanager.xml''' и '''gamedata\config\text\rus\stable_task_manager.xml'''. Затем откройте «Блокнотом» XML-файл '''storyline_info_taskmanager.xml''' из каталога '''gamedata\config\gameplay''' с игрой и добавьте в конец файла следующий блок:
  
'''<article id="[descr]" name="kill_stalker" article_type="task">'''
 
  
'''<text>[descr] </text>'''
+
<code><article id="[descr]" name="kill_stalker" article_type="task">
 +
 
 +
<text>[descr] </text>
 +
 
 +
</article></code>
  
'''</article>'''
 
  
 
В данном фрагменте кода '''[descr]''' — значение параметра '''description''' в теле миссии, (в нашем случае — '''tm_kill_stalker_7_descr''').
 
В данном фрагменте кода '''[descr]''' — значение параметра '''description''' в теле миссии, (в нашем случае — '''tm_kill_stalker_7_descr''').
 +
  
 
Осталось внести изменения в файл '''stable_task_manager.xml''', содержащий тексты заданий на русском языке. Перейдите в каталог '''gamedata\config\text\rus''' и при помощи любого табличного редактора — скажем, Excel — откройте файл '''stable_task_manager.xml'''. Передвиньте ползунок в правой части программы в нижнюю часть документа. В ячейке на пересечении 391 строки и первого столбца введите ключевое слово, соответствующее названию вашего квеста в файле '''task_manager.ltx'''. После этого в поле напротив (ячейка '''B-391''') напечатайте название будущего задания.
 
Осталось внести изменения в файл '''stable_task_manager.xml''', содержащий тексты заданий на русском языке. Перейдите в каталог '''gamedata\config\text\rus''' и при помощи любого табличного редактора — скажем, Excel — откройте файл '''stable_task_manager.xml'''. Передвиньте ползунок в правой части программы в нижнюю часть документа. В ячейке на пересечении 391 строки и первого столбца введите ключевое слово, соответствующее названию вашего квеста в файле '''task_manager.ltx'''. После этого в поле напротив (ячейка '''B-391''') напечатайте название будущего задания.
 +
  
 
В поле '''A-392''' ('''A''' — название столбца, '''392''' — порядковый номер строки) вбейте название, прописанное в качестве параметра '''description''' вашей миссии, а в области '''B-392''' — текст сообщения, который будет подан на PDA главного героя. В ячейке '''A-393''' пропишите значение характеристики '''text''' вашей миссии и в поле напротив наберите текст задания для отображения во время беседы между Меченым и работодателем. Сохраните изменения и закройте табличный редактор.
 
В поле '''A-392''' ('''A''' — название столбца, '''392''' — порядковый номер строки) вбейте название, прописанное в качестве параметра '''description''' вашей миссии, а в области '''B-392''' — текст сообщения, который будет подан на PDA главного героя. В ячейке '''A-393''' пропишите значение характеристики '''text''' вашей миссии и в поле напротив наберите текст задания для отображения во время беседы между Меченым и работодателем. Сохраните изменения и закройте табличный редактор.
 +
  
 
= * * * =
 
= * * * =
 +
 
Мы изучили азы создания несложных квестов для S.T.A.L.K.E.R. и попутно разобрали структуру скриптовых файлов. Если тема создания новых миссий для «Сталкера» вам интересна, обязательно загляните сюда: [ссылка будет позже]. Там вас поджидает подробное руководство по разработке сложных миссий и написанию нелинейных диалогов для S.T.A.L.K.E.R.. Заранее предупреждаем — материал рассчитан на модмейкеров со стажем.
 
Мы изучили азы создания несложных квестов для S.T.A.L.K.E.R. и попутно разобрали структуру скриптовых файлов. Если тема создания новых миссий для «Сталкера» вам интересна, обязательно загляните сюда: [ссылка будет позже]. Там вас поджидает подробное руководство по разработке сложных миссий и написанию нелинейных диалогов для S.T.A.L.K.E.R.. Заранее предупреждаем — материал рассчитан на модмейкеров со стажем.
 +
  
 
= Авторы =
 
= Авторы =

Текущая версия на 15:29, 5 июля 2013

На PDA Меченого поступило очередное задание — найти и уничтожить в глухой чащобе волка-отшельника. Темный-темный лес. Звенящая тишина. Отсутствие видимых признаков жизни. Внезапно Меченый видит на опушке домик, заходит внутрь и встречается с хозяином, который рассказывает главному герою обо всех ужасах, творящихся в здешних местах.


Нет, это не сюжет продолжения «Сталкера», а всего лишь одна дополнительная миссия, разработанная в нашей игрострой-лаборатории. В прошлых статьях по модифицированию «Сталкера» мы изучили интерфейс редактора карт из официального SDK, а также научились конструировать несложные уровни для игры на основе стандартных объектов и новых сцен, изготовленных в 3DS Max. Сегодня мы двинемся дальше — осветим тему написания несложных типовых квестов для игры.


Быстрый старт

Поскольку официальный редактор не позволяет править уровни одиночной игры, а как следствие — редактировать файлы скриптов, путей следования NPC и другие ресурсы, мы будем писать квесты в... обычном «Блокноте». У данного подхода есть всего лишь один минус, который отпугивает большинство модмейкеров, — отсутствие удобной оболочки, редактора для просмотра содержимого файлов просто нет. Зато плюсов куда больше: возможность правки любых параметров, открытые для редактирования исходные коды и многое другое. Игра стоит свеч.


С чего же начать? Первым делом попрактикуемся в создании несложных типовых заданий типа «убить сталкера», «уничтожить лагерь», «найди ценный артефакт».


Запустите «Блокнот» и подгрузите в него файл task_manager.ltx из директории gamedata\config\misc с распакованной игрой (если у вас есть лишь недавно установленная версия «Сталкера», разархивируйте базы данных игры при помощи утилиты S.T.A.L.K.E.R. Data Unpacker).


Файл содержит информацию о простейших игровых заданиях. Структура его следующая. В первой части файла — от оператора [list] до кейворда sar_monolith — объявляются специальные метки, ответственные за подключение новых квестов к игре. Пример одной из таких конструкций — буквосочетание tm_kill_stalker_5, это название типовой миссии. Во второй части файла — после ключевого слова sar_monolith — размещаются тексты заданий: цели, задачи, ссылки на диалоги. Разберем структуру одного из квестов, начинающегося со специальной метки [tm_kill_stalker_3] (обратите внимание, что при объявлении задания в первой части файла квадратные скобки ставить не нужно):


[tm_kill_stalker_3]
 
type = kill_stalker
 
community = actor
 
text = tm_kill_stalker_3_text
 
description = tm_kill_stalker_3_descr
 
parent = trader
 
target = sim_stalker_novice
 
;reward_money = 1000
 
reward_reputation = -5
 
reward_rank = 2
 
reward_item = af_blood
 
time = 86400
 
prior = 2


Рассмотрим основные параметры. Самый первый — type — отвечает за тип задания, в данном случае — уничтожить сталкера (kill_stalker). В игре предусмотрено несколько видов стандартных заданий: уничтожение/защита лагеря (параметр eliminate_lager/defend_lager), убийство сталкера (kill_stalker), поиск артефакта/конечности монстра/предмета (artifact/monster_part/find_item).


Поскольку специальных редакторов и утилит для изменения «Сталкера» нет, приходится править скрипты в «Блокноте», а игровые тексты — в табличном редакторе Excel. Не очень удобно, но альтернативы просто нет: http://storage5.static.itmages.ru/i/13/0703/h_1372879823_4434148_4825edfdb7.jpg
http://storage5.static.itmages.ru/i/13/0703/h_1372879824_7949187_db9398f9b3.jpg


Параметр community определяет группировку, к которой принадлежит главный герой. По умолчанию во всех миссиях в качестве значения данной характеристики используется ключевое слово actor (персонаж).


text — название записи в файле stable_task_manager.xml, содержащей текст задания. Текст отображается в диалогах.


description — запись в файле stable_task_manager.xml. Здесь собран текст миссии, выводимый на PDA Меченого.


Следующая настройка — атрибут parent — определяет имя заказчика, в данном случае trader (торговец Сидорович).


target — цель миссии, в текущем квесте — убийство одного из сталкеров — novice (sim_stalker_novice).


reward_money — награда, которую получит игрок после выполнения задания.


reward_reputation — число очков репутации, добавляемое игроку после прохождения квеста. Вы можете понизить Меченому репутацию за выполнение задания, выставив в качестве значения атрибута любое целое отрицательное число.


reward_rank — количество ранговых очков за выполнение миссии.


reward_item — бонусные предметы, вручаемые главному герою, за прохождение квеста.


time — время (в секундах), в течение которого игрок должен пройти миссию.


prior — приоритет данного задания перед остальными. Цифра 1 ставится в том случае, если задание крайне важно, и далее по нисходящей.


Самое время попрактиковаться и модифицировать какой-нибудь оригинальный игровой квест. Отыщите строку [tm_kill_stalker_5] (для вызова меню поиска в «Блокноте» воспользуйтесь комбинацией горячих клавиш Ctrl+F) и модифицируйте параметры данной миссии. Например, вы можете просто повысить/понизить сложность игры, увеличив или уменьшив время, отведенное игроку на выполнение задания (параметр time), снять значок блокировки строки (символ ;), reward_money (денежное вознаграждение) или, скажем, придать параметру reward_reputation значение ноль, чтобы Меченый не терял репутацию в Зоне.


Текстовый беспредел

С правкой исходного кода миссии мы разобрались. Движемся дальше и приступаем к модификации игровых текстов. Загляните в каталог gamedata\config\text\rus установленной игры, отыщите в директории файл stable_task_manager.xml и откройте его при помощи табличного редактора Microsoft Excel.


После запуска программы вы увидите, что вся информация из XML-файла будет распределена по двум столбцам — A и B, которым соответствуют названия id (идентификационный номер) и text (текст). Если спускаться плавно вниз по столбцу id, то нетрудно установить так называемую закономерность. Строки 3, 6, 9 и далее в арифметической прогрессии содержат заголовок типовой миссии. Строки 4, 7, 10, 13, 16 с окончанием _descr — краткое описание (цель задания), выводимое на PDA главного героя. Ну а строки 5, 8, 11, 14 и далее, заканчивающаяся на _text, содержат текст, отображаемый во время диалога с персонажем, у которого вы получили задание.


Таким образом, для изменения текстов того или иного одноуровневого задания, прописанного в файле task_manager.ltx, вам нужно проделать следующие нехитрые манипуляции. Первым делом скопируйте в «Блокнот» название определенной миссии из task_manager.ltx (без квадратных скобок), ее описание для вывода на PDA (параметр description) и текст диалога (text). Затем поочередно отыщите выписанные ключевые слова в XML-файле stable_task_manager.xml и модифицируйте текст каждой из записей. Закончив правку задания, сохраните все изменения и протестируйте квест в игре.


Тонкости квестостроения
  • Чтобы оставить свой собственный авторский след в файле task_manager.ltx, да и вообще в любом конфигурационном файле «Сталкера», нужно всего-то лишь поставить в нужном месте (после кода или с новой строки) символ точки с запятой и после него вживить комментарий, например: tm_eliminate_camp_4 ; игроманский комментарий, не удалять.


  • Далеко не все квесты, написанные разработчиками, вошли в оригинальную игру. Что, никогда о таком не слышали? Тогда имейте в виду, что, например, в файле task_manager.ltx содержится ряд закомментированных, но вполне рабочих заданий, цель которых сводится к убийству сталкеров и поиску полезных вещиц. После тщательного прочесывания документа на наличие такого рода заданий мы обнаружили следующие заблокированные квесты:


;--[barmen_eliminate_camp_3]
 
;--[barmen_find_item_1]
 
;--[barmen_find_item_2]
 
;--[barmen_find_item_3]


  • Для преобразования геймплея S.T.A.L.K.E.R. достаточно поправить всего лишь несколько параметров каждой типовой миссии в файле task_manager.ltx. Как вариант, вы можете значительно сократить время, отведенное на выполнение каждого квеста, занизить очки репутации за прохождение той или иной миссии, но в то же время в несколько раз увеличить число бонусов и денежных средств.


Квестострой

Теперь, когда вы изучили основы редактирования однотипных игровых заданий, можно попробовать силы в написании своего собственного квеста — создать необходимые записи в менеджере заданий (файл task_manager.ltx), а также снабдить квест текстовыми описаниями.


Запустите «Блокнот» и подгрузите в него файл task_manager.ltx из директории gamedata\config\misc. Отыщите ключевое слово sar_monolith и после него с новой строки добавьте следующую конструкцию:


; Ваш авторский комментарий
 
[mission_name]


Здесь [mission_name] — произвольное наименование квеста, например, tm_kill_stalker_7.


Далее скопируйте какое-нибудь типовое задание, например, [tm_kill_stalker_2] в буфер обмена и поместите дубликат в самый конец документа. Измените название клонированной миссии, заключенное в квадратные скобки, на название квеста, объявленного вами в списке заданий. Модифицируйте параметры оригинальной миссии, при необходимости добавьте в код миссии дополнительные команды. Самое главное — не забудьте поправить значения параметров text и description, которые соответствуют названиям текстовых записей в файлах


gamedata\config\gameplay\storyline_info_taskmanager.xml и gamedata\config\text\rus\stable_task_manager.xml. Затем откройте «Блокнотом» XML-файл storyline_info_taskmanager.xml из каталога gamedata\config\gameplay с игрой и добавьте в конец файла следующий блок:


<article id="[descr]" name="kill_stalker" article_type="task">
 
<text>[descr] </text>
 
</article>


В данном фрагменте кода [descr] — значение параметра description в теле миссии, (в нашем случае — tm_kill_stalker_7_descr).


Осталось внести изменения в файл stable_task_manager.xml, содержащий тексты заданий на русском языке. Перейдите в каталог gamedata\config\text\rus и при помощи любого табличного редактора — скажем, Excel — откройте файл stable_task_manager.xml. Передвиньте ползунок в правой части программы в нижнюю часть документа. В ячейке на пересечении 391 строки и первого столбца введите ключевое слово, соответствующее названию вашего квеста в файле task_manager.ltx. После этого в поле напротив (ячейка B-391) напечатайте название будущего задания.


В поле A-392 (A — название столбца, 392 — порядковый номер строки) вбейте название, прописанное в качестве параметра description вашей миссии, а в области B-392 — текст сообщения, который будет подан на PDA главного героя. В ячейке A-393 пропишите значение характеристики text вашей миссии и в поле напротив наберите текст задания для отображения во время беседы между Меченым и работодателем. Сохраните изменения и закройте табличный редактор.


* * *

Мы изучили азы создания несложных квестов для S.T.A.L.K.E.R. и попутно разобрали структуру скриптовых файлов. Если тема создания новых миссий для «Сталкера» вам интересна, обязательно загляните сюда: [ссылка будет позже]. Там вас поджидает подробное руководство по разработке сложных миссий и написанию нелинейных диалогов для S.T.A.L.K.E.R.. Заранее предупреждаем — материал рассчитан на модмейкеров со стажем.


Авторы

Статью создал: Эдуард Клишин
Добавил на stalkerin: aka_sektor

Другие места
LANGUAGE