Как мы портировали старый добрый русский квест
Меня зовут Светлана, я занимаюсь разработкой в компании Бука. Хочу поделиться с вами историей о том, как мы портировали игру.
Как всё начиналосьМногие наверняка помнят золотую эру квестов, которая пришлась на 90-е годы прошлого века. А некоторые из тех, кто постарше, даже застали лучших представителей жанра: King’s Quest, Space Quest, Myst, Broken Sword, Grim Fandango, Monkey Island.
Российский геймдев тоже не сидел сложа руки: коробки с играми серий «Братья Пилоты» и «Петька и Василий Иванович» расхватывали с прилавков магазинов как горячие пирожки!
Старые игры с возрастом не становятся хуже, но запустить их с каждым годом всё сложнее. Поэтому, как и многие другие издательства, мы решили портировать одну из своих лучших игр на современные устройства. И в качестве пробы пера выбрали классический квест «Петька и Василий Иванович: Спасают Галактику».
Вкратце об игреЭто point-and-click анимационная юмористическая приключенческая игра, выпущенная в 1998 году. В ней рассказывается история 3-х героев Красной Армии. Действие происходит в деревне «Гадюкино», где рядовой Петр и комдив Василий Иванович Чапаев начинают поиски пропавшего красного знамени. А в это время инопланетяне пытаются завоевать мир.
В оригинальной игре было не очень простое управление, заточенное на использование мыши. У игрока широкий набор действий: смотреть, ходить, использовать, взять, говорить, применять предмет из инвентаря (чемодана) и отдельное действие вторым персонажем-помощником (Чапаевым). Прямо как в жизни.
Основная цель портирования — полноценная адаптация любимой классической игры под современные операционные системы и широкоформатные мониторы. Фанаты не первый год просят нас выпустить первые части “Петьки” в Steam, и вот, наконец, летом 2015 года мы взялись за работу.
НаследиеКак это часто случается, за многие годы, прошедшие с момента выхода оригинального “Петьки”, большая часть исходных материалов игры бесследно исчезла. Поэтому мы приступили к извлечению ресурсов из существующей дисковой версии. В итоге у нас на руках оказались следующие материалы:
- все звуки = 996 файлов wave PCM;
- вся музыка = 70 файлов wave PCM;
- все диалоги = 8479 файлов wave PCM;
- вся анимация = 2338 файлов формата .flc с разрешением 640 x 480 px
- все бэкграунды = 115 .bmp файла с разрешением 640 x 480 px
Перед нами встал вопрос выбора инструмента, на котором будем работать. Так как порт должен быть кроссплатформенным, мы сконцентрировались на поиске движка, отвечающего нашим требованиям. В итоге остановились на Unity3D в силу его распространенности, наличия хорошей документации и поддержки.
А так как игра состояла из множества заскриптованных сцен, средствами Unity3D мы начали проектировать фреймворк, который бы ускорил нашу работу и позволил быстро собирать 2D point-and-click квест.
Параллельно готовили документацию по сценам и материалы для портирования. Оригинальные фоны и анимации с разрешением 640px на 480px и соотношением сторон 4:3 были вручную дорисованы художниками под пропорцию 16:9.
Немного про управлениеМы решили добавить удобное современное управление, так как у оригинальной игры был высокий порог вхождения. Теперь игрок может в любой момент переключиться между ними прямо в меню настроек.
В упрощенном управлении — один вид указателя, который подсвечивает активные объекты для взаимодействия на сценах. Так игрок сможет сразу увидеть все спрятанные объекты на локации.
При нажатии на объект игрок увидит только те действия, которые может применить к данному объекту. Если в инвентаре появится предмет (например, Ключ), при нажатии на Замок в возможных действиях игрок увидит этот Ключ. Как результат, исчезнет необходимость заходить в инвентарь слишком часто. Теперь это нужно будет делать только для работы с самими предметами.
Кроме того, мы добавили визуальные указатели на местах возможных переходов между сценами и подумали о ситуациях, когда игрок уже не знает, что ему делать. В чемодане в упрощенном управлении добавился элемент Подсказок, который намекает, куда пользователю нужно двигаться дальше.
Поподробнее про фреймворкИгровая сцена нашего анимационного 2D квеста включает в себя следующие составляющие:
— Общая информация о сцене:
- Фоновый звук на сцене.
- Фоновая мелодия на сцене.
- Фоновое изображение.
- Область ходьбы. Для перемещения ГГ по сцене используется несколько областей (коллайдеров):
- Основной коллайдер, в котором ГГ может ходить по сцене.
- Коллайдеры обхода объектов, если объект находится внутри основного коллайдера и ГГ должен его обходить.
— Масштаб: расставляются точки масштаба на сцене. Каждая точка имеет вес (процент масштаба ГГ) относительно которых рассчитывается масштаб ГГ.
- У объекта на сцене есть набор событий на которые он должен реагировать:
- Смотреть.
- Говорить.
- Брать.
- Использовать.
- Давать(когда мы используем предмет из инвентаря на объект).
- Василий Иванович Чапаев.
- Реакция на определенные предметы из инвентаря.
- Количество кадров в секунду.
- Возможность пропустить анимацию, сделано для долгих катсцен, которые хотелось бы пропустить.
- Зацикленная ли анимация, например для разговора или непрерывно текущей реки.
- Спрайты, которые входят в анимацию.
- Аудиофайл, соответствующий анимации и проигрываемый с ней. Если в анимации есть аудиофайл, то анимация растягивается на длину аудиофайла.
- Порядок отображения объектов. Объекты на сцене необходимо сортировать от заднего плана к переднему. Для объектов, находящихся в центре сцены, которые должны сортироваться в зависимости от позиции ГГ, используется нижняя координата.
Помимо графического наполнения сцены есть еще и функциональная составляющая, где каждая сцена — это XAML документ. В нем используется небольшой самописный скриптовый язык. В документе описываются все объекты сцены и те действия, которые можно производить с объектом.
В итоге мы получили «осовремененную» игру, фактически собранную с нуля на новом движке, но при этом сохранившую оригинальную графику и озвучение. Чтобы наглядно продемонстрировать процесс полной сборки одной из игровых сцен, мы сделали специальный ролик:
Возможно, кто-нибудь из вас воспользуется нашим примером для создания своего 2D квеста. Ну и конечно, буду рада ответить на ваши вопросы!