Я помню, может быть, лет 5 назад я переписывался по электронной почте с профессором из M.I.T. , увидев ее на обсуждении PBS  о AI. Я излил свои мысли по разработке AI в сообщение, как можно запрограммировать машины на распознавание среды, как эмоции могут быть извлечены с опытом и т.д. Я потратил добрых 4 часа на то, чтобы написать письмо, потому что я чувствовал связь с работой этого профессора. Это было захватывающее письмо, потому что это была та тема, в которой я был очень заинтересован, и я хотел поговорить с кем-нибудь об этом. Пока я писал его, у меня была надежда что, может быть, я получу ответ, и наконец поговорю с кем-нибудь об этих вещах или меня привлекут к созданию передовой машины AI. К сожалению, я не получил ответа от нее … Я даже не знаю, прочитала ли она письмо.

В последнее время из-за инди-игры The Movie и Super Meat Boy я получаю какое-то количество писем от людей, желающих совета. Большинство писем от молодых поклонников, которые просят совета, начиная от «На каком языке мне писать» и до «Как мне запустить свою игру на Xbox». Я читаю каждое письмо, но я не всегда отвечаю на них, потому что это займет большую часть моего дня, не говоря уже о том, что письма почти не отличаются друг от друга.

Я чувствую себя плохо, когда не отвечаю, потому что это люди, они просто ищут и хотят, чтобы кто-то пролил свет на разработку игр. Они делают то же самое, что и я, когда писал этому профессору MIT много лет назад. Они заинтересованы в том же, что и я, и хотят знать, как это делать, они так же хотят быть частью разработки игр в некотором роде. Я хочу помочь, но у меня нет ни времени, ни знаний, ни желания быть учителем … но вот моя статья. Это FAQ для тех, кто хочет получить от меня советы по созданию игр.

С чего начать делать игру мечты?

“С чего начать” – это самый наиболее распространенный тип вопроса, который  я получаю. Я чувствую, что вопрос “с чего начать?” является самой большой проблемой для большинства людей, потому что они не понимают, что все, даже игры AAA, начинаются с нуля и затем потихоньку разрабатываются и дорабатываются, пока не становятся тем, чем он были изначально задуманы. Игра вашей мечты находится у вас в голове, но нужно двигаться вперед и сделать первый шаг, что может оказаться очень трудным, перейти от воображения к реализации. Для тех, кто никогда не делал игры, что-то простое, например, передвижение персонажа, может показаться огромной нерешаемой проблемой, которая заставит вас поверить в свое безоговорочное поражение. Так быть не должно, ключевой подход в том, что нужно начинать с малого.

Super Meat Boy начинал как квадрат с изображением Meat Boy на нем. Mew-Genics начинал, как черный квадрат, который двигался вперед и назад на экране. Goo! начинался как круги с улыбающимися на них лицами. «Game 2» началось с векторизованного образа персонажа в «Game 2». Все начиналось на очень базовом уровне и потом дорабатывалось на этой основе.

Это очень важно – делать одну вещь за раз. Если пытаться создать игру своей мечты сразу, скорее всего, вы лишь разочаруетесь и будете подавлены. Если создавать ту же игру по маленьким шагам, ваши шансы на реализацию своего видения гораздо выше.

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

Так постарайтесь разбить ваши идеи на маленькие составляющие, которые могут быть легко выполнены в рамках ваших текущих навыков. Таким образом прогресс будет более заметным и вы не расстроитесь так легко, как если бы делали иначе, вы всегда сможете вернуться к вашей работе позже и легко начать с того места, где вы остановились. Помните, что нет ограничений по времени на создание вашей игры (если вы начинаете так, у вас нет ограничений по времени). Учитесь на своих ошибках и выстраивайте свой проект так, будто вы собираете Лего … один кусочек за раз.

Для более детального примера позвольте мне показать, как начинался SMB. После того, как у меня появился квадрат с изображением Meatboy на нем, я подключил устройство ввода, чтобы я мог перемещать его вперед и назад. После того как я немного поигрался, я сделал так, что, когда я нажал кнопку, мой Meat Boy прыгал, затем я начал работать над тем, чтобы остановить его, когда он приземлялся на площадке, потом я работал над тем, как его остановить, когда он у стенки, затем я заставил его прилипать к стенам, потом, когда он застревал в стене и я нажимал кнопку “прыжок”, он прыгал от стены, а затем, если он ударял greensquare, он умирал и так далее, пока последняя строка кода не была написана и Super Meat Boy не была завершена.

Задача не может быть слишком незначительной или маленькой, даже самый малый прогресс – это все равно прогресс. Важно то, что вы не получите разочарования и продолжите работать над своей игрой.

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

