Oblivion CS:Скриптинг

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


Скрипты.
45px-Scroll.png

автор: OSFM team
переводчик: OSFM team
редактор: Garin (OSFM team)
дата публикации оригинала: 26 октября 2008г.
ссылка на сайт: Rumor
ver: 1.2.0

В основу данного раздела вики положена информация из учебника "Oblivion Scripting for Modmaker" (OSFM), который был, в свою очередь, написан командой OSFM team на основании информации, размещенной на официальной вики Bethesda


Что такое скрипт?

Скриптовый язык, который использован в игре TES 4 Oblivion, является уникальным, его нельзя использовать нигде, кроме самой игры. Но уникальным его можно назвать и по другим причинам. Скрипты дают нам невиданные возможности по модернизации и изменению игрового мира. Они могут то, чего нельзя больше сделать никакими другими методами.


В скриптовый язык TES 4 привнесено много нового и это откровенно радует - теперь стали возможны вещи, которые раньше нельзя было реализовать в TES 3.


Сами скрипты представляют собой небольшие текстовые фрагменты с программным кодом, который выполняет в игре определенные функции, изменяя таким образом игровой мир. Скрипты могут "вешаться" на различные объекты, а также выполнять определенные действия в диалогах или отслеживать прогресс игрока в квестах. Одним из самых больших недостатков скриптового языка является отсутствие возможности определения кода нажатой на клавиатуре клавиши или кнопок мыши. Но и здесь уже появились средства, с помощью которых эта проблема решается легко и просто. Речь идет о расширителе скриптового языка OBSE, который содержит на данный момент множество вполне работоспособных и очень полезных функций.


Напомним, что скрипт - это интерпретируемый программный код. Следовательно, он не может выполняться самостоятельно - для его работы необходима другая, скомпилированная программа. В нашем случае это делает "движок" игры, который "зашит" в исполняемый exe-файл - Oblivion.exe.


Что могут скрипты?

На все, что есть в игре, вы можете тем или иным способом воздействовать с помощью скриптов. Огромное многообразие игрового мира Обливион и богатство его ресурсов – в вашем распоряжении. Игра всегда реагирует на действия игрока. Но с помощью скриптов вы можете изменить реакцию игры на эти действия, например, если игрок намеренно или невзначай осквернил святыню, вы можете вызвать непогоду, превратить день в ночь, вызвать гром и молнию...


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

Чего не могут скрипты?

Как бы там ни было, а скриптовый язык имеет свои ограничения. В нем нет того богатства и универсальности функций, которые есть в "больших" языках программирования, таких как СИ++, Pascal или Delphi. Функции Обливиона специализированы. На данный момент известно 359 функций, но в игре задействовано только 353 из них. Тем не менее никакой избыточности нет – функции в основном писались и добавлялись разработчиками в игру по необходимости.

Если вы захотите сделать нечто экстраординарное, что выходит за рамки возможностей языка, то, скорее всего, это у вас не получится - вы не можете изменить скомпилированный файл Olivion.exe, а исходные коды игры по понятным причинам Bethesda не опубликовала. К таким сложностям относится и создание новых функций. В Паскале, например, вы можете создавать столько функций и процедур, сколько вам нужно. Можно даже сказать, что программирование в Паскале заключается именно в написании подпрограмм, которые затем в тексте основной программы просто вызываются по необходимости. Увы, написать на скриптовом языке новую функцию, используя только редактор, не удастся. Простого пути здесь нет. Но мы не утверждаем, что это невозможно. Примером служит расширитель скриптов OBSE, который будет рассматриваться в первом томе.


Впрочем, если вам действительно нужна какая-нибудь функция, никто вам не запрещает обратиться непосредственно к разработчикам OBSE с просьбой написать и включить ее в релиз следующей версии. Именно таким образом появилось множество новых функций. Такая страничка находится на официальном WIKI.


Как бы там ни было, но существуют обходные пути решения некоторых проблем, различные уловки и трюки, и решить ту или иную задачу можно, использовав какой-нибудь нестандартный подход. Во втором томе мы рассмотрим примеры решения некоторых сложных задач.


Есть и другие ограничения. Скрипты могут изменять свойства предметов, но они не могут создать абсолютно новый предмет непосредственно в игре, если его модель и текстуры не были заложены в игру или плагин изначально. Множество функций, доступных для использования, не перекрывают всех потребностей плагиностроителей, однако опытные скриптологи находят всевозможные лазейки и успешно решают поставленные задачи.

Чтобы писать скриптовые программы, вам нужно хорошо знать все особенности, нюансы, возможности и ограничения скриптового языка. А мы постараемся вам в этом помочь.


Основные отличия в скриптинге TES 3 и TES 4

Основные принципы написания скриптов остались незыблемыми. Однако различий действительно много, поэтому мы приведем только основные.


Первое, что бросается в глаза при взгляде на скрипты Обливиона, это то, что теперь скрипт разделён на исполняемые блоки. В принципе, и в Морровинде делалось то же самое, но в более свободном порядке. Например, если раньше для активации объекта надо было написать:

 if ( OnActivate == 1) 
  …
 endif

