О чем игра?
Кратко игру 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
Основная работа по созданию игрового движка сделана, в дальнейших планах добавление новых уровней и усложнение существующих.
Комментарии (13)
UDiy34r3u74tsg34
11.12.2015 21:12+1Идея очень классная. играть с ребёнком на планшете было бы очень интересно, но текущее состояние не играбильно.
— Персонаж двигается, как эстонский зомби в мороз. Динамичности нет никакой.
— Мне не хватало подсказок. Не понятно, что именно ожидают от меня.
— Распознавание хромает. Рисую топор — автомат. Рисую автомат — гитара. Гитара?
Lertmind
11.12.2015 22:18Хотя идея кажется интересной, в ней есть проблема — воображение имеет больше предметов, чем игра. Если в Crayon Physics Deluxe ты точно знаешь какого рода предмет ты сможешь нарисовать, то здесь — нет. Scribblenauts спасают подсказки слов (не играл в неё). Если в вашей игре будут подробные подсказки в виде текста, то игра заключается в простом рисовании, иначе на перебор множества идей. Соблюдения баланса очевидности и интересности загадок вообще относится к квестам. Скорее всего вы это всё понимаете, а для меня это личная проблема, потому что я понимаю как это работает и мне это кажется скучным, в отличии от обычных игроков.
В любом случае, успехов в разработке.
bak
11.12.2015 22:30+2Идея — супер! Но, как было замечено выше, есть некоторые проблемы с распознанием предметов. К примеру, мне так и не удалось нарисовать весло. Предлагаю слегка доработать алгоритм, чтобы он отдавал предпочтения тем предметам, которые более релевантны решаемой задаче.
bak
11.12.2015 22:32+3Так же предлагаю отобрать у игрока возможность управлять персонажем — пусть это делает AI, а игрок только рисует и предоставляет этому AI предметы.
vrecobra
11.12.2015 23:21+1Интересные идеи, спасибо. Надо будет подумать и поэкспериментировать с этим
UDiy34r3u74tsg34
11.12.2015 23:27+2я бы добавил возможность удалять вещи. А то после десятка попыток нарисовать топор мой персонаж уже был погребён в горе металлолома.
А ещё когда я нарисовал лодку на самом краю она утонула Оо
mwizard
Scribblenauts — игра с похожей идеей.
vrecobra
Про Scribblenauts я узнал сравнительно недавно. Согласен, похожая идея: пишете название предмета или даже живого существа — и он/она/оно появляется на уровне. Причём можно использовать не только существительные, но и прилагательные, например «большой зелёный пистолет». В игре огромнейшая база вещей, которые можно создать, мне до такой далеко. К сожалению, в игре, по крайней мере, в той версии, в которую мне удалось поиграть, практически отсутствует вызов для взрослого игрока. Видимо, потому, что игра позиционируется как детская обучающая. Но потенциал огромный, с удовольствием поиграл бы в вариант, рассчитанный на взрослую или смешанную аудиторию.
Pe4enie
Обязательно посмотрите ещё на эту игру:
store.steampowered.com/app/248650
vrecobra
Спасибо. Играл в неё, но меня как-то не зацепило. Их оригинальный веб-проект (drawastickman.com) был хоть и более коротким, но гораздо более насыщенным