О чем игра?
Кратко игру Drawn Story можно описать как квест, в котором вместо того, чтобы искать необходимые для продвижения по сюжету предметы, нужно эти предметы рисовать самому.
Это игра о мире, нарисованном на листе бумаги. Вы управляете двумя персонажами: одним из человечков, живущих в этом мире, и художником, который смотрит на лист бумаги откуда-то сверху. В роли художника Вы рисуете предметы, которые затем могут подобрать и использовать жители этого мира.
Например, можно нарисовать пилу и спилить с её помощью дерево для строительства плота. Или нарисовать сразу лодку, и тогда необходимость в плоте отпадёт. Можно нарисовать ключ, чтобы открыть запертую дверь, или нарисовать топор, чтобы сломать дверь. Прелесть в том, что в роли художника вы сами выбираете, каким способом взаимодействовать с миром. Вот как это выглядит:
Цель игры — создавая подходящие предметы, помочь живущему в нарисованном мире человечку разобраться со всеми его бытовыми проблемами: добраться куда-то или, наоборот, сбежать, победить врагов или подружиться с ними, спасти принцессу или найти клад. Настоящим художником для игры быть необязательно, подойдут и грубые наброски предметов. Главное — это ваше воображение и здравый смысл.
Как всё начиналось
Последние несколько лет я разрабатывал эту игру в пассивном режиме, совмещая с основной работой программистом. И вот уже несколько месяцев, как я уволился и стал уделять разработке игры больше времени.
Идея создания подобной игры вырисовывалась постепенно. Когда-то я участвовал в создании сервиса поиска картинок по наброску, занимался как раз вопросами распознаванием изображений. Сервис не имел ошеломительного успеха. Но тогда мы заметили, что многие пользователи заходят на сайт, чтобы просто поиграться с технологией — нарисовать что-нибудь и посмотреть, что получится найти. Тогда и возникли мысли о том, чтобы развлекательную составляющую процесса сделать основной.
Также я вдохновлялся очаровательной игрой Crayon Physics Deluxe. В каком-то смысле, мой проект является развитием её идей.
А ещё в детстве я любил рисовать и часто садился за чистый лист, ещё не представляя, что собираюсь изобразить. Придумывал сюжет по ходу дела: вот крепость, вот её защитники, вот другие человечки её штурмуют; вот тут они пробили в воротах брешь, а вот тут приставили к стене лестницы, защитникам надо как-то отбить все эти атаки… Было интересно через какое-то время разглядывать такой рисунок и разбираться в сюжете заново.
Постепенно все эти предпосылки оформились в желание сделать игру про рисование с необычной механикой.
Технические подробности
Фреймворк
Игра разрабатывается на C++ с использованием фреймворка Qt для основных настольных ОС: Windows, Mac, Linux. Также есть перспектива когда-нибудь сделать версию и для планшетов. Возможно, выбор какого-нибудь специализированного игрового движка (Unity, например) был бы более рационален, но когда я только начинал разработку, хотелось разобраться во всех нюансах создания игры самому: вывод графики, таймеры, анимация и т.д. К тому же я не был уверен в возможностях кастомизации готовых решений под нестандартную игровую механику. Так что Qt я выбрал, исходя из личных пристрастий. Хоть он и не заточен для создания игр, это продуманный и проработанный фреймворк с удобным механизмом слотов и сигналов. К тому же позволяет практически прозрачно использовать аппаратное ускорение графики, не прибегая к прямым вызовам библиотеки OpenGL.
Распознавание изображений
Для распознавания предметов, которые рисует игрок, используется самописная библиотека и алгоритм. В целом схема следующая. Имеется база эталонных изображений различных предметов (меч, щит, пила, лодка, ключ и т.д.), для каждого предмета возможно несколько различных изображений (например, щит ведь можно изобразить совсем по-разному) и несколько углов поворота, под которыми они будут узнаны. В ранних прототипа предметы не распознавались, когда люди их рисовали развёрнутыми на 45 градусов, что весьма огорчало игроков, которые пытались пририсовать человечку меч прямо в руку. Алгоритм, выделяет определенные характеристики рисунка, сопоставляет их с образцами из базы и находит лучшее соответствие. Таким образом, можно определить тип предмета и в какую сторону он повёрнут. Далее в игре создаётся физическая модель нарисованного предмета (за физику отдельное спасибо библиотеке Box2D!) и модель его поведения. Благодаря последней нарисованный предметом, опознанным, например, как меч, можно будет махать, а предметом, опознанным как щит — отражать удары. Всего на данный момент в игре можно создать около 40 различных предметов.
Разумеется, алгоритм распознавания не идеален. В настоящий момент точность распознавания составляет по моим оценкам 83% — это процент правильно классифицированных предметов. Это не та цифра, которой я был бы полностью доволен, поэтому периодически я возвращаюсь к работам по улучшению точности алгоритма. Так, в последней итерации удалось увеличить точность примерно на 10% за счет использования другой функции сходства изображений. В целом, с точки зрения игрока, неправильно опознанный предмет — это далеко не всегда источник фрустрации. Иногда это просто дополнительный источник веселья в игре.
Графика
Изначально графику в игре я планировал сделать весьма примитивной, чтобы она соответствовала черно-белым наброскам, которые рисует сам игрок. Выглядело это примерно вот так:
Но я быстро понял, что смотрится это совсем уж убого, и постепенно экспериментируя и улучшая результаты, пришёл к ярким изображениям, по возможности стилизованным под рисунки гуашью:
Сами игровые персонажи также подверглись улучшению. Было:
Стало:
Тем не менее, уровень графики остаётся весьма любительским — всё-таки, художник из меня не очень. Сейчас я начал задумываться, не привлечь ли к проекту профессионального дизайнера.
Текущее состояние
К настоящему моменту готова демо-версия игры с 5 уровнями (и еще одним «секретным»). Скачать её можно на сайте игры: drawnstory.com/Downloads.html (Windows, Mac, Linux 64-bit)
Также я недавно запустил кампанию в Steam Greenlight. Если игра вам приглянулась и вы хотите поспособствовать дальнейшей разработке, можете проголосовать на этой странице: steamcommunity.com/sharedfiles/filedetails/?id=568322436
Основная работа по созданию игрового движка сделана, в дальнейших планах добавление новых уровней и усложнение существующих.
Автор: vrecobra