понедельник, 22 декабря 2014 г.

Abuse и Лисп

Abuse (1995) считалась довольно популярной 2d стрелялкой для своего времени. Но, что особенно интересно, на деле это была не просто игра, а настоящий конструктор. Конечно же, там был редактор уровней, но не только он один. Джонатан Кларк, разрабочик Abuse, сильно увлекался языком Лисп, и в результате вся высокоуровневая логика игры была написана на этом языке (диалект Common Lisp). Более того, исходный Лисп-код распространялся вместе с Abuse и допускалась возможность модификации игры пользователем, благодаря встроенному интерпретатору. Надо сказать, код на Лиспе смотрится довольно органично, особенно в описании поведения врагов, чего, собственно, и стоило ожидать от классического языка для задач ИИ. Запустив Abuse с ключем "-lsf" и именем пользовательского скрипта, получаем уже свою собственную игру. К сожалению, мне неизвестно о существовании производных от Abuse разработок, кроме, собственно, авторского примера Pong в дистрибутиве. Кстати, игровой движок Abuse был написан всего за 4 месяца.

Следующая работа Джонатана Кларка, игра Golgotha, не получила коммерческого будущего. Тем не менее, исходный код обеих игр этого автора доступен для скачивания:

http://abuse.zoy.org/wiki/download

Что касается Лиспа, то в Golgotha он тоже присутствует в небольшом количестве, в виде интерпретатора Scheme, но до расширяемости и элегантности архитектуры Abuse этой игре далеко.

http://www.youtube.com/watch?v=OcW2nH2AbS0

Кстати, о Лиспе в играх. Компания Naughty Dog создавала достаточно успешные игры для PlayStation с использованием Лисп-подобного языка, такие как Crash Bandicoot (1996) и Jak and Daxter: The Precursor Legacy (2001).

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

Комментариев нет:

Отправить комментарий