Jass

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
JASS
Класс языка:

скриптовый, событийно-ориентированный

Тип исполнения:

интерпретируемый

Появился в:

2001

Автор(ы):

Blizzard Entertainment

Система типов:

статическая

Диалекты:

vJASS, cJASS, ZINC

JASS (англ. Just Another Scripting Syntax) — событийно-ориентированный скриптовый язык программирования, созданный компанией Blizzard Entertainment. Используется в играх, таких как Warcraft и Starcraft.

Описание[править | править исходный текст]

В игре Warcraft III скрипты на языке JASS используются для контроля над объектами игрового мира и компьютерными соперниками. Данная область применения даёт практически полную свободу контроля над игровым процессом (в рамках игровой вселенной) любителям модов при создании своих собственных сценариев Warcraft III.

В комплекте с игрой поставляется стандартный Редактор Мира Warcraft III (англ. Warcraft III World Editor), в который включён модуль редактирования игровых сценариев под названием «Редактор Триггеров» (англ. Trigger Editor). Данный модуль снабжён неплохим графическим пользовательским интерфейсом для языка JASS, что позволяет создавать нестандартные сценарии для карт, не требуя при этом от создателя мода знаний в области языков и принципов программирования.

Типичный триггер в Редакторе Триггеров (GUI).

На тематических веб-ресурсах сценарии, сделанные в стандартном редакторе триггеров называют коротко — GUI. Наряду с «одружелюбленными» триггерами GUI, существуют их текстовые варианты — в виде скриптов на языке JASS, которые обладает расширенными, по сравнению со стандартными «редакторскими» триггерами, возможностями.

Официальной документации от Blizzard Entertainment к этому языку нет, однако существует множество любительских ресурсов, посвящённых написанию скриптов для сценариев на этом языке.

Стандартный редактор снабжён только базовыми интерпретатором и редактором JASS, в котором, помимо прочего, отсутствует подсветка синтаксиса и удобная проверка синтаксиса, что делает работу с JASS в обычном редакторе достаточно неудобной и трудоёмкой. Это и является одной из основных причин нелюбви новичков модостроения Warcraft III к этому языку.

Тот же самый триггер, но в виде скрипта в редакторе JASS New Gen Pack c подсветкой синтаксиса.

Помимо стандартного редактора, существуют специальные программы, которые упрощают работу с Jass-скриптами. К ним относится JASS Craft (бывший JASS Shop Pro). С помощью этой программы можно создавать шаблоны для триггеров, функций и оптимизировать код. Кроме того, он имеет подсветку и встроенную проверку синтаксиса, позволяющую «на лету» протестировать скрипт на наличие ошибок.

В сфере модостроителей Warcraft III с 2007 года имеет бешеную популярность масштабная любительская надстройка для редактора Warcraft III — JASS New Gen Pack. В него, помимо множества других полезных возможностей, включены подсветка и проверка синтаксиса, а также альтернативный компилятор языка JASS. Вкупе с другими возможностями, это сделало его практически стандартом «де-факто» в мире картостроя.

Основные понятия[править | править исходный текст]

Файлы скриптов JASS могут иметь расширения .j или .ai.

Язык JASS являет собой язык функций. Функции могут быть пользовательскими и нативными (от англ. native-родной). Пользовательские функции могут быть объявлены самим картоделом(мапмейкером) и находятся непосредственно в скрипте карты. Нативные (родные) функции созданы разработчиками, объявляться пользователем не могут и перечислены в 2-ух главных файлах языка JASS — common.j и common.ai. Данные файлы находятся в архивах игры Warcraft III.

(Однако существует статья, в которой описывается добавление собственных native функций в Warcraft- http://xgm.ru/p/wc3/custom_native) Имеется также созданный разработчиками набор готовых «к употреблению» пользовательских функций — blizzard.j, который является объектом критики многих картоделов за множество утечек и частую бесполезность отдельно взятых функций. Яркий пример тому — функции с простой перестановкой параметров, не имеющие смысловой нагрузки, но отнимающие время на их выполнение.

Карта Warcraft III представляет собой такой же архив формата MPQ, как и другие архивы игры и имеет расширение .w3m или .w3x. Архив карты всегда содержит файл скрипта карты — war3map.j, но может также содержать несколько файлов с расширениями .ai в том случае, если используется нестандартный искусственный интеллект компьютерных противников.

Информация в файл war3map.j записывается в момент сохранения карты в редакторе, когда компилятор языка конвертирует данные из файла триггеров (war3map.wtg) в конечный код JASS, который будет использован игрой.

Файл war3map.wtg в архиве карты содержит данные о GUI триггерах и является необходимым только для редактора. Без него отредактировать стандартными средствами редактора код карты будет невозможно.

Пример кода для отображения «Hello, World!» на Jass:

function HelloWorld takes player p returns nothing
    call DisplayTextToPlayer(p, 0, 0, "Hello World!")
endfunction

Функция HelloWorld принимает локальный параметр типа «player» с именем «p» и ничего не возвращает(«nothing»). В теле вызывается стандартная native -функция «DisplayTextToPlayer». В этой функции указывается индекс (переменная типа integer — целочисленная) сетевого игрока, которому будет отправлено сообщение; экранные координаты (x, y; переменные типа real) — положение строки сообщения; время, через которое исчезнет сообщение.

Основные отличия JASS от редактора триггеров[править | править исходный текст]

В отличие от графического редактора триггеров в World Editor, написание кода карты на JASS даёт картоделу ряд преимуществ:

  • Использование локальных переменных. Редактор триггеров даёт возможность оперировать только глобальными переменными. Глобальные переменные могут быть использованы в любой функции, а локальные — действуют только в пределах одной функции и могут быть использованы во множестве ситуаций.
  • Более компактный и удобный код. Например, редактор триггеров позволяет использовать конструкцию if then else достаточно примитивно, неоправданно раздувая конечный код. На JASS можно сделать то же самое гораздо более кратко и читаемо, а также использовать недоступный в редакторе триггеров оператор elseif.
  • Устранение утечек памяти. Код, написанный в редакторе, может оставлять за собой мусор в памяти: не удалённые объекты и утечки локальных переменных (в силу использования функций из файла blizzard.j). Чаще всего, таковыми становятся точки (location). Много раз вызываемый триггер с большим количеством утечек может очень быстро «уложить на лопатки» компьютер игрока. Со временем мощности компьютеров возрастают и эта проблема понемногу отступает назад, но тем не менее, границы производительности по-прежнему можно перешагнуть из-за множества неоптимизированных триггеров. JASS располагает средствами для удаления таких объектов.
  • Дополнительные возможности. Так, стандартный редактор триггеров имеет достаточно ограниченное число функций и переменных. В руках JASS’ера (сленговое прозвище человека, пишущего на JASS) оказывается весь набор функций и переменных из common.j и blizzard.j. Некоторые функции из common.j попросту не имеют аналогов в редакторе. Другой пример: в редакторе циклы могут быть выполнены только определённое количество раз, в то время как на JASS они могут выполняться до тех пор, пока не будет выполнено условие выхода из них.

Ссылки[править | править исходный текст]

  • XGM.ru — крупный русскоязычный ресурс модмейкеров по играм Blizzard и не только
  • Warcraft 3 Download Area — база ресурсов, карт и статей для модмейкинга в WarCraft III (международное сообщество создателей карт)
  • WC3Campaigns — крупный англоязычный сайт JASS-направленности