Это второй самый распространенный вопрос. Честно говоря, я не люблю на него отвечать, потому что это вопрос, на который я сам не могу ответить. Я всегда стараюсь ответить: «Тот, на каком вам комфортнее всего писать». Я не думаю, что такой ответ является удовлетворительным, потому что люди ищут определенного ответа, или они только начали программировать и еще не чувствуют себя комфортно с любым языком. Я собираюсь попробовать дать более подробный ответ, который, может быть, поможет людям понять, какой язык выбрать, язык, который бы лучше всего подходил для них, или помочь им понять то, что, используя то, что для них удобно – это самый лучший способ начать.

Если вы ищете совета о том, на каком языке программирования начинать, вам не следует беспокоиться о том, «будет ли Flash работать на IOS», или «поддерживает ли Xbox Java», или «XNA работает на Mac’е». Ваша задача – представить, какой игра будет до начала ее написания, а не пытаться сразу придумать, как ее реализовать или продать. Эти вопросы важны, когда вы готовы портировать игру, но портировать игру гораздо легче, чем ее реализовать. Вы сможете побеспокоиться о портировании позже.

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

Придерживайтесь того, что знаете, или, проще говоря, идите самым простым максимально комфортным для приобретения навыков путем, чтобы начать работу над вашей игрой. Так что, если вы знаете немного Flash, используйте Flash, если вы знаете C ++, используйте C ++, если вы знаете только Java, тогда используйте Java. Нет такого понятия, как «официальный язык по разработке игр». Всегда помните это. Вот примеры: Minecraft написан на Java, Super Meat Boy написано на C ++, Farmville написано на Flash, некоторые другие игры, в которые играют люди, написаны на HTML 5, некоторые другие игры, в которые играют люди, были написаны на карточках. Основной посыл в этом: язык не имеет значения. Найдите свой язык, на котором вам удобно делать свою игру, и делайте.

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

Если вы не владеете ни одним языком и думаете, с чего бы начать, то я бы порекомендовал Flash, Game Maker, Unity или нечто подобное. Все эти языки позволяют быстро получить результат на экране и им легко обучаться. Лучше не начинать с чего-то вроде C ++ , если у вас нет опыта работы с каким-либо языком программирования, но есть желание начать создавать свою игру.

Какие книги или гайды вы рекомендуете?

Есть две книги, которые я могу порекомендовать, но все они для C ++ и они не для новичов. Это “Effective C++” и “More Effective C++”.  Это наиболее продвинутые книги по C ++, так что если вы не знаете C ++, не стоит думать: «О, я должен их прочитать, чтобы делать игры». Вам это не нужно.

Кроме этих двух я не читал никаких других книг. То, как я учился: я читал SDK документацию. Это не очень типично, но так я учился.

Я рекомендую поискать в интернете учебники/гайды по программированию. Интернет полон примеров, учебных пособий, таких как NeHe и т.д. Там нет учебников, которые я бы порекомендовал, в основном потому, что я сам их не пробовал, но я знаю – ресурсы онлайна изобилуют ими. Я уверен, что с небольшой помощью от Google вы сможете найти именно то, что вам нужно.

Я НЕ рекомендую копировать и вставлять что-то из учебников для того, чтобы сделать вашу игру. Так вы ничему не научитесь, вы просто скопируете это и все. Это особенно касается программ с открытым кодом. Они прекрасно подходят для того, чтобы посмотреть на них, исследовать, но они не сделают игру за вас. Если вы не понимаете полностью исходный код, просто копируя и вставляя в вашу игру, вы не станете хорошим и эффективным программистом. Не обманывайте себя, лучше потратьте больше времени и поймите код, прежде чем использовать его.

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

Когда мне задают этот вопрос, у меня чувство, что его спрашивают люди, которые думают, что есть волшебное средство, которое сделает игру за вас. Факт в том, что есть много инструментов, которые могут составлять движок игры. Если вы не заинтересованы в написании собственного движка, тогда обратите внимание на Unity или UDK. Они берут на себя всю тяжелую работу и позволяют вам просто писать игру. Но у такого подхода  есть свои недостатки. Вы ограничены системой, ее функциями и инструментами. Эти инструменты обладают набором стабильных и удивительных возможностей, но иногда они не будут удовлетворять тому, что вы хотите.