причём это можно было ставить где угодно и на каком угодно уровне условий, то теперь для этого надо объявить отдельный блок:

begin OnActivate 
   … 
end


В данном случае применяется тип блока OnActivate. Зачем нужен этот блок? Как известно, в игре все скрипты выполняются в каждом фрейме (кадре) и предшествуют обновлению изображения на экране. В Морровинде приходилось принимать специальные меры, чтобы ограничить число выполнения тех или иных операций в тексте скрипта, поскольку это усложняло и без того непростые условия обработки информации и, как следствие, понижало fps. В приведенном примере блок-тип OnActivate будет выполняться только один раз - в первом же фрейме, в котором выполнилось условие активации, в дальнейшем все, что находится в пределах блока «begin OnActivate … end», выполняться не будет. В первом томе мы более подробно рассмотрим все 30 разновидностей типов блоков.


Другое явное отличие видно уже по окну редактора – это наличие трёх типов скриптов:

  • Object script - объектные (локальные) скрипты, "привязанные" к объектам.
  • Quest script - квестовые скрипты. Они прикреплены к квестам и выполняются глобально, пока выполняется квест. Эти скрипты доступны из любой локации, где бы игрок ни находился. Глобальных скриптов в том виде, которые известны нам по игре Морровинд, в Обливионе, увы, нет. Но вместо них мы с успехом можем использовать квестовые скрипты. Как это сделать, будет рассмотрено во втором томе учебника в главе «Полезные примеры, решения и трюки».
  • Magic effect script - Магические скрипты. Скрипты, которые связаны с магическими эффектами и магией.

Важным и полезным нововведением является возможность работы с указателями на объекты. Для этого в скриптовый язык был введен новый тип переменной – ref (reference).


В связи с введением в игру потребностей в еде и сне была разработана новая система искусственного интеллекта – Radiant AI. Как следствие, это повлекло за собой появление пакетов AI, новой анимации, а также скриптовых функций и консольных команд для управления ими. Поскольку теперь стала необходима и более сложная анимация, возможности управления ею стали гораздо шире. В TES 3, например, все анимационные движения для вида от третьего лица были включены в единый длинный файл base_anim.nif, который содержал 6 с небольшим тысяч фреймов. Множество отдельных движений, которые были включены в него, можно было проигрывать в любой последовательности, используя специальные анимационные функции. Внедрить и проиграть новую анимацию можно было, подключив в конструкторе свой собственный анимационный файл (на самом деле это комплект из трех файлов - *.nif, X*.nif и X*.kf), однако они могли заменить только девять стандартных анимаций бездействия (idle, idle2 ... idle9).


В Обливионе уже нет такого длинного файла. Анимация разделена и находится в различных файлах, имеющих формат *.kf новой версии. Теперь можно подключить не один, а множество пользовательских файлов с новой анимацией. К сожалению, Bethesda на момент написания учебника так и не опубликовала новый формат файлов KF. Этим, а также отсутствием официального экспортера/импортера для 3dsMax, и объясняется столь долгое отсутствие плагинов с новой анимацией. Но мир не стоит на месте - усилиями энтузиастов наконец-то появились первые проблески - почти расшифрованы новые форматы, появились неофициальные экспортеры/импортеры и появились первые плагины с новой анимацией.


Изменения коснулись и формата файлов NIF. Все 3d-модели объектов Обливион, имеющие новый формат NIF - v20.0.0.5, не открываются в старом конструкторе и привычных каждому модмейкеру программах для игры Морровинд. В связи с этим появляются все новые версии программ, “понимающих” данный формат. Одной из наиболее динамично развивающихся и очень полезных программ является NifSkope. Но основной программой для создания новых объектов является, безусловно, 3dsMax. Все объекты TES 3 Morrowind были разработаны в 3dsMax v4.2. Работа со старшими версиями этой программы была проблематичной. Развитие 3d-технологий привело к тому, что теперь для моделирования объектов Обливиона можно использовать 3ds Max вплоть до 9-й версии. Необходим только соответствующий плагин для вашей версии программы.


Изменения коснулись также и методов управления погодой и освещением. Использование прогрессивной технологии HDR и шейдерных эффектов третьего поколения вызвало необходимость введения для них средств управления (вы наверняка решали вопрос оптимизации настроек для своего компьютера, особенно если он у вас не самый новый или видеокарта не поддерживает "третьи" шейдеры) и новых скриптовых функций.


Об озвучивании уже много писалось. Большой минус локализованной Акеллой и 1С русской версии игры – это отсутствие русской речи. Будем надеяться, что “народные” проекты озвучивания окажутся удачными. Тогда будет иметь смысл делать и свои "озвученные" плагины и использовать для этого средства управления звуком в диалогах. В игре TES 4 Oblivion есть возможность построения осмысленной беседы целой группы персонажей, чего было сложно добиться в TES 3 Morrowind.