Давно не писал ор ходе работы над игрой, и вот почему- особо нечем было похвастать, но сейчас можно показать промежуточный результат. Что сделано - анимации движения персонажа. Почти две недели ушло на создание более чем 50 анимок, и новой системы движения. Традиционно советы новичкам и инди разработчикам. - Когда покупаете какой-то программный продукт в маркете, будьте готовы к тому, что две трети вы выкинете, и будете начинать создавать заново. Именно это я и делаю - новый игровой шаблон, с новыми анимациями, новой системой инвентаря, и так далее.
Почему я создаю свой шаблон, и что следует знать, особенно новичкам: - Любой шаблон создается криво. Чаще всего нет банального разделения ответственности, и за все отвечает персонаж. Не стесняйтесь спрашивать у продавцов, прежде чем купить, что внутри. Всю подноготную они вам никогда не скажут, но на простые вопросы они ответят.
Что вас должно интересовать: - Инвентарь сделан отдельным компонентом, и просто прикреплен к персонажу, и персонаж не знает о структуре инвентаря ничего? Почему - инвентарь, это умный мешок с предметами, и за хранение и действия с ними отвечает сам мешок. Все что персонажу нужно знать, должно находиться в отдельной таблице, к которой он и обращается. - Второй вопрос, обязательно задаем - имеет ли персонаж какие-либо функции, связанные с действиями предметов (инвентарь, оружие и так далее), или же он просто посылает сигнал, например "мешок, дай мне пистолет" ? Это необходимо для того, чтоб код был чистым. Например - персонаж берет в руки оружие, свой функцией, которая прописана в его блюпринте. Теперь, если вы захотите с этим действием совершить что-то иное, например добавить анимацию equip-unequip, или какие-то эффекты, вам придется ещё хорошенько почистить код, потому что инвентарь будет тупить, оружие будет сопротивляться, а анимки будут криво ставиться.
То, что вы видите с подписью BPC - это и есть компоненты, которые вешаются на персонажа. Простое правило - персонаж отвечает только за себя, и свои действия - как двигаться, какие команды и кому отдавать. Все остальное делают компоненты. Инвентарь - хранит и отдает предметы по запросы Оружие - отвечает за оружие (стрельба, еквип-унеквип, эффекты, перезарядка). Виджеты - отдельное ядро. Предметы - дочернее от инвентаря, оружие - дочернее от мастер оружия, виджеты - сами по себе. Аним блюпринт - сам по себе, персонаж - сам по себе. Иначе вы замучаетесь потом искать, что и где у вас лежит, кто и за что отвечает, и почему в прекрасный момент ваш мешочек со сладостями, внезапно перестал работать в сетевом режиме.
Напоследок, хочу посоветовать - не переделывайте код, если не уверены что создадите новое. Рискуете потратить время впустую. И - пользуйтесь бесплатными решениями, их уже огромное количество, но имейте в виду, что чаще всего игровые шаблоны будут иметь именно ту структуру, от которой вам надо будет избавляться - в персонаже заложено всё и вся, и разнести это будет не так быстро, как хочется. Всем бобра, и побольше своих игр!
Попался мне сервис VibeCraft, помощник в создании сайтов и веб-приложений без знания программирования. Набрасываешь ИИшке свою идею, обсуждаете её и она сама начинает его делать. Если результат тебя устроит то можно опубликовать через Яндекс Облако всему миру.
Встречающий интерфейс
Я решил придумать игру, которая хорошо подходит под такой формат разработки: технически достаточно компактную, без сложной физики, огромного мира, управляемого персонажа, pathfinding и других вещей, которые моментально раздувают небольшой проект, но при этом не совсем примитивную. Хотелось, чтобы одно прохождение занимало хотя бы полчаса, чтобы во время него был заметный прогресс и чтобы после победы оставалась причина начать заново.
Идею игры я стал придумывать с другой ИИ моделью. Мы перебрали несколько концепций, и в какой-то момент появилась идея выживания после кораблекрушения. Есть небольшая группа людей, оказавшихся на острове. Их нужно кормить, распределять по профессиям, добывать ресурсы, строить поселение, исследовать остров и в конечном итоге собрать корабль, чтобы выбраться.
После этого дизайн документ на 1600 строк отправился в Vibecraft и разработка игры началась :)
Первый вариант игры
Оказался довольно полноценным, при этом игра не развивалась по классическому сценарию «сначала две кнопки, потом постепенно добавлял механики». Основные системы были задуманы практически сразу: население, профессии, несколько видов ресурсов, здания, улучшения, экспедиции, случайные события и строительство корабля как финальная цель.
Игровой цикл получился довольно простой. Игрок распределяет людей по профессиям, те постоянно производят ресурсы. За ресурсы строятся здания, которые открывают новые профессии и возможности. Часть жителей можно отправлять в экспедиции, временно теряя их как рабочих, но получая взамен редкие ресурсы, бонусы или новых людей. Постепенно открывается верфь, после чего начинается строительство корабля. Когда он готов, можно покинуть остров и закончить прохождение.
То есть довольно быстро возникла ситуация, когда игра уже формально была игрой: её можно было запустить, развить поселение и победить. Казалось бы, осталось немного отполировать интерфейс и можно выпускать.
Первая версия с доработками
На практике именно в этот момент и началась большая часть работы.
Пока механика существует только в голове или в таблице, всё обычно выглядит логично. Когда начинаешь проходить собственную игру от начала до конца, внезапно обнаруживаются очень простые проблемы. Например, для строительства Лесного лагеря требовалось волокно, а стабильная добыча волокна открывалась как раз после строительства Лесного лагеря. Формально всё было реализовано правильно, ошибок в коде не было, интерфейс работал - просто пройти игру дальше было невозможно.
Таких случаев оказалось достаточно много. Где-то один ресурс накапливался слишком медленно, где-то наиболее выгодной стратегией становилось отправить почти всех жителей в одну профессию, где-то игрок открывал новую возможность, но не замечал этого, а где-то после случайного события было совершенно непонятно, стало поселению лучше или хуже. И в какой-то момент стало очевидно, что сделать систему работающей и сделать её нормально играющейся - довольно разные задачи.
После первого варианта я уже решил утащить проект из VibeCraft и с помощью ИИ агента доделывать его.
Интерфейс
Самая большая доработка, если смотреть на игру глазами разработчика, первый вариант интерфейса был совершенно нормальным. Есть блок с ресурсами, есть профессии, здания, улучшения, экспедиции и корабль. Все данные на экране присутствуют - вроде бы чего ещё хотеть?
Но чем больше становилось контента, тем сильнее интерфейс начинал напоминать панель управления каким-то складским комплексом. Игроку постоянно приходилось искать, где именно появилось новое доступное действие, почему сейчас нельзя построить нужное здание и что вообще лучше делать дальше.
В результате интерфейс пережил несколько серьёзных переделок. Основные вещи - население, ресурсы и текущая цель - остались постоянно видимыми, а остальные системы разъехались по отдельным вкладкам. Заблокированный контент начали явно отличать визуально, а для текущей цели появилась отдельная подсказка.
Причём первая версия этой подсказки была довольно забавной. Она выглядела умной, но на самом деле просто рекомендовала следующую доступную экспедицию. Это быстро стало очевидно во время тестирования. В следующей версии подсказка уже анализировала текущую цель и пыталась предложить действительно полезное действие. Если для строительства не хватает камня - найти способ получить камень. Если есть подходящая экспедиция, предложить её. Если нет - посоветовать назначить больше людей каменщиками.
Такие изменения кажутся мелочами по сравнению с добавлением новой механики, но именно после них игра начинает ощущаться заметно понятнее.
Механики
Экспедиции были в проекте с самого начала, но позже они заметно изменились. Изначально экспедиции были максимально простыми: отправил экспедицию, ждешь получения результата. Для первых минут игры этого хватало, но довольно быстро такие события стали слишком предсказуемыми.
Тогда у них появились разветвления. Теперь одно решение может привести к следующему этапу экспедиции, где игроку снова приходится выбирать. Например, можно сразу забрать небольшую гарантированную награду или рискнуть и продолжить исследование. Во втором случае результат может оказаться значительно лучше, а может закончиться потерей ресурсов, временным негативным эффектом или другой неприятностью.
Из простых модальных окон экспедиции постепенно превратились в небольшие истории. Некоторые ветки позволяют вовремя остановиться и сохранить уже найденное, другие специально провоцируют попробовать удачу ещё раз.
Можно было продолжать добавлять в игру новые системы, но гораздо полезнее оказалось сделать интереснее те, которые уже существуют.
Метапрогрессия
А вот разные острова как раз не входили в самый первый вариант игры. К их появлению постепенно подтолкнула метапрогрессия.
После прохождения игрок получает очки выживания, которые можно потратить на постоянные улучшения: увеличить производство, получить больше еды в начале следующего прохождения, расширить склад, сделать эффективнее рыбаков или строителей, улучшить экспедиции и так далее. Но довольно быстро возник очевидный вопрос: зачем становиться сильнее между прохождениями, если после этого игрок просто снова попадает на абсолютно тот же остров?
Так появились новые острова с разными условиями. Не хотелось делать под каждый из них отдельный набор механик, вместо этого они используют ту же экономику, но меняют её параметры. На одном острове сложнее добывать определённые ресурсы, на другом сильнее давление со стороны потребления еды, где-то дольше идёт строительство, а где-то чаще случаются неприятные события.
Получилось, что одна и та же игровая система начинает требовать немного другой стратегии без необходимости создавать ещё одну игру внутри игры. С точки зрения объёма разработки это оказалось довольно выгодным способом увеличить реиграбельность.
Графика
Отдельно постепенно развивалась визуальная часть. Сначала главной задачей было просто сделать интерфейс читаемым, но довольно быстро захотелось, чтобы происходящее ощущалось именно игрой, а не таблицей ресурсов с кнопками. Появились иконки профессий, ресурсов, событий, экспедиций и улучшений, отдельные изображения островов, а затем и сама сцена поселения. Графика эволюционировала от эмоджи до полноценных (сгенерированных, но всеже) иконок.
Когда сама игра уже была проходимой, начался отдельный этап подготовки к публикации в Яндекс Играх. SDK, реклама, rewarded-реклама, сохранения, локализация, требования платформы к поведению страницы, иконка, обложка, gameplay-видео, русская и английская версия оформления. Почти ничего из этого не делает непосредственно игровой процесс интереснее, но без этих вещей игра всё ещё остаётся проектом на компьютере разработчика, а не законченным продуктом.
Итоговая версия
Немного о том, как всё устроено внутри
Технически проект получился довольно обычным веб-приложением на React и TypeScript. Сейчас он собирается через Vite. При этом игровая логика старается не зависеть от интерфейса: есть общее состояние игры и игровой tick, который занимается производством и потреблением ресурсов, строительством, таймерами экспедиций, временными эффектами и другими процессами.
Большая часть контента хранится в виде конфигураций. Отдельно описаны профессии, здания, улучшения, события, экспедиции, острова и мета-улучшения. Благодаря этому добавить новое событие или изменить параметры острова можно без переписывания основной логики игры.
По мере развития проекта вокруг этого довольно простого ядра начало появляться всё больше обычной продуктовой инфраструктуры. Появились автосохранения, русская и английская локализация, интеграция с SDK Яндекс Игр, реклама, rewarded-реклама, unit-тесты, E2E-тесты через Playwright и даже отдельный скрипт для симуляции баланса.
Проект немного вырос из первоначальной идеи «сделаем что-нибудь компактное».
Отдельной технической историей оказался переход с Next.js на Vite. Изначально проект в VibeCraft использовал Next.js, и каких-то принципиальных проблем с ним не было. Просто формат публикации в Яндекс Играх довольно простой: нужно собрать готовые статические файлы, положить их в архив и загрузить на платформу. Внутри должен находиться `index.html`, JavaScript, стили и ассеты, причём желательно с максимально предсказуемыми относительными путями.
Для такого сценария Next.js оказался просто менее удобен, чем хотелось. Серверная часть игре была не нужна вообще, а задача фактически сводилась к получению максимально обычной папки со статическим билдом. После перехода на Vite процесс стал гораздо проще: собрал проект, получил готовую директорию, заархивировал и загрузил в Яндекс Игры.
Это не столько история о том, что один инструмент лучше другого, сколько обычный случай, когда более простой инструмент лучше соответствует конкретной задаче.
И немного про AI
Почти весь проект делался с активным использованием AI-инструментов, и после этой разработки у меня осталось довольно чёткое впечатление: AI действительно очень сильно снижает стоимость реализации.
Сделать новый экран, изменить компонент, добавить тест, переделать систему сохранений или реализовать небольшую механику сейчас можно заметно быстрее, чем раньше. Иногда достаточно нормально сформулировать задачу, и значительная часть рутинной работы исчезает.
Но есть обратная сторона. Сама необходимость принимать решения никуда не делась. Кто-то всё равно должен заметить, что игрок не видит доступное здание, понять причину и решить, что именно нужно поменять. Кто-то должен обнаружить тупик в прогрессии, заметить скучную ветку события или понять, что ещё одна новая механика игре уже не нужна.
Наверное, мой главный вывод после этого проекта именно такой: AI сильно удешевил написание кода, но из-за этого ещё важнее стало понимать, что именно стоит писать.
Добавить в игру ещё одну систему теперь очень легко. Иногда даже слишком легко. Поэтому одна из самых сложных задач постепенно становится не «как это реализовать», а «нужно ли это вообще реализовывать».
В итоге проект, который начинался как небольшой эксперимент для Vibecraft, довольно быстро превратился в самостоятельную браузерную игру.
Самым важным для меня было не количество сделанных механик, а сам факт того, что игру удалось довести до состояния, когда можно перестать добавлять фичи, собрать архив и наконец нажать кнопку публикации. И на все это потратилось меньше недели времени.
Это пиксельная, пошаговая игра в стиле игр конца 80х и начала 90х, где Вам предстоит принять на себя роль странника, который должен пройти путь и сразиться с дикими животными, безумными тварями и злыми злодеями! В игру можно поиграть как с компьютера, так и с телефона.
Сделана двумя людьми, мной и неким Firlik'ом. И мы дарим ее для Вас и будем рады, если Вы в нее поиграте)
На этом заканчивается промо. И сейчас я бы хотел написать о самой игре, о ее разработке и чем-то важном.
А начинается история с другой игры, той которую я разрабатываю с первого января 2026 года...
та самая игра, которую делаю и с которой начинается эта история
Я изначально делал её как свободную, как хобби, чтобы сыграть с дитём и выложить в свободный доступ. Примерно тогда-же пришла в голову идея - "а почему бы по игре не разбросать пасхалки - маленькие свитки, на которых каждый желающий художник может оставить кусочек себя". Ведь наверняка много художников тоже хотят подарить миру, детям, и другим людям что-то и не всегда у них есть возможность это сделать.
Вот как выглядит заготовка.
В общем работа кипела 8 месяцев, до конца августа. А в конце августа я объявил ивент-коллабу! Каждый художник, может прислать свою работу в пиксельарте и я помещу ее в игру! После 8 тяжелых рабочих месяцев это стало точкой душевного подъема и буста... Должно было стать. Но дальше началась черная полоса...
В ночь с воскресенья на понедельник, 31 числа, я написал о мероприятии и почти сразу узнал о том, что ушел из жизни один из художников маленького комьюнити. Нет, мы не были знакомы, даже не общались, но само событие ударило. Я пролистывал его стену, читал сообщения, пару дней ходил и думал только об этом. Видимо с течением жизни я становлюсь все более чувствительным к уходу людей. И как только меня начало "отпускать", спустившись в метро, я увидел мужика, он лежал лицом вниз, вокруг никто не бегал, а мужик лежал и не шевелился. Никакой крови, просто лежащий лицом вниз человек. Люди ходили мимо, кто-то сказал, что работники метро в курсе и уже что-то предпринимают. Мне этого было достаточно, я ушел. Честно говоря не знаю чем закончилось... Третий удар случился еще спустя сутки, когда я узнал, что один мой знакомый потерял всю семью, а сам остался жив. Несчастный случай... Как итог, от всей этой карусели, к выходным я заболел.
Кашель, сопли, температура и вот это вот всё осеннее. От чего и продолжаю лечиться.
В середине этой истории, между событиями, в общем чатике художников написал парень - "решил внезапно поучаствовать в этом джеме... Если вдруг кому-то было бы интересно присоединиться в качестве пиксель арт художника - был бы очень рад!"
Мне абсолютно не хотелось заниматься своей игрой, дарить ей накопившиеся эмоции, и я решил присоединиться к чужому проекту на пару недель, отвлечься, в качестве художника.
В начале было немного сложно и мы могли просто не сработаться. Firlik(второй парень из команды на геймджем), имел геймплейную идею и условный лор, про битвы и рост "слабого" человека, а мне этого было мало. Мне всегда нравились глубокие игры с сюжетом и я стал закидывать его возможными вариантами развития игры, вариантами лора. Конечно такое вмешательство поставило под вопрос нашу совместную работу. Тем более, что знакомы мы были дня три.
Первый концепт арт игры(надеюсь меня не убьют за раскрытие сей тайны)
Еще один концепт арт, раскиданный тайлами в годо
сами плиточки, как пример.
Спустя много часов труда и стараний, а точнее...
Вечером, 4 сентября, в разгар "полосы", я принял идею слабого человека окончательно. И так игра начала приобретать свой визуальный стиль.
Лесной ранний концепт
Горный концепт
В голове стал складываться лор, наратив. Это конечно лежало эмоциональным фоном, но почти полностью было готово. Главный герой стал странником, который проходит жизненный путь, путь разработчика игр, рабочего завода, мужа, сына, отца и т.д. Да, в первую очередь его дорога была связана с геймдевом, но суть была более общей. Странник решает пройти путь, прожить жизнь в полном смысле этого слова. Он преодолевает препятствия, идет по разветвлениям, путями, которыми шли сотни людей до него. Странник сражается с "проблемами". Вокруг тьма и разруха. Чем дальше, тем больше всего, что может тебя откатить в начало/убить.
В игре все предметы кликабельны через вопрос и можно о них прочитать. Паук, например - "бла-бла-бла-бла..."
А параллельно с артом, напарник рубил софт. Я до сих пор не понимаю как ему всё это удалось сделать вовремя и так хорошо...
Шаг за шагом игра обретала картинку. Каждый свободный миг, пока были силы, мы посвящали игре. Лор и Арт окончательно отдали мне. И я вложил в этот мир всю боль, которую ощутил и пропустил через себя за эти две недели.
концепт одной из заставок
промежуточный результат
Каждый пиксель я думал о жизни. Вспоминал про то, что человек смертен, что счастье хрупкое и прокручивал другие подобные мысли. Они изливались в описаниях и пикселях... Они легли в суть существования главного персонажа.
Сейчас, дописывая эти строчки, я думаю, что отпустил свою "черную полосу" и готов идти дальше, работать, творить, жить. Пропитывать новые игры чем-то большим, чем просто пиксели.
Думали просто игра, а тут целый мир внутри =)
Немного эмоционально получилось и чуть несвязно, но как есть...
Я надеюсь, что каждый поигравший в игру, и прочитавший этот текст, станет чуточку больше ценить жизнь, всех обнимаю, всем добра)
П.С. Спасибо, что прочитали. Если будет интересно, то вот ссылка на канал в тг. Всем рад)
"Руки дрожат, пальцы обжигает меч. Ты сделал то, что был должен. Здесь заканчивается эта история, но мир продолжает жить. Скоро придут новые странники..." (с) Рассказчик.
эта игра сделана мной в одиночку я всегда хотел иметь своё комьюнити если хотите поиграть то напишите в комментарии , я стараюсь обновлять игру и не гонюсь за деньгами , я уже думаю написать музыку для неё и звуки !!!