10 советов как довести свою первую игру до релиза

Моя первая игра вышла в Steam. Рассказываю, как это получилось и делюсь полезными ссылками.

О чём статья-то?

Я часто читаю на DTF истории про то, как инди-разработчики после долгой и мучительной работы над игрой забрасывают её. Потом с новыми силами начинают новый проект… и забрасывают его тоже.

В этой статье я поделюсь опытом, который помог мне не забросить мою игру, закончить разработку и зарелизить проект в Steam. А ещё в конце я оставлю ссылки на полезные ресурсы, которые использовал в процессе разработки — известные и не очень.

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

Немного контекста

Пару лет назад я задумал сделать свою первую игру. Даже не так: пару лет назад я задумал сделать свою первую игру целиком. Мне было очень важно пощупать всё самому — всё придумать, написать, накодить, нарисовать, санимировать и зарелизить. То есть с самого начала я воспринимал свою будущую игру скорее как образовательный проект: не спеша познакомиться с Unity, C#, Github, Steamworks, itch.io и ещё десятком разных штук мне было важнее, чем всё остальное. Опыта непосредственной разработки игр у меня до этого не было, хоть я и работал к тому времени уже около пяти лет менеджером в геймдеве.

В итоге получилась игра Not Anyone’s Business But My Own. Она доступна в Steam бесплатно и запускается на Windows и MacOS.

Трейлер для Steam, он же трейлер для всего остального, он же единственный трейлер.

Так, с контекстом разобрались, погнали к советам:

1. Не делай игру мечты

Как я написал выше, главной целью моего проекта было освоиться с инструментами разработки игр. Это во многом определило выбор жанра и размера проекта: короткая нелинейная визуальная новелла с несколькими концовками, выполненная в 2D.

А что получилось в итоге?

А в итоге получилось point-and-click приключение с дополнительными фишками вроде интерактивного интро, карты, передвижениями персонажа за курсором, DLC и ачивками в Steam. Про то, как я до этого докатился, можно прочитать в совете № 7 «Продумывай детали задачи»

Такое не очень амбициозное ТЗ, поставленное мною мне самому, во многом и помогло мне закончить игру. Конечно же, мне хотелось сделать игру мечты с корованами, открытым миром, боёвкой как в God of War и аниматиками как у Blizzard. Но ещё я понимал, что моих скиллов на это не хватит, и что в итоге игру мечты я заброшу, расстроюсь и скорее всего потеряю интерес к разработке игр вообще. Игру мечты я ещё сделаю, она от меня никуда не денется.

2. Начинай с истории

Разобравшись со спецификациями проекта, я приступил к написанию истории. Логика здесь проста:

Переписать текст почти всегда проще, чем переписать код и перерисовать / переозвучить ассеты.

Уже на этом этапе мне очень не терпелось начать кодить и трогать Unity, но я запретил себе это делать, пока история не будет готова. Позднее я не раз похвалил себя из прошлого за такую дисциплину. Готовая законченная история решила многие проблемы во время разработки.

Для написания нелинейной истории я использовал Twine (все ссылки в конце статьи). Это бесплатный инструмент как раз для таких случаев, простой в навигации и сильно экономящий время. К тому же, если ты решишь сдаться на этом этапе, у тебя хотя бы будет текстовый квест.

Вот так выглядит моя история в Twine. Каждый квадратик - отрывок истории, их можно двигать, редактировать и настраивать логику связей.

Кстати, принцип из предыдущего совета про игру мечты применим и к истории. Для истории своего первого игрового проекта не стоит придумывать события ветхозаветного масштаба (ограничься масштабом новозаветным). Помни, что впоследствии тебе придётся всё это рисовать и программировать.

Что я там насочинял?

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

3. Заведи to-do list

Здесь всё вроде просто, но проговорить стоит. Если ты работаешь в одиночку, тебе придётся заниматься десятком разных дел от гейм-дизайна до саунд-дизайна. А если ты работаешь в команде, то тебе придётся заниматься ещё и координацией товарищами по проекту. В любом случае, нужно будет делать много разных активностей и в какой-то момент ты сойдёшь с ума… если не будешь вести список дел и их статус. Поэтому, пожалуйста, заведи to-do list — хоть в виде зелёной тетрадки в клеточку или .txt документа.

4. Работай по чуть-чуть каждый день

Знаю, звучит зануднее некуда, но это, правда, помогает. Вот пример: я довольно слабый программист (художник, дизайнер — нужное подчеркнуть) — много чего не понимаю и много чего не умею. Поэтому чтобы как-то компенсировать недостаток знаний, я стараюсь удерживать себя в состоянии потока, когда тебя «прёт» и ты работаешь лучше и быстрее. Главная хитрость здесь — не позволить себе выпасть из потока, а учитывая, что у большинства из нас жизнь, дети, сессия, нетфликс, думскроллинг и прочие неотложные вещи, выпасть очень легко. И тут я такой: «а я всё равно найду хотя бы 5 минут и посмотрю на свой код / сцену в редакторе / документ со сценарием перед сном — просто чтобы не забыть, над чем я тут работаю». Если есть не 5, а 15 минут — вообще шикарно. За 15 минут можно не только освежить в памяти прогресс, но и продвинуть его.

5. Заканчивай работу списком дел на следующий раз

Этот совет — дитя двух предыдущих. В теории, ты будешь работать каждый день, но на практике, лишь небеса ведают, когда ты там сподобишься сесть за игру в следующий раз. И вот когда этот следующий раз настанет, ты откроешь блокнот и прочитаешь что-то вроде «Cнести Facepunch, приделать Steamworks. NET» или «Починить тот смешной коллайдер у воднапорной башни». И сразу станет тебе хорошо и ты поблагодаришь себя из прошлого за то, что не забыл оставить заметки себе из будущего.

