Дневник разработки #4 Итоги к июню
Всем здравствуйте! Прошло уже более двух недель с последней статьи, а значит, у игры “Вечный пассажир” появились новости. По плану мы должны были сделать прототип игры в мае. Сейчас расскажу, на каком он свете, а также поделюсь, как идёт разработка в целом.
Если кратко:
- Пополнение в команде, человек приступит к работе всего через 6-7 лет
- Прототип сделали и даже поиграли, но что-то пошло не так
- Пересмотрели поведение НПС и теперь они могут вмешиваться в диалоги друг друга
- Добавили взаимодействие с предметами
- Переписали существующие диалоги под новый формат
Пополнение в команде
В мае у двух членов команды случилось пополнение в семье. Новый человечек пока слишком мал, чтобы участвовать в разработке игры, зато он позволяет себе диктовать, когда и сколько работать организатору проекта. Тем не менее стараемся поддерживать тот же темп, хоть теперь это и требует больше усилий.
И вот несколько наблюдений о работе с грудным ребёнком на руках.
- Сбивается дисциплина
Если раньше я могла заранее знать, что сяду за проект, допустим в 12.00, и проведу за ним часов 8, то теперь я вообще не могу предсказать, сколько у меня будет времени на игру.
В какой-то день я выкупала малыша, накормила его, положила в кроватку, рассчитывая, что он уйдёт в ночной сон, подарив мне часа 3. Но нет. Только я села за компьютер, он начал орать. Я повторила ритуалы, снова уложила его, села за компьютер. И снова он орёт. Я снова походила с ним, положила в кроватку, села за компьютер. И так повторилось раз 20, если не больше. Всё, что я успела – открыть юнити. Как вам открывать юнити 3 часа?
Но бывают и хорошие дни, когда малыш крепко спит. Тогда я успеваю сделать довольно много.
- Работа мозга в фоновом режиме не менее эффективна, чем в активном режиме
В продолжение предыдущего пункта. Представьте, вы садитесь за компьютер, проводите за ним минут 5. Всё, что вы успеваете – вникнуть в суть задачи, решение пока не знаете. Далее вас выдёргивают земные дела – поменять памперс, покормить, переодеть, покачать, потанцевать с бубном и так далее. Затем вы снова садитесь за компьютер. И вуаля! Вы уже знаете, как решать задачу. А всё потому, что она обрабатывалась мозгом в фоновом режиме.
Если раньше я тратила столько же времени на продумывание кода, ни на что не отвлекаясь, то теперь я могу просто загрузить в голову задачу, отвлечься, а решение приходит само. Конечно, так происходит не всегда. Но в большинстве случаев подсознание творит чудеса.
- С ребёнком можно обсуждать работу
Опять же, если непонятно, как решать какую-либо задачу, вместо сказочек и песенок малышу можно рассказать о трудностях в разработке игры. Все равно пока ничего не понимает, главное – интонации :)
Проговаривание задач кому-то простым языком мне всегда очень помогало. А теперь, когда нет времени распивать чаи, роль слушателя выполняет малыш.
- Можно сидеть за компьютером с малышом на руках
Я научилась печатать одной рукой, одновременно качаясь из стороны в сторону. Я даже купила слинг, чтобы освободить вторую руку, но в условиях летней жары использовать его нереально.
Я не знаю, кому могут быть полезны мои наблюдения. Есть ли тут те, кто работает с малышом на руках?..
Главный вывод, который я сделала для себя – не переживать и не гнаться за дедлайнами. Если я что-то не успеваю, то это не из-за ребёнка, а из-за внезапных багов/ошибок в самой игре. Часто бывает, что я что-то плохо продумываю с точки зрения геймдизайна, из-за чего приходится много переделывать (об этом далее).
Плюс я никогда себя не насилую. Если хочется лечь спать с ребёнком посреди дня – ложусь. Если вечером чувствую бодрость, могу просидеть над игрой всю ночь. Так что режим дня у меня абсолютно отсутствует. Главное правило – делай, сколько получается, пока есть возможность и силы.
Что с прототипом?
Где-то +- в середине мая мы сделали первый билд. Я дала его поиграть членам семьи.
…
…!!!!
Я не могла на это смотреть. Я хотела вырвать мышку из рук и закричать – ну вот же написано, куда нажимать. ПОСРЕДИ ЭКРАНА НАДПИСЬ!!!
Но это пол беды.
У меня так замылился взгляд, что я не учла: если находиться в диалоге с НПС и в этот момент к нему подойдёт другой НПС, игра сломается. Я так привыкла играть в свою же игру, что уже на автомате заводила диалоги с персонажами, избегая багов. То есть если я знала, что сейчас придёт Оля и будет соблазнять Мирослава, то с Мирославом говорить не надо. И почему-то в моей голове как аксиома стояло, что другие люди будут точно также увиливать от багов.
Но я посмотрела, как играют люди. Никто, конечно, с уважением к багам не относился. Мало того, тестеры будто специально бились именно в те диалоги, которые прерываются другими персонажами. В итоге тестирование превратилось в полнейшую глупость.
Тестер: *просто играет*
Я: Не подходи к этому герою, пожалуйста…
Я: К этому тоже пока нельзя…
Я: О! Вот к этому беги скорее, пока можно!
Я: Ой, не подходи уже, уже нельзя!
Я: Нельзя, говорю! Сломал игру, варвар!
Тогда я решила, что нужно всё-таки останавливать время в диалогах с участием игрока. Ведь тогда остановятся все НПС, а значит, игрок не нарушит ход времени. Но мне не понравилось, как получилось. По сути игрок мог проскипать практически все диалоги за секунд 10-20 игрового времени. Контента на 5 минут сделать просто нереально при таких условиях.
(Да, я решила всё-таки ввести возможность скипать фразы во время диалогов с участием игрока, иначе при многократном повторении игра воспринимается занудно. При скипе ритм не сбивает игровой поток, а вот вынужденное чтение одного и того же точно вызывает отвал – мне самой хотелось игру вырубить и больше не запускать никогда.)
Пауза игрового времени не работала, как хотелось бы. И я убрала её. То есть время шло в диалогах с участием игрока как обычно – персонажи на фоне продолжали заниматься своими делами, но при этом игрок мог ускорить фразы того диалога, где находился. А пауза всё портила. Нужно было другое решение.
НПС могут вмешиваться в диалоги друг друга
Тогда я и придумала, что нужно добавить дополнительные диалоги. Они будут запускаться, если НПС вмешивается в диалог говорящих персонажей (игрок может участвовать в этом диалоге, а может и не участвовать). Такое может произойти, если, например, игрок занял диалогом персонажа, из-за чего тот не успел вступить в диалог с другим персонажем. А когда вступил, к нему подошёл уже другой персонаж, который по таймингу должен был начать с ним диалог.
Вот пример: Бабка после подстрекательства игрока запускает диалог с Дачником, обвиняя его в шпионаже. Если бы игрок не надоумил её на это, Бабка бы этот диалог не запустила. Но тут приходит Контролёр проверять билет. Он подходит к Бабке. У него заготовлен диалог на проверку билета. Но Бабка уже в диалоге, и у Контролёра не прописана логика, что делать в таком случае. Раньше это вызвало бы зависание игры. Теперь же Контролёр видит, что Бабка в диалоге и выбирает альтернативный диалог. В нём сюжетно учтено, что Бабка уже говорит с кем-то. Выглядит вполне естественно.
Так что я даже рада, что обнаружилась такая проблема. Я хочу, чтобы у игрока было ощущение, что персонажи живут своей жизнью, а любой дополнительный вариант диалога такое ощущение усиливает.
Взаимодействие с предметами
Теперь игрок может взаимодействовать с предметами. При подходе, например, к закрытой двери туалета, появляются кнопки с вариантами действий – постучать, выбить дверь, взломать замок.
Мы реализовали это через ту же самую диалоговую систему с нод-графами и триггерами.
Как это сделано с персонажами: При подходе к НПС, игрок попадает в триггер этого НПС. Система обнаруживает нужный диалог-граф с этим НПС, подхватывая оттуда варианты ответов из первой реплики. И игроку сразу высвечиваются варианты реплик, как только он входит в триггер. Он выбирает вариант, нажимает кнопку и запускается, собственно диалог. Либо же игрок ничего не нажимает и просто покидает триггер, тогда кнопки с вариантами исчезают.
С предметами практически то же самое. У каждого предмета есть свой триггер, куда подвязаны доступные диалоги. Когда игрок заходит в триггер, ему точно также высвечиваются варианты взаимодействия. То есть аналогично используются нод-графы. Даже если при взаимодействии с предметом нет ни одной реплики, а есть только, например, анимация, это работает точно также. Просто в нод графе будет пустая реплика, куда подвязывается функция, запускающая анимацию.
Внутренняя кухня с триггерами у персонажей и предметов несколько отличается, но это уже тема для отдельной статьи.
Переписали диалоги под новый формат
Мы всё ещё работаем над комфортной системой написания диалогов для сценаристов.
Она организована в гугл-таблицах. Хочется, чтобы люди не циклились на количестве символов и прочей ерунде, а думали над хорошим сюжетом. А для этого надо сделать так, чтобы таблица думала за них. Превысили лимит символов? Строчка подчеркнётся красным. На грани превышения – жёлтым. О любой ошибке сценарист сразу же узнает и исправит. Когда диалог уже написан, исправлять и сокращать целое гораздо сложнее.
Также ячейка с репликой практически идентична диалоговому баблу в игре. Как там перенесено – так, вероятнее всего, и будет в игре.
Мы исправили те диалоги, которые были, а новые добавляем уже с учётом формата.
Чем занимаемся сейчас?
К сожалению, из-за большого количества нововведений (не про всё упомянула в статье) немного поломался основной скрипт, отвечающий за интеллект НПС. Сейчас приходится через инспектор юнити вручную разрешать персонажу переходить к следующему действию. Мы усердно работаем над починкой.
После реанимации мозга персонажей, остаётся добавить подсветку персонажа, с которым диалог, и квесты. Играть-то можно и без них, но мне кажется, небольшие пояснения, что делать, скрасят игру. Пока там будут квесты на уровне – выяснить, где ты находишься и осмотреться.
Спасибо за внимание! Подписывайтесь на наш канал Telegram и группу VK. Там мы выкладываем посты несколько раз в неделю.