Нулевая станция | дневник разработки
7 постов
7 постов
🚉Продолжаю делать «Нулевую станцию» — свой первый мистический детектив в формате переписки.
После фотографий решил добавить звуки. Шум старого динамика, объявление маршрута и голосовые сообщения Валерии.
Ну а что? В обычной жизни люди записывают голосовые даже ради слова «ок». А тут загадочная станция, странные события — и героиня упорно всё печатает.
Попросил ИИ сделать аудиоплеер. Чтобы можно было слушать записи, ставить на паузу и перематывать.
ИИ уверенно сообщил: «Готово!»
Заменил файл. Запустил.
Игра умерла.
Godot выдал красную ошибку на английском. Оказалось, искусственный интеллект неправильно расставил отступы в коде.
То есть Валерия не смогла заговорить, потому что ИИ не справился с пробелами.
Прекрасно. 😄
После исправлений всё заработало. И впервые услышать голос героини прямо в переписке оказалось действительно здорово. Сразу другое ощущение присутствия.
Правда, вовремя остановился. Если озвучить каждую реплику, получится не детектив, а чат с человеком, который ненавидит печатать.
В итоге оставил голосовые только там, где они действительно нужны.
Теперь у игры есть звуки, голоса и полноценный аудиоплеер.
А у меня новое правило: если кажется, что улучшение займёт пять минут, лучше сразу сделать резервную копию.
Продолжение следует...
Продолжаю делать «Нулевую станцию». Для тех, кто пропустил: это моя первая игра, я не программист, а сама игра представляет собой мистический детектив в формате переписки.
В какой-то момент решил, что одних текстовых сообщений маловато. Ну действительно, девушка находится на загадочной железнодорожной станции, вокруг происходят странные вещи, а мы только и делаем, что читаем, как она всё это описывает.
Надо добавить фотографии!
Казалось бы, чего проще. Сделал картинку, вставил в переписку, готово.
Ага. Размечтался.
Поскольку у меня детектив, фотографии должны не просто красиво выглядеть. На них игрок должен что-то замечать. Старую дату, странную надпись, документ, деталь, о которой персонаж даже не подумал.
И вот здесь обнаружилась интересная проблема.
Если на фотографии написано одно, а Валерия рассказывает совершенно другое, игрок начинает подозревать подвох.
Причём не сюжетный.
А подвох в том, что разработчик опять где-то накосячил.
Начал внимательнее относиться к изображениям. Если героиня нашла документ, он должен выглядеть как документ, а не как распечатка из Word, которую кто-то пять минут назад состарил в фотошопе.
Если речь идёт о старой станции, фотография должна передавать соответствующую атмосферу.
А если на бумаге указана дата, она должна совпадать с историей. Особенно весело, когда в сюжете фигурируют события разных лет.
Постепенно у меня образовалась целая коллекция: станция, помещения, старые записи, схемы, документы и всякие подозрительные предметы.
Смотрю на всё это и понимаю, что теперь мне нужно следить не только за диалогами, но и за тем, что нарисовано на каждой фотографии.
Отдельная история — возможность их увеличивать.
Потому что какой смысл прятать улику на фотографии, если игрок видит её размером с почтовую марку?
Пришлось добавлять увеличение изображений, перемещение и проверять, удобно ли вообще рассматривать мелкие детали.
В результате обычное «давай вставим несколько картинок» превратилось в ещё один кусок разработки.
Теперь я сижу, рассматриваю собственные документы, сверяю даты, читаю надписи и проверяю, не противоречит ли очередная фотография сценарию.
Нормальные люди смотрят фотографии из отпуска.
Я рассматриваю выдуманные железнодорожные бумаги и пытаюсь найти в них ошибки.
Причём самое обидное, что обычно нахожу.
И ведь игрок должен заниматься примерно тем же самым. Только желательно потому, что ему интересно расследование, а не потому, что он нашёл мой косяк.
В общем, хотел украсить переписку картинками.
Теперь у меня детектив, в котором даже фотографии нужно допрашивать.
Продолжение следует.
Продолжаю делать «Нулевую станцию» — свою первую игру, хотя до этого никогда не занимался разработкой.
В какой-то момент мне пришла гениальная мысль. А почему бы не сделать в игре несколько разных концовок?
Ну чтобы решения игрока действительно на что-то влияли. Один поступок приведёт к одному результату, другой к совершенно другому.
И тут меня понесло.
В результате у «Нулевой станции» получилось семь концовок.
Семь, Карл!
Сижу довольный, думаю, вот теперь у меня настоящий детектив. Можно проходить несколько раз, принимать разные решения, находить новые подробности.
А потом начал всё это соединять.
И вот тут стало весело.
Представьте, что вы пишете обычный рассказ. Герой пошёл налево, нашёл улику, поговорил с персонажем и двинулся дальше.
Всё просто.
А теперь разрешите читателю пойти направо.
Или вообще никуда не ходить.
Или сначала поговорить, потом найти улику, а затем передумать.
Поздравляю, теперь вам нужно написать не одну историю, а целую паутину из историй, которые при этом не должны друг другу противоречить.
Я начал рисовать в голове схему переходов между сценами. Потом понял, что в голове она уже не помещается.
Открыл записи.
Там тоже всё выглядело подозрительно.
В одном месте игрок уже знает важную информацию, в другом ещё нет. Где-то нужно учитывать решение из первого акта, а где-то помнить, что человек сделал совсем недавно.
И ведь нельзя просто свести все пути в одну точку и сделать вид, что ничего не произошло. Тогда зачем я вообще мучился с этими выборами?
Отдельное удовольствие — проверять концовки.
Проходишь один маршрут. Работает.
Второй. Тоже работает.
Третий... А почему персонаж ведёт себя так, будто я выбрал совсем другое?
Ладно, исправляем.
Снова проверяем первый.
И так по кругу.
В какой-то момент я понял, что мне уже самому нужна карта собственной игры. Желательно с указателями, запасными выходами и телефоном дежурного.
Самое смешное, что это ведь детектив. Я хотел, чтобы игрок разбирался в загадках.
В итоге сижу и сам расследую, почему у меня одна сцена ведёт не туда, куда должна.
Сейчас в игре четыре акта и семь концовок. Некоторые варианты развития событий ещё и зависят от предыдущих прохождений.
Короче, решил сделать небольшую текстовую игру.
Построил филиал РЖД с семью конечными станциями и сомнительной системой навигации.
И ведь мне это нравится.
Продолжаю делать свою первую игру «Нулевая станция». Для тех, кто пропустил предыдущие серии: это мистический детектив, в котором игрок общается с девушкой по имени Валерия через обычный мессенджер.
Сценарий написан, четыре акта перенесены в Godot, семь концовок работают. Казалось бы, самое сложное позади. Осталось сделать так, чтобы всё выглядело прилично. Как выяснилось, именно на слове «осталось» я и совершил ошибку.
Интерфейс был простой: тёмный фон, прямоугольные сообщения и большие кнопки с вариантами ответа. Для проверки сюжета годилось, но на настоящий мессенджер походило примерно так же, как Excel на социальную сеть.
Решил исправить. Объяснил ИИ, что хочу современный интерфейс: аккуратные сообщения, красивую шапку контакта, удобные кнопки, приятные цвета. Чтобы человек открыл игру и поверил, что переписывается с живой девушкой.
ИИ бодро сообщил, что всё понял, и выдал код. Заменяю файл, запускаю Godot, смотрю на результат.
Прямоугольные сообщения на месте. Огромные кнопки на месте. Между перепиской и ответами столько пространства, что туда можно переселить половину персонажей.
Зато всё стало фиолетовым.
Спрашиваю у ИИ, считает ли он это современным мессенджером.
— Нет, ты прав. Мы получили старый интерфейс с новыми цветами.
Спасибо. А до запуска сказать было нельзя?
Особенно забавно, что перед этим мне рассказывали про полноценный редизайн, улучшенную визуальную иерархию и современный пользовательский опыт. На экране же было ощущение, что кто-то установил тёмную тему на терминал оплаты коммунальных услуг.
Ладно, думаю, с первого раза не получилось. Бывает. Начали разбираться.
Оказалось, проблема не в цветах. Нужно менять расположение элементов, форму сообщений, нижнюю панель, размеры кнопок и ещё кучу вещей, названия которых я узнал вчера.
И тут выяснилась следующая неприятность: на компьютере интерфейс выглядит нормально, а на телефоне внезапно перестаёт помещаться. Например, у нас есть сцены с шестью вариантами ответа. И если увеличить кнопки, чтобы удобно попадать пальцем, переписка начинает скромно уступать им место.
В какой-то момент мы уже не игру делали, а пытались договориться, сколько пикселей имеет право занимать кнопка.
Но настоящий сюрприз оказался даже не в этом.
В игре история происходит через сообщения. Валерия пишет, игрок отвечает, она реагирует. И если новое сообщение появляется за пределами экрана или кнопки перекрывают последнюю реплику, разговор превращается в издевательство.
Представьте: девушка сообщает, что нашла что-то странное на заброшенной станции. Вы хотите срочно ей ответить, а вместо этого выясняете отношения с полосой прокрутки.
Атмосфера присутствует. Но немного не та, которую я планировал.
Самое интересное, что я не программист. Я понятия не имел, сколько нюансов скрывается за обычной перепиской. Раньше казалось: ну сообщения, ну кнопки, что там делать? Теперь выяснилось, что даже появление пузырька текста можно испортить несколькими способами.
В итоге выработали простую систему. ИИ пишет код и объясняет, что улучшил. Я запускаю игру и смотрю, стало ли лучше. Если нет — возвращаемся к работе.
Иногда это напоминает разговор заказчика с талантливым мастером, который умеет построить космический корабль, но периодически забывает приделать к нему дверь.
При этом начинаю понимать одну вещь: игрок не должен замечать, сколько усилий ушло на интерфейс. Он должен читать сообщения, принимать решения и переживать за Валерию. Всё остальное обязано просто работать.
Так что продолжаем приводить мессенджер в человеческий вид. До окончательного результата далеко, зато я уже лучше понимаю, чего хочу.
А главное — теперь знаю, что фраза «сделай современный интерфейс» требует уточнения.
Особенно если не хочешь получить калькулятор.
Продолжение следует.
После первого «Здравствуйте.» я довольно быстро понял, что просто показывать сообщения — это ещё не игра. Нужен момент, когда человек может ответить сам. Казалось бы, что сложного: три кнопки, нажал одну — получил нужную реплику.
Ну да. Конечно 😄
Я добавил первый нормальный выбор, запустил сцену, нажал один вариант — и Валерия ответила так, будто я выбрал вообще другой. То есть технически всё работало идеально: кнопка нажалась, сообщение появилось, игра не упала. Была только одна небольшая проблема — разговор перестал иметь смысл.
И вот тут до меня дошла довольно очевидная вещь, которую почему-то не замечаешь, пока сам не начинаешь это собирать: выбор — это не три кнопки на экране. Игра должна запомнить, что именно нажал человек, изменить нужное состояние, показать подходящую реакцию и потом ещё помнить об этом через несколько сцен.
Иначе получается очень жизненный мессенджер: ты пишешь одно, а собеседник отвечает вообще на что-то своё 😄
Причём чем дальше, тем веселее. Один ответ может повлиять не на следующую реплику, а на разговор сильно позже. Где-то выбор меняет доверие. Где-то открывает дополнительную информацию. Где-то вообще ничего глобального не меняет, но персонаж обязан хотя бы нормально отреагировать на то, что ему только что сказали.
Так у меня появился новый вид проверки: я перестал смотреть только на то, «работает ли кнопка», и начал проверять цепочку целиком — что сказал игрок → что услышала игра → что ответил персонаж → не забыла ли игра об этом через десять минут.
И, как оказалось, это отдельное развлечение.
Иногда баг выглядит как красная ошибка на весь экран. А иногда всё красиво работает, музыка играет, сообщения приходят — просто героиня внезапно разговаривает с человеком из параллельной вселенной.
Второй вариант почему-то пугает сильнее 😄
Но именно в этот момент «Нулевая станция» стала для меня ощущаться уже не просто перепиской, а игрой. Потому что впервые появилось то, ради чего всё и затевалось: игрок что-то решает, а история должна это заметить.
Теперь осталось научить её не забывать, что именно он решил.
Дневник разработки «Нулевой станции». Запись №3.
Пока я возился с Godot, первый пост на Pikabu успел получить первые комментарии. Отдельный привет человеку, который назвал происходящее «очередным бездушным нейрослопом» 😄
Нейросеть я действительно использую и скрывать этого не собираюсь. Но кнопку «сделать игру» я у неё пока не нашёл — всё равно приходится самому сидеть, собирать, проверять, ломать и чинить. А эти посты я вообще в первую очередь пишу для себя: хочу потом открыть дневник и посмотреть, как из идеи получалась игра, где я ошибался и что в итоге из этого вышло. Если кому-то ещё интересно наблюдать — тем лучше.
В прошлой записи я закончил на великой цели: открыть Godot, сделать экран мессенджера и добиться, чтобы на нём появилось первое сообщение. Звучало довольно скромно. Ну правда — прямоугольник, текст, кнопка. Что тут вообще может пойти не так? Спойлер: если ты впервые открыл игровой движок — примерно всё 😄
Первые минуты я смотрел на Godot примерно как человек, который открыл капот машины и внезапно понял, что фраза «ну тут же просто двигатель» не очень помогает. Сцены, узлы, скрипты, контейнеры... При этом задача у меня была предельно серьёзная: нарисовать окно чата.
Постепенно на экране действительно начало появляться что-то похожее на мессенджер. Шапка, область переписки, место под ответы. Никакой красоты и эффектов — пока главное было заставить эту штуку вообще работать. А потом появилось первое сообщение: «Здравствуйте.»
Одно слово. Но вот тут случился довольно странный момент. До этого «Нулевая станция» существовала в виде сценария, схем, заметок и огромного количества текста. А теперь персонаж впервые появился на экране и что-то мне написал. Объективно — программа вывела строку текста. Субъективно — игра впервые подала признаки жизни 🚉
Разумеется, радовался я недолго. Почти сразу выяснилось, что мессенджер — это не просто «вывести несколько сообщений». Сообщение должно появиться в нужный момент, перед ним нужна пауза, иногда персонаж должен «печатать», у сообщений есть время, чат должен сам прокручиваться вниз, а потом игроку надо показать варианты ответа и дождаться выбора. И всё это желательно сделать так, чтобы интерфейс не развалился от одной длинной фразы.
В общем, задача «показать слово “Здравствуйте”» довольно быстро превратилась в «давайте для начала напишем маленький мессенджер» 😄 Но первое сообщение уже было на экране, и для меня это первый настоящий рубеж: до этого я писал игру, а теперь начал её собирать.
А потом я решил добавить второе сообщение.
Вот тут всё и началось.
— Ты программист? — Нет.
— Художник? — Тоже нет.
— Геймдизайнер? — Нет.
— Тогда с какого хрена ты решил делать игру?
Вот примерно с этого и начинается мой дневник разработки.
Я давно люблю игры, но между «люблю играть» и «сделаю свою» находится небольшая такая пропасть. С кодом, графикой, звуком, сценариями, багами и людьми, которые почему-то знают, что такое state machine. Я пока не знаю.
Но некоторое время назад мне в голову пришла мысль: а что, если попробовать сделать игру самому? Не «когда-нибудь». Не «вот изучу программирование и тогда». А буквально с нуля.
Первой здравой мыслью было не открывать игровой движок. Потому что я прекрасно знаю себя: если бы я сразу увидел перед собой сто кнопок, какие-нибудь Nodes, Scenes, Scripts и ошибку на английском, проект с большой вероятностью назывался бы не «Нулевая станция», а «Новая папка (3)».
Поэтому сначала я решил понять, какую игру вообще способен закончить один человек без опыта и практически без бюджета. Большая RPG отпала примерно сразу. Онлайн-игра — ещё быстрее. Что-нибудь огромное, красивое, трёхмерное и с открытым миром я мысленно похоронил, не успев придумать название.
В итоге пришёл к текстовой сюжетной игре. И тут внезапно появилась идея 🚉
Представьте обычный мессенджер. Вам пишет незнакомая девушка. Ничего особенно странного — по крайней мере сначала. Она ехала домой, вышла из поезда и оказалась на станции, которой, судя по всему, существовать не должно.
Так появилась «Нулевая станция».
Дальше я совершил вторую неожиданно разумную вещь: не начал писать код. Сначала мы стали разбирать саму историю: кто эта девушка, почему она пишет именно игроку, что произошло на станции, какие правила у этого места, что случилось там раньше, кому можно верить? И главное — может ли игрок действительно что-то изменить или мы просто притворяемся, что даём ему выбор?
Одна идея потянула за собой другую. Появились персонажи, хронология, улики, ложные версии событий и семь разных концовок.
А потом наступил прекрасный момент, когда сценарий вроде бы был закончен и я уже внутренне собирался объявить себя великим разработчиком. И выяснилось, что сценарий ещё надо тестировать.
Мы начали проходить игру без самой игры — на бумаге: выбор → флаг → следующая сцена → улика → следующий выбор → финал. И она сломалась. Не сюжетно. Технически.
В одном месте игра должна была помнить выбор игрока, а сохранять его было некуда. В другом использовалось состояние, которое следовало определить точнее. Где-то последствия старого выбора уже обещались текстом, хотя реально на игру не влияли. Пришлось чинить.
После повторной проверки получилось: 🎬 34 сцены • 🔀 57 выборов • 🚪 7 концовок. И, насколько мы сейчас можем судить, ни одного маршрута, который намертво ломает прохождение.
И только теперь я подошёл к самому смешному: после всего этого у меня до сих пор нет игры. Есть полностью написанная история, техническая схема и огромное количество текста.
А завтра я впервые нормально открываю Godot и начинаю превращать всё это в работающий проект. Моя ближайшая великая цель очень скромная: сделать экран мессенджера и добиться, чтобы на нём появилось первое сообщение — «Здравствуйте.»
Если после этого ничего не взорвётся — будем считать разработку успешной 😄
Хочу вести этот дневник до самого конца: без историй в духе «я за выходные сделал свою первую игру и заработал миллион». Если что-то сломаю — напишу. Если переделаю половину проекта — тоже. Если в какой-то момент выяснится, что первоначальная идея была полной ерундой, — тем более.
Короче. Я решил сделать свою первую игру.
Посмотрим, чем это закончится.
Дневник разработки «Нулевой станции». Запись №1.