6. Сделай репозиторий

Просто поверь, что что-нибудь обязательно сломается: ты зачем-то установишь новую версию Unity, или твой ноутбук съедят бобры, или ты переименуешь что-то, чего переименовывать нельзя (не помню, что именно я переименовал, но история реальная — намучился изрядно). И хорошо ещё, если ты знаешь, что именно сломалось. Иногда всё просто перестаёт работать. И тогда у тебя два варианта — либо откатить всё до того момента, когда всё работало, либо лезть в кроличью нору и перепроверять всё в жутком стрессе, пока тебе вдруг не повезёт. Есть ещё третий вариант, когда ты забиваешь на проект совсем.

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

Дополнительный совет: старайся пушить изменения почаще, чтобы не пришлось откатывать прогресс на несколько дней, а то и недель, назад.

7. Продумывай детали задачи

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

Выглядит не бог весть как, но на эту карту ушло много времени.

Умные люди перед тем как взяться за задачу пишут по ней дизайн-документ, в котором описывают функционал, фичи, зависимости и «зачем это вообще нужно».

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

В моём первом игровом проекте с дизайн-документами было всё жалко, поэтому со временем он оброс новыми механиками и даже поменял жанр. Хорошо это или плохо? В моём случае — скорее хорошо, потому что по дороге я навострился новым штукам в Unity и C#, но мне просто повезло. Если бы я работал в команде или если бы у меня были хоть сколько-нибудь жёсткие сроки, завершение проекта оказалось бы под угрозой.

Пример того, как отсутствие дизайн-документа повлияло на игру: из choose-your-adventure она превратилась в point-and-click квест (сильно увеличив время разработки).

Кстати, следующий свой проект я уже начал с дизайн-документа.

8. Чередуй типы задач

Скорее всего, ты бросишь свой проект либо потому что тебе стало слишком сложно, либо потому что тебе стало слишком скучно.

Большинство советов в этой статье — про то, как бороться со сложностями, а этот про то, как не дать себе заскучать.

Итак, представь: ты только что закончил большой кусок работы — сделал сет анимаций для персонажа. Логично было бы продолжить делать анимации для другого персонажа — состояние потока же!

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

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

9. Смотри ответы в интернете (или почему Unity лучше Unreal)

Представь: ты уже несколько месяцев работаешь с кодом, выучил слова «рефакторинг» и «метод», даже цветовую схему своей среды разработки сменил на тёмненькую — чтобы круче смотрелось. И тут — опа! Что-то у тебя не получается. И так не получается, и этак. Но ты же уже крутой программер, сейчас ещё немножко посидишь над кодом и всё получится. Что ж, у меня для тебя две новости. Плохая новость — не получится. Хорошая новость — это абсолютно нормально.

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

Вместо того, чтобы придумывать что-то своё странное, гугли проблему и ищи ответ в интернете. И да, извини за вульгарно-некорректный заголовок, но в плане количества и качества информации Unity/C# выигрывает у Unreal/C++. Stack overflow, Reddit, форум Unity, документация Unity, YouTube, наконец. Выбирай, что вылезает в поисковике первым и смотри готовый ответ.

В 90% случаев твою проблему уже кто-то решил. Ещё в 9% твоей проблемы не существует, ты просто накосячил с синтаксисом. Есть ещё 1% случаев, когда ты ничего не найдёшь и попросишь помощи у сообщества.

10. Ничего не получается — пойди погуляй

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

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

Ну, вот, пожалуй, и всё. Спасибо, что дочитал или доскроллил до этого места. Если я что-то забыл или упустил из виду, буду рад почитать об этом в комментариях.

Надеюсь, эта статья поможет твоему проекту не свалиться в пропасть, как трухлявый мост.

Ссылки

А теперь, как и обещал в начале, делюсь ссылками на ресурсы, которые помогли мне в разработке игры.

Audacity - бесплатная программа для работы со звуком. Выглядит страшненько, но умеет достаточно много.

Twine - бесплатный вэб-редактор для создания и редактирования нелинейных историй. Самое то для прототипирования.

GitHub Desktop - бесплатный репозиторий с дружелюбным интерфейсом

Библиотеки с royalty free материалами:

Zapsplat - саунд-дизайн, всякие бесплатные «вжух» и «кабам» лежат здесь.

Fontesk - всякие прикольные шрифты

Fesliyan Studios - музыка, разбитая по категориям и жанрам

Супер-полезные обучающие YouTube-каналы про разработку игр (Unity) :

Brackeys

Официальный канал Unity

Dapper Dino

Code Monkey

Auro Dev

Инструменты для интеграции функций Steam (ачивменты, списки друзей…)

Facepunch - попроще в освоении, но не работает с современными версиями MacOS.

Steamworks.NET - чуть-чуть посложнее, но работает с MacOS без проблем.

353353
71 комментарий

Интересно, спасибо!
Еще бы почитал про всякие правовые вопросы: как-то название компании регистрировал? ИП оформлял? В РФ сейчас вообще норм получать доход от стима?

8
Ответить

Спасибо за фидбек. Увы, тут я мало чем помогу, так как не живу в РФ.

11
Ответить

Комментарий недоступен

4
Ответить

В РФ сейчас можно получать выплаты через райффайзен, к примеру. Ну а с регистрацией ИП особых сложностей нет

3
Ответить

чел хорош
а теперь доведи своего парня до оргазма

7
Ответить

Жду гайд

Ответить

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

3
Ответить