Лично я не люблю ограничения, и мне очень нравится самому заниматься разработкой, поэтому я избегаю набора этих инструментов и пишу свои игры из кода, который я сам написал за эти годы. Но это не означает что Super Meat Boy не сможет быть написан под Unity. В какой-то степени может. Но в связи с ограничениями Unity, это была бы не та же игра, в ней было бы другое управление, и она бы выглядела по-другому. Суть была бы та же, но она бы уже не была игрой, котрую мы знаем. Опять же, я говорю о том, что удобно для вас. Удивительные игры сделаны на UDK, Unity и т.п. Но такие же удивительные игры сделаны и на других движках.

Я использую Visual Studio для разработки, но я мог легко использовать Eclipse, Code Warrior, XCode или Notepad и компилятор. Так же, как выбор языка программирования, не имеет значения, что вы используете. Visual Studio это то, к чему я привык. Я не использовал всех функций, встроенных в нее, я использовал ее как способ организации моих файлов исходного кода, компиляции и отладки. Тонны редакторов делают то же самое.

Для артов и анимации Эд использует Flash. Я написал экспортер для анимации в Flash, потому что это было проще, чем написать инструменты для Edmund, и … снова … Edmund является самым удобным в Flash’а … так зачем бороться с ним?! Написание этого инструмента дало обучение с JSFL и работе с Flash, но это было то, что лучше подходило для работы мне и Эду над Super Meat Boy. Вам не нужен мой экспортер анимации, чтобы сделать свою игру. Однажды я выложу эти инструменты для разработчиков, но это не произойдет в скором времени, так что не стоит ждать их.

Как оставаться мотивированным, чтобы закончить то, что начал?

У меня нет секрета как остаться мотивированным и нет действенного совета, который я могу дать вам. Нет какого-то специального трюка, который я использую, или мышления, или какого-то плана, или чего-либо подобного. Лично для меня, чтобы оставаться мотивированным, я должен верить в проект и наслаждаться работой над ним. Если мне не нравится то, что я делаю, скорее всего, я это не закончу.

Давно была игра, над которой я начал работать, она называлась Goo! Я работал над ней в течение двух лет, и все это ушло в никуда. Это была не моя идея, это не была игра, которую я бы лично хотел сделать, и по этой причине я никогда не мог сделать из нее то, какой я ее себе представлял. Я перестал работать над ней, чтобы начать делать Super Meat Boy.

Время работы над Goo! не прошло впустую, потому что я узнал много нового о разработке, но я не чувствовал, что это моя игра, потому что она не волновала меня. Единственный аспект игры, который заинтересовал меня – многопоточный физический движок, и я тратил на него почти все свое время. Работа над этой игрой заставила меня понять, что важно любить игру, над которой ты работаешь, так работа будет проходить гораздо легче. Это лучшая мотивация.

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

Как я могу выпустить свою игру на Steam / Xbox / PS3 / WiiU / чем-то еще?

Этот вопрос никогда не должен вас беспокоить, если вы впервые делаете свою игру или работаете над ней в данный момент. Ваши мысли должны быть такими: «Я собираюсь сделать отличную игру», а не «Я хочу, чтобы она вышла на XBLA». Путь к выходу вашей игры на другой платформе – это узнаваемость. Тут нет никого секретного письма, нет волшебной формы, которую вы заполните, вам не нужно знать кого-то в бизнесе,  вам не нужен двоюродный брат, работающий в одном из этих мест, с чьей помощью вы можете получить секретную встречу, ничего подобного не существует.

Все очень просто: чтобы выпуститься на какой-либо из этих платформ, все, что вам нужно – это хорошая игра. Вот и все. Это суровая реальность, в которую некоторые люди отказываются верить. Я видел людей, которые негативно отзывались о всех играх,  кроме своей игры, когда речь заходит о получении одобрения для Steam / XBLA / другой платформы. Хорошая игра будет привлекать внимание игроков и серьезное внимание содержателей платформ, основанное на достоинствах вашей игры и лишь с небольшой консультацией от вас. Поговорите о своей игре, передайте свой энтузиазм другим, и если ваша игра будет действительно хороша, то и другие люди заметят это.

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

Что делать, если я закончу свою игру, и никто не захочет в нее играть?

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

Однажды я был в нескольких шагах от получения предложения аккредитации от Sony по играм “fl0w” и “Everyday Shooter”, а также игры, что я упоминал ранее “Goo!”. Изменения, внесенные в последнюю минуту (буквально за два дня до подписания документов), вызвали то, что игру закрыли, и больше я никогда не слышал ничего от Sony. Игра не была достаточно хороша, и даже имея контракт с Sony, был шанс, что игра не будет завершена, а это означало бы огромный провал. Это было больно, обескураживающе, но это меня не остановило.

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

Заключение

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

Перевод — В. Золотовский, оригинал — здесь

Become a Patron!