Грейдейл. Создание локаций

user.pngИ снова здравствуйте!

В рамках дешёвого самопиара, обусловленного необузданной алчностью, расскажу о том, как для Грейдейла создаются игровые локации («комнаты» в терминологии AGS). Я даже допускаю, что это кому-то будет интересно, а то и – чем чёрт не шутит – полезно. В заметке есть факты, достойные Капитана нашего Очевидность, и вот первый из них: если писать для относительно большой группы потенциальных читателей, без фактов, достойных Кэпа, никуда.

Итак.

Напомню (или ошарашу тем), что в игре используется графика из первых двух Fallout (в основном из второго). Игры 97-го и 98-го годов выпуска. Графика в играх такого толка была в те годы в основном двумерная, спрайтовая. Причём в большинстве случаев (мы сейчас говорим про РПГ) локации так же состояли из спрайтов. Точнее – тайлов, маленьких изображений одинаковых размеров. Фаллаут – не исключение – и мне, стало быть, приходится работать с тайлами. И вот тут возникает момент, побудивший меня написать этот пост.

Дело в том, что AGS – это движок, предполагающий цельный фон. То есть, локация (комната) – это, в первую очередь, заранее нарисованная картинка. В моём случае это означает, что нужно сначала слепить из тайлов фон комнаты, и только потом загружать его в проект игры.

Первое, что приходит в голову в такой ситуации – это, конечно же, редактор карт. У разработчиков Fallout такой редактор, разумеется, был. Спустя несколько лет после выхода игры (и распада студии) он даже был выложен ими в свободный доступ, и сегодня найти его – не проблема. Кроме того, энтузиастами был создан ещё один редактор. В общем, с тем, что бы достать редактор, проблем не было. Проблемы появились при работе с редактором. Не вдаваясь в подробности, скажу, что работать с ними лично мне неудобно. Поэтому было принято второе по очевидности решение: работать в графическом редакторе.

Поначалу объём работы ужасал, поскольку один тайл – один файл. При этом все файлы свалены в кучу, и имеют примерно такие названия: «MMB1008.gif». Однако довольно скоро я приноровился открывать нужную группу спрайтов в одном окне Гимпа (при этом каждый тайл – это отдельный слой, что довольно удобно), и привык к системе названий. Процесс пошёл довольно быстро.

tiles.png

Комнату начинаю создавать либо со стен, либо с пола\грунта. Вот, например, первый уровень Убежища-41 в процессе создания:

vault41.png

В оригинальных Фаллаутах любой дом (как минимум – первый этаж дома) и улица, на которой он находится, являются частями одной и той же карты. Например, когда персонаж заходит внутрь строения, движок скрывает от игрока крышу – так, что бы он видел внутренности здания. В AGS подобное, в принципе, реализуемо. Однако такой способ реализации, с моей точки зрения, иначе, как «дурацкий костыль» не назовёшь. Поэтому в Грейдейле дом снаружи и дом внутри – это разные комнаты.

Тем не менее, я стараюсь создавать наружную и внутреннюю части здания в одном файле. Это делается для того, что бы они имели одинаковые размеры и форму. После того, как внутренние помещения строения готовы – они переносятся в отдельную картинку.

После того, как основные объекты размещены на будущей локации, я начинаю вставлять «украшения». Там – понатыкать сухостоя, тут – навалить камней, здесь будет куча мусора, а из-за вон той стены выглядывает ржавый остов автомобиля. Для большинства «украшений» неплохо бы придумать историю. Как оно здесь появилось? Зачем оно было нужно? Почему оно отсюда до сих пор не пропало? Довольно скоро начинаешь не только придумывать историю уже размещённых объектов, но и сначала придумывать, а потом размещать. Большинство из этих историй в игре никак не упоминаются, но все они, без сомнения, здорово помогают создавать атмосферу комнаты.

После того, как работа над картинкой условно-закончена (как правило, их приходится дорабатывать), она (картинка) загружается в редактор AGS. Теперь нужно разместить в комнате триггеры и игровые объекты, а так же нарисовать маски. Не буду углубляться, остановлюсь только на объектах:

v41_inags.png

Здесь уже есть двери, окна и прочее, правда, пока не всё. Почему отдельными объектами сделаны, например, двери, понятно: двери должны открываться, и желательно, что бы игрок видел процесс открытия целиком. А вот окна — это статические объекты, но они должны быть прозрачными. Собственно, прозрачность и реализуется средствами движка. Кстати, если присмотреться к нижнему левому окну, можно заметить, что оно расположено поверх стены, которая, по идее, должна его загораживать. Здесь вспоминаем, что фон комнаты — это цельная картинка. В редакторе этого не видно, но в игре окно закрывается, назовём её так, «маской невидимости» (walk-behind в терминах инструментария).

В итоге готовая локация выглядит как-то так:

v41_ingame.png

Дальше идёт работа с кодом, но со стороны это уже не так интересно.

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