Перейти к содержанию

Язык ZScript

Что может и чего не может ZScript

На время разработки — тезисно.

Может:

  • Задавать поведение акторов (объектов игры), в том числе очень сложное;
  • Полностью заменять DeHackEd и Decorate, практически полностью — заменять ACS;
  • Поддерживать мультиплеер;
  • Работать с геометрией уровней и пользовательским интерфейсом;
  • В некотором роде научить программированию;
  • Позволить написать всё, что позволяется в пределах одного игрового движка, вплоть до собственной нейросети, операционной системы или виртуальной машины. Работать будет медленно, но будет.

Не может:

  • Выходить в Интернет;
  • Подгружать файлы из произвольных мест компьютера;
  • Создавать изображения, звуки и другие ресурсы "на лету";
  • Управлять многопоточностью и GPU.

История появления ZScript

Началом истории ZScript можно считать 20 июля 1999, когда сообщество игроков узнало о планах создателя порта ZDoom Randy Heit на включение в порт, которому тогда было чуть больше года, универсального скриптового языка DoomScript, позволивший бы компенсировать недостатки ACS и расширить возможности для создания игровых модификаций. Эта идея послужила мощным толчком к развитию порта, в частности, благодаря ней появился и постепенно обрёл свой нынешний облик язык Decorate. Однако несмотря на обилие возможностей, привнесённых в Decorate за это время, он так и остался языком, основная задача которого — описание анимаций и некоторых внутриигровых взаимодействий; доступ к другим данным, например, геометрии уровня или различным меню, с его помощью получить невозможно. Тем не менее, через многие годы мечты многих разработчиков об удобном универсальном языке наконец воплотились в виде ZScript, о котором дальше и пойдёт речь.

Как язык он появился ещё в версии ZDoom 2.9.1. Тогда он представлял из себя Decorate-подобный набор функций с чуть более расширенными возможностями. Graf Zahl (разработчик GZDoom) подхватил идею и развил её, сильно приблизив и синтаксис, и семантику скрипта к Unreal Engine Script.

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