О чем игра?


Кратко игру 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)


  1. mwizard
    11.12.2015 17:57
    +1

    Scribblenauts — игра с похожей идеей.


    1. vrecobra
      11.12.2015 19:15

      Про Scribblenauts я узнал сравнительно недавно. Согласен, похожая идея: пишете название предмета или даже живого существа — и он/она/оно появляется на уровне. Причём можно использовать не только существительные, но и прилагательные, например «большой зелёный пистолет». В игре огромнейшая база вещей, которые можно создать, мне до такой далеко. К сожалению, в игре, по крайней мере, в той версии, в которую мне удалось поиграть, практически отсутствует вызов для взрослого игрока. Видимо, потому, что игра позиционируется как детская обучающая. Но потенциал огромный, с удовольствием поиграл бы в вариант, рассчитанный на взрослую или смешанную аудиторию.


      1. Pe4enie
        13.12.2015 01:27

        Обязательно посмотрите ещё на эту игру:
        store.steampowered.com/app/248650


        1. vrecobra
          14.12.2015 13:03

          Спасибо. Играл в неё, но меня как-то не зацепило. Их оригинальный веб-проект (drawastickman.com) был хоть и более коротким, но гораздо более насыщенным


  1. UDiy34r3u74tsg34
    11.12.2015 21:12
    +1

    Идея очень классная. играть с ребёнком на планшете было бы очень интересно, но текущее состояние не играбильно.
    — Персонаж двигается, как эстонский зомби в мороз. Динамичности нет никакой.
    — Мне не хватало подсказок. Не понятно, что именно ожидают от меня.
    — Распознавание хромает. Рисую топор — автомат. Рисую автомат — гитара. Гитара?


  1. Lertmind
    11.12.2015 22:18

    Хотя идея кажется интересной, в ней есть проблема — воображение имеет больше предметов, чем игра. Если в Crayon Physics Deluxe ты точно знаешь какого рода предмет ты сможешь нарисовать, то здесь — нет. Scribblenauts спасают подсказки слов (не играл в неё). Если в вашей игре будут подробные подсказки в виде текста, то игра заключается в простом рисовании, иначе на перебор множества идей. Соблюдения баланса очевидности и интересности загадок вообще относится к квестам. Скорее всего вы это всё понимаете, а для меня это личная проблема, потому что я понимаю как это работает и мне это кажется скучным, в отличии от обычных игроков.
    В любом случае, успехов в разработке.


  1. bak
    11.12.2015 22:30
    +2

    Идея — супер! Но, как было замечено выше, есть некоторые проблемы с распознанием предметов. К примеру, мне так и не удалось нарисовать весло. Предлагаю слегка доработать алгоритм, чтобы он отдавал предпочтения тем предметам, которые более релевантны решаемой задаче.


    1. bak
      11.12.2015 22:32
      +3

      Так же предлагаю отобрать у игрока возможность управлять персонажем — пусть это делает AI, а игрок только рисует и предоставляет этому AI предметы.


      1. vrecobra
        11.12.2015 23:21
        +1

        Интересные идеи, спасибо. Надо будет подумать и поэкспериментировать с этим


        1. UDiy34r3u74tsg34
          11.12.2015 23:27
          +2

          я бы добавил возможность удалять вещи. А то после десятка попыток нарисовать топор мой персонаж уже был погребён в горе металлолома.
          А ещё когда я нарисовал лодку на самом краю она утонула Оо


  1. N1ghtroad
    12.12.2015 14:58
    +3

    А если карандаш нарисую — персонаж сможет сам себе лодку нарисовать?


    1. vrecobra
      14.12.2015 13:04

      Нет, до такого уровня самостоятельности ему далеко)


  1. Scrooge2
    14.12.2015 11:40

    ИМХО. Первый вариант графики был лучше.