Как начать делать игры? [Перевод]

Представляю вам перевод поста Tommy Refenes, одного из авторов Super Meat Boy.

Предисловие.

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

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

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

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

— Этот вопрос — самый популярный из тех, что я получаю. Мне кажется, что начать — самое большое препятствие для многих, поскольку они не осознают, что все игры, даже ААА-тайтлы, начались из ничего и росли, пока не стали тем, чем им предначертано было стать. Пока идея сидит в голове, может быть очень тяжело сделать шаг от мечтаний к её реализации. Для тех, кто никогда не разрабатывал игры, даже что-нибудь очень простое, вроде того, как заставить персонажа двигаться, может показаться большим и совершенно непреодолимым и может быстро привести к поражению. Так не должно быть — начинать нужно с малого.

SMB начался с четырёхугольника с картинкой Мит Боя на нём. Mew-Genics началась с чёрного квадратика, который двигался взад-вперёд по экрану. Goo! началась с улыбающихся кружочков. Game 2 началась с рисунка её персонажа. Всё начинается с чего-то очень маленького и потом на этом строится.

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

В качестве более детального примера приведу процесс разработки Super Meat Boy. Сначала я заставил квадратик двигаться. Потом научил его прыгать, потом — останавливаться, когда он приземляется, после — останавливаться, когда он сталкивается со стеной, затем я заставил его цепляться к стенам, после этого — умирать, когда он натыкается на зелёный квадратик и так далее, пока последняя строка не была написана, а игра — закончена.

Не существует слишком маленькой задачи и слишком малого прогресса. Главное — продолжать начатое.

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

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

Если вы ищете ответ, не нужно задаваться вопросами вроде «Будет ли Flash работать на iOS?», «Работает ли Java на Xbox?» и «Работает ли XNA под Mac?». Вашей конечной целью должна быть реализация игры, а не её выпуск или продажа. Эти вопросы важны при предоставлении игры общестенности, но это гораздо проще, чем реализация. Успеете подумать об этом позже.

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

Придерживайтесь того языка, который уже знаете, или же пойдите путём, позволяющим легко и комфортно получить необходимые навыки. Если чуть-чуть знаете Flash — используйте Flash. Чуть-чуть С++ — используйте С++. Не существует «официального языка разработки игр». Minecraft написан на Java, SMB — на С++, куча игр написана на Flash и прочих HTML5. Суть вот в чём: выбор языка не играет роли.

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

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

— Какие книги или туториалы можете порекомендовать?

— Я могу посоветовать только две книги, и они обе о программировании на С++ и обе рассчитаны далеко не на новичков. Это «Effective C++» и «More Effective C++». Если вы не знаете С++ на хорошем уровне, не думайте, что эти книги вам чем-то помогут.

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

Советую залезть в интернет и поискать, он полон примеров и туториалов (NeHe, например). Не могу посоветовать ни одного туториала, поскольку сам ни один не видел, но я знаю, что в интернете такого полно.

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

— Какой софт вы используете, чтобы делать игры?

— Мне кажется, что люди, задающие такие вопросы, думают, что есть какая-то волшебная программа, делающая игры сама. Есть инструменты, которые большей частью снимают с вас работу с движком. Если вы не заинтересованы в написании собственного движка, обратите внимание на Unity или UDK. Они убирают всё самое сложное для новичка и позволяют вам просто делать игру. У этого есть своя цена — встроенные инструменты хорошо сделаны, стабильны и потрясающи, но иногда они — не совсем то, чего вам хочется.

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

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

Для рисования и анимации Эдмунд использует Flash. Я написал программу, которая экспортирует оттуда анимации, потому что это было проще, чем писать инструменты специально для Эда, да и опять-таки, ему комфортнее всего работать с Flash — пусть оно так и будет, господи, не сражаться же с этим. Для написания потребовалось изучить JSFL и поработать в Flash, но так было удобнее и Эду, и мне. Вам, кстати, совершенно не нужна эта моя утилитка, чтобы делать игры. Когда-нибудь я выложу её в открытый доступ, но это явно будет не скоро, так что не ждите.

— Как сохранить мотивацию от начала и до конца?

— Тут я мало чего могу посоветовать. Лично мне достаточно просто верить в проект и получать удовольствие от его разработки. Если мне что-то делать не нравится, вероятно, я не доведу это до конца.

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

Время, которое я потратил на её разработку, не пропало даром: я многому научился, но игре не было суждено увидеть свет — она меня не интересовала. Единственная часть игры, которая меня по-настоящему привлекала — многопоточный физический движок, на который я и потратил большую часть времени. Благодаря этой игре я и понял, что главное — любить то, что делаешь. Это — лучшая мотивация.

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

— Как выпустить игру в/на Steam/Xbox/PS3/Wii U/и т.д. ?

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

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

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

— Что, если я сделаю игру, которая никому не нужна?

— Если вы будете усердно работать, считать, что ваша игра — лучшая вещь, которая только может быть, и у вас всё равно не вышло разместить её в системе дистрибуции, не считайте это поражением и знаком того, что вам не стоит делать игры. Мало чья первая игра «выстреливает». SMB — первая игра, которую я закончил, но до неё были и другие, незаконченные.

В какой-то момент я был довольно близок к совершению сделки с Sony, но смена руководства всё обломала буквально за пару дней до подписания договора, и ни словечка от них я больше не слышал, а игра (Goo!, которую я упоминал ранее) была отменена. Игра не была достаточно хорошей, и даже если бы я заключил договор, были все шансы, что я её не закончу и вообще она будет полным провалом. Это было довольно неприятно, но не остановило меня.

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

Заключение.

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

Так как текст достаточно длинный и я наверняка допустил пару неточностей, сообщите мне, если найдёте какую-либо, чтобы я быстренько всё исправил.