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

Сегодня нам удалось побеседовать с Гаретом Ффоулкесом — создателем уникальной игры One Dreamer, которая превращает непонятное для многих программирование во что-то простое и доступное. В ближайшие десять минут мы не только узнаем больше про историю вымышленного инди разработчика, но и погрузимся в само создание головоломок и механик, построенных на кодировании.

One Dreamer рассказывает нам про прогоревшего инди-разработчика, который пытается угнаться за своей мечтой — выпустить игру. Что заинтересовало вас в этой истории? Может, она близка вам по духу?

Разработка игр давно интересовала меня, как и множество других людей. Но на рынке практически не встретить игр, посвященных этой теме. Оно и понятно. Все любят играть, но далеко не каждый готов заглянуть за кулисы.

Как вы хотели превратить уникальный процесс создания игр в саму игру?

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

Основное действие, которое я хотел включить в игру — поиск и исправление ошибок. Еще во время разработки я заметил, что это 50% задачи. В итоге я добился этого, превратив половину игрового процесса в расследование, тестирование и поиск ошибок или проблем.

Программирование — одна из центральных механик игры, но многие пользователи явно не готовы к полноценному изучению кода. Почему вы решили сделать именно программирование основной механикой?

Когда я только начинал программировать, даже базовые учебники казались мне пугающими и сложными для понимания. Все дело в том, что с самого начала вам объясняют все технические определения и синтаксис, что превращает любую методичку в словарь. В итоге большинство полузаинтересованных людей решает, что написание кода — это слишком сложно или скучно.

Я же хотел, чтобы основная механика игры вообще «не казалась программированием» и была замаскирована под головоломку. И тогда, после прохождения игры, пользователь легко сможет вернуться к учебнику и понять, что программирование не только не сложно, но и увлекательно.

Ваш псевдокод основан на языке C#. Расскажите, как вы превратили C# во что-то, что могут освоить и использовать игроки, не имеющие опыта программирования? Какие мысли помогли сделать его доступным для простого обывателя?

Честно говоря, это и есть обычный C#. Я просто убрал или сократил часть логики, чтобы превратить любой код в игре в короткий читабельный фрагмент. Кроме того я позаботился о том, чтобы все имена переменных и функций были интуитивно понятны. Я хотел показать логику каждой головоломки менее чем за 12 строк.

Вы всегда планировали использовать C# для создания игры? Что заставило вас выбрать именно этот язык программирования?

Я всегда планировал делать игровой язык программирования на C#, поскольку именно он использовался при разработке самой игры. К тому же, он мне наиболее знаком.

Как вы сделали язык программирования интуитивно понятным и не пугающим?

Мне хотелось отрезать побольше «страшного» синтаксиса, чтобы игрок мог читать код практически как обычный текст. Моя цель — прятать «настоящий код» за функциями типа «DoComplexLogic()» или вообще исключать их.

Например, игрок может выбрать собаку AI по ходу игры. Но действие «Click to pet» в HUD не доступно. Собаку погладить не выходит, так что игрок разочаровывается. Однако если посмотреть код питомца, то вы увидите следующее:

class Dog

{

isPetable = false

}

Не нужно обладать опытом программирования, чтобы понять — изменение значения «is Petable» на true позволит погладить собаку. При этом совершенно не нужно показывать 30 строк кода, которые, вероятно, потребовались бы в реальной жизни.

С какими трудностями вы столкнулись при создании псевдокода? Как Вы с ними справлялись?

Очень трудно найти баланс между слишком легкими и слишком трудными головоломками в программировании. Я хотел, чтобы человек без опыта написания кода смог добраться до концовки. Но в то же время хотел, чтобы цель была сложной и для не новичков.

Я решил эту проблему, заставив многих игроков с разными знаниями программирования протестировать игру. А после добавил в нее фейспалмы и более сложный дополнительный контент.

Что это были за «фейспалмы»? Какие мысли возникли при разработке этих элементов?

С самого начала я учел, что игрок может слишком долго решать головоломки, и добавил несколько общих механик защиты от подобных «сбоев». Но мои «фейспалмы» более сфокусированы на том, чтобы игра прогрессировала по сложности.

Например: в первой трети игры геймплей максимально линейный — всегда понятно, какой объект ключевой для решения головоломок с кодом. При этом, сам код очень прост, так что игрок может решить головоломку «грубой силой». А по мере прохождения дизайн уровней становится все сложнее, появляется множество новых объектов и усложняются головоломки. Все для громкого финала, в котором придется совместить все полученные ранее знания.

Но даже так я предусмотрел план «Б», в котором можно выйти на концовку, выбрав легкий путь.

Вы можете рассказать о создании одной из головоломок, которая вам очень понравилась?

Это далеко не самая сложная головоломка, но я в восторге от создания Jumpy — клона Flappy Bird. В раннем возрасте я просто так делал множество версий этой популярной игры.

В чем суть головоломки. Игрок должен набрать высокий балл на аркадном автомате, но это слишком просто. Поэтому, чтобы превратить аркаду в программистскую головоломку, я создал такую игру, которую сначала нужно починить. Так получилось, что все мои прошлые версии Flappy Bird были сломаны: слишком сильная гравитация, слишком сильные прыжки или же вообще слишком однотонный дизайн. Именно поэтому я переделал Flappy Bird с нуля, а после сломал ее, добавив мои старые проблемы.

Как вы хотели визуально передать механику кодирования? Какие мысли были при создании этого дизайна?

Первый прототип выглядел, как «печатная плата», на которой игрок выбирал и менял компоненты, а после сразу видел изменения в «дорожках схемы». Это выглядело очень круто, но не было идеальным в реализации, да и сильно усложняло ситуацию.

Поэтому я выбрал традиционный дизайн текстового редактора, как visual studio, чтобы игрок сразу знакомился со схемой. Постепенно дизайн сильно упростился за счет удаления табуляции, номеров строк и тому подобного. Все, чтобы игрок полностью сосредоточился именно на строках кода.

Какие мысли возникали при подключении кода к миру игры? Над созданием головоломок и ситуаций?

Я сделал кодируемые объекты очень наглядными, чтобы концепция программирования воспринималась через обратную связь, и не приходилось лезть в учебники.

Например: есть лампочка с единственной переменной «цвет», у которой игрок может менять цвет с белого на красный. Достаточно показать это один раз, чтобы в дальнейшем было понятно, что означает «цвет» в других фрагментах кода.

Почему вы хотели избежать руководств и объяснений?

Я сам предпочитаю учиться на собственном опыте — это то, что невозможно получить через обычный учебник по программированию. Буквально нельзя написать код, не зная, как он должен выглядеть. А поскольку код в игре уже написан, игрок может наглядно понять специфику во время изменений переменных.

Для меня это, как изучение основ программирования через создание игры, вроде Pong, вместо чтения книги без практики.

Игра находится в разработке уже довольно долгое время. Как Вам удавалось сохранять мотивацию для работы над ней так долго?

Я никогда не терял мотивации работать над One Dreamer — даже спустя 7 лет. Возможно, картина была бы иной, если бы не моя заинтересованность в проекте и полный творческий контроль. Все так затянулось из-за моей неопытности и недостатка ресурсов, но это все равно было очень весело и ненапряжно.

Каков был ваш рабочий ритм при создании игры в течение 7 лет?

Я работал над One Dreamer полный рабочий день и тратил на игру больше часов в неделю, чем хотелось бы. И да, это была большая ошибка. Я не отдыхал и не мог взглянуть на проект «свежим взглядом». Хорошо, что не потерял мотивацию и вообще не забросил разработку. Сейчас я бы выбрал легкий график или взял отпуск.

Что вы думаете о дизайне мира игры?

Честно говоря, я никогда не был особым художником. Да и пиксель-артом начал заниматься, чтобы делать рисунки для One Dreamer. Но после нескольких лет занятий постепенно выработался свой собственный стиль. В моем случае — это очень низкое разрешение и огромное количество деталей.

Как Вы начали свой путь в пиксель-арте?

Меня сильно вдохновила Superbrothers: Sword & Sworcery, так что я попытался сделать стилистически похожие работы. Но постепенно я добавил больше разрешения и начал менять другие элементы, пока не остался доволен результатом.

Скажу честно, что вообще не следовал учебным пособиям. Хватило поверхностного изучения теории цвета, чтобы перейти от «не очень» к «хорошо». А из программ я использовал Aseprite, через которую и были сделаны все рисунки для One Dreamer.

Какие чувства Вы хотели вызвать у игрока, рассказывая о трудностях разработки игр?

Не то чтобы я хотел вызвать какие-то конкретные чувства. Я хотел, чтобы игроки как будто сами создали небольшую инди-игру. Чтобы они поняли, как совершенно обычные люди с небольшими ресурсами и опытом могут сделать игру себе по душе.

Почему для вас было важно создать игру, которая пробуждает интерес к коду? Чтобы люди почувствовали, что тут нечего бояться?

Я постоянно слышу, как увлеченные начинающие разработчики отказываются от потрясающих идей, потому что воплотить их в коде кажется слишком сложным. И это, честно говоря, очень обидно. Если игра в One Dreamer поможет людям понять, что для программирования не нужно быть гением — то моя цель выполнена.

Есть ли у вас рекомендации по поводу мест/инструментов/учебников, с которых можно начать свой путь в программировании?

Как я уже говорил — предпочитаю учиться на собственном опыте. Поэтому я рекомендую следовать по пути простых игр, как Pong или Flappy Bird. Словом, как герои в игре. Но я не могу порекомендовать какой-то конкретный учебник, ведь это уже зависит от игрового движка.

Например: если вам по душе C#, то используйте Unity — движок, на котором работает One Dreamer. Если не так важно, то наберите в Google «игровой движок» или «учебник по Pong». Готов поспорить, первые результаты — отличное место для старта.

После этого я бы начал добавить в игру новые возможности и фишки. Выбор цвета, второй мяч, режим для двух игроков и так далее. И уже позже переходить на следующий этап, например, к разработке платформеров.

Создайте небольшое портфолио игр, а после приступайте к реализации собственной оригинальной идеи. Главное, помните — масштабы работы всегда должны быть небольшими.

Иван Гвоздь