Теперь в игре нормальное главное меню, запуск, загрузка, сохранение, пауза. Инвентарь показывает живые предметы игрока — не тестовые болванки, а то что реально лежит в рюкзаке. Количество, вес, состояние — всё подтягивается само.
Задания обновляются по мере прохождения, а не висят списком ради красоты. Документы и записки открываются из игровых данных — нашёл бумажку в мире, она появилась в меню. Картотека собирает персонажей и улики.
Отдельная история — меню машины. Сделал вкладки по системам: двигатель, кузов, электрика, охлаждение, топливная, подвеска, тормоза. У каждой детали своё состояние, поломки, признаки неисправности и что с ней можно сделать. Где-то долить, где-то подкрутить, где-то снять и заменить. Серьёзный ремонт типа переборки двигателя на обочине не провернуть — для такого позже понадобится гараж.
Повреждения передаются напрямую из систем машины в меню. Что-то сдохло — сразу видно где и почему. Всё логируется в журнал событий.
UI готов почти полностью. Связи работают, кнопки жмутся, данные живые. Но когда собрал все экраны вместе, понял что информации местами перебор — особенно в разделе машины. Буду упрощать.
По ремонту — хочется не кнопку «починить», а подход как в My Summer Car: самому крутить гайки, снимать детали по очереди, ставить в пазы. Это сложнее и я пока прикидываю с чего начать, чтобы не закопаться. Но кнопка «починить» — не для этой игры.
На скриншотах живой интерфейс, всё работает прямо в Godot. Не макеты.
Короче, делаю сейчас первый акт. Заправка, осмотр машины, всякие интерактивные штуки — потихоньку собираю сцену.
Заодно решил загрузочное видео накидать. Я в монтаже ноль, в режиссуре тем более. Я вообще код пишу, а не кино снимаю. Поэтому тупо закинул промт в нейросеть и вот что вышло.
Получилось в целом неплохо. Есть косяки, но не критично. Настроение передаёт, а это главное.
Не пинайте сильно за ИИ, я просто программист, который пытается хоть как-то показать, что у него в голове.
Видео прикрепил. В профиле ещё посты по разработке, если интересно глянуть.
Накидайте плюсиков, если не жалко — чтобы пост поднять.
Колян ожил. Нет, серьёзно — он теперь не просто капсула с камерой, которая скользит над землей. Он ходит. Бегает. Прыгает. Приседает. Ускоряется. У него есть анимации. И это заняло примерно неделю вечеров, два литра чая и один момент, когда я всерьёз хотел всё переписать на кубах без анимаций вообще.
Но давайте по порядку.
СТРУКТУРА ПЕРСОНАЖА (ИЛИ КАК Я РАЗНЁС ВСЁ ПО КОМПОНЕНТАМ)
Я фронтендер. Я привык, что всё — компоненты. Кнопка, форма, модалка — каждая живёт своей жизнью и не мешает соседу. Поэтому персонажа я собрал так же.
Сцена Player — это CharacterBody3D. Внутри не куча кода в одном файле, а россыпь дочерних нод-компонентов. Каждая отвечает за что-то одно:
Player — сам персонаж, CharacterBody3D. Главный узел, в нём всё.
CollisionShape3D — капсула. Радиус 0.4, высота 1.8. То, чем Колян бьётся об стены.
ModelRoot > CharacterModel — 3D-модель из ассета CasualMale. Временная, потом заменю на свою.
Head — точка на высоте 1.62. К ней привязана камера и всё, что должно быть «на глазах»:
Camera3D — глаза игрока.
InteractRay — луч для взаимодействия с предметами и дверями. Бьёт на 3.2 метра вперёд.
Зачем так дробить? Потому что когда у тебя один скрипт на 600 строк, который управляет всем — ты умрёшь его дебажить. А когда Movement отдельно, Vitals отдельно, Animation отдельно — ты открываешь нужный файл, правишь пять строк и оно работает. Ну или ломается, но ты хотя бы знаешь где копать.
Player.gd при этом — дирижёр. Он только связывает компоненты сигналами и пробрасывает вызовы:
Движение ловит ввод, камера следит за мышью, анимация дёргает скелет, виталы следят за голодом. И никто никому не мешает. Мечта.
АНИМАЦИИ. БОЛЬ. BLEND TREE
Вот тут я остановлюсь подробнее, потому что это был ад.
3D-модель персонажа — из ассета (CasualMale). Скелет есть, анимации есть: idle, walk, run, jump_start, jump_loop, crouch_idle, crouch_walk. Всё это нужно было завести так, чтобы персонаж не дёргался при переходе от ходьбы к бегу, не скользил по земле и не улетал в T-pose при резкой смене состояний.
Панель Animation в Godot. Каждая кость скелета — три дорожки вращения (X, Y, Z). Ключи на дорожках задают позу в конкретный момент времени.
В Godot для этого есть AnimationTree и BlendSpace2D. Работает так: у тебя есть двумерное поле, где по одной оси — скорость (от стояния до бега), по второй — направление (вперёд, вбок). Ты раскидываешь анимации по этому полю, а Godot сам их смешивает. На бумаге — красиво. На деле — я убил три вечера только на то, чтобы персонаж не дёргал ногой при переходе с idle на walk.
Главная проблема: ассетные анимации не знают про твой масштаб, твою скорость движения и твои кривые. Если персонаж скользит (ноги двигаются быстрее, чем тело) — это не баг движка, это ты неправильно настроил скорость корневой ноды. Если он резко встаёт из приседа — ты забыл transition в AnimationNodeStateMachine.
Сейчас всё работает: ходьба, бег, прыжок с фазой взлёта и приземления, приседание с отдельной idle-анимацией. Но осадочек остался. Анимации — это не код. Код ты можешь отдебажить, поставить breakpoint, понять. Анимации — это метод тыка, визуальный подбор и молитва.
ЧТО ДЕЛАЮ ПРЯМО СЕЙЧАС
Руки. Буквально. Персонаж должен уметь:
Открывать дверь машины (анимация руки тянется к ручке).
Поднимать предмет с земли (наклон, рука вниз).
Держать предмет перед собой (предмет крепится к HoldSocket на камере).
Это отдельная боль. Анимации рук должны смешиваться с анимациями тела через AnimationLayer — то есть ноги идут, а руки в этот момент делают что-то своё. В теории Godot умеет так делать. На практике я пока закопался в документацию и форумы.
Как добью — покажу гифку. Если кто работал с AnimationLayer в Godot 4 и знает, как не сломать позвоночник персонажу при смешивании — маякните в комментах. Реально надо.
МИР — ПОКА ПРИМИТИВЫ
Отдельно не показываю (следующий пост будет про мир), но упомянуть надо. Весь мир сейчас — серые боксы, кубы и цилиндры. Заправка, дорога, здание, колонки. Всё в масштабе игры, можно ходить, можно залезать в машину, можно ездить. Расстояния чувствуются. Свет и туман — уже работают. Но про это — в следующем посте, с картинками.
ЧТО ДАЛЬШЕ
Добить анимации рук (поднятие, дверь, держание).
Привязать предметы к HoldSocket.
Сделать пост про мир с нормальными скринами.
Демо всё ещё впереди, но Колян уже живой. Он двигается, дышит, устаёт. Осталось научить его не быть беспомощным перед открытой дверью машины.
Подписывайтесь, если тема заходит. Вопросы, советы, проклятия — в комменты.
P.S. Да, модель персонажа пока ассетная. Свою сделаю позже, когда руки дойдут. Сначала — геймплей.
Всем привет. Я фронтенд. JS, TS, React, Next.js — стандартный джентльменский набор. Но всегда хотел попробовать геймдев. Руки не доходили. И вот — дошли.
Встал вопрос: какой движок брать?
Unity — мощно, но тяжело и с лицензией пляски. Unreal — это ракетостроение. А Godot я скачал на пробу — и меня затянуло.
Почему Godot для бывшего фронта — зашло:
1. GDScript — как Python, только проще. Забудь про this, bind, бесконечные useCallback. Просто пишешь speed += 5 — и работает.
2. Сцены = компоненты. Делаешь машину → сохраняешь как сцену → кидаешь на карту. Знакомо по React, только визуально и без лишнего бойлерплейта.
3. Сигналы вместо EventEmitter. Всё то же самое, но встроено и не течёт.
4. Бесплатно и открыто. Не надо думать о лицензиях и «когда потребуют деньги». Качай и делай.
5. Физика из коробки. В вебе ты подключаешь библиотеку и молишься. Тут добавил CharacterBody3D — ходит. VehicleBody — машина с подвеской и колёсами. Без танцев с бубном.
Что ломало мозг:
· Нет npm install. Первое время рука тянулась к терминалу.
· Визуальный редактор вместо vim. Но привыкаешь за пару дней.
· Ось Y — высота. Первые объекты улетали в небо, потому что я тыкал y как в вебе.
Что в итоге:
За пару вечеров — работающий персонаж, машина с физикой, посадка/высадка, запуск двигателя. И кайф. Такого кайфа от кодинга у меня давно не было.
Godot — лучший вход в геймдев для веб-разработчика. Просто бери и делай. Никакой магии.
Всю жизнь пилю сайты на React. Лендинги, админки, фриланс. Но с детства была одна мечта — сделать свою игру.
Не ради денег. Ради того самого чувства, когда кто-то запускает твой мир и говорит: «Ого, круто же».
Год думал. Месяц назад начал.
Делаю симулятор российской глубинки. Деревня, старая копейка в гараже, дедова тайна. Без донатных помоек, без «заплати чтобы ускорить». Просто игра, в которую сам бы играл ночами.
Пока есть только прототип: персонаж ходит, машина заводится, можно ездить. Впереди — разборка двигателя по болтам, деревня с живыми соседями и много русского колорита.
Не знаю, взлетит или нет. Но кайфую от процесса как никогда.
Если вам тоже нравится идея — подписывайтесь, буду делиться прогрессом. И критика очень нужна.
Мы часто просим у разработчиков реализма. А потом получаем его и понимаем, что, возможно, хотели не совсем этого. Есть игры, которые не дают тебе почувствовать себя супергероем. Вместо этого они с радостью напоминают, что нужно есть, спать, не простужаться и, о боже, платить по счетам. Вот вам пятерка игр, где самое сложное — дожить до конца, не померев от пиявки или собственной ошибки.
My Summer Car
Год выхода: 2016
Разработчик: Amistech Games
Платформы: ПК
Ваша задача в My Summer Car состоит в том, чтобы собрать с нуля старую развалюху Satsuma, которая стоит в гараже в виде груды металлолома. И когда мы говорим «с нуля», мы имеем в виду, что вам нужно прикрутить каждый болтик вручную. Инструкции? Есть, но они написаны так, что без гайда вы скорее соберёте ядерный реактор, чем вернёте на место дверь у этой колымаги. Пропустили один болт где-то на двигателе? Поздравляем, он заклинит через 5 километров, и вы превратитесь в курицу гриль.
Но сборка машины — это лишь половина проблем. Ваш персонаж, юный финский парень, хочет есть, спать, пить (в основном пиво) и мыться. Родители денег не оставили, поэтому придётся зарабатывать, выполняя грязную работу: возить дрова, ассенизатором откачивать деревенские туалеты. Не сильно достойная работа, но на пиво и СТО хватит.
The Long Dark
Год выхода: 2017
Разработчик: Hinterland Studio
Платформы: ПК, PS4, Xbox One, Nintendo Switch
Здесь нет монстров, зомби или мутантов. Зато есть абсолютно беспощадный и отвратительный канадский холод. Весь геймплей в том, чтобы одновременно не отморозить себе зад, не стать чьим-то ужином и как-то выживать. Вам нужно постоянно следить за температурой тела, сытостью, уровнем усталости и скоростью ветра. Вы можете натянуть на себя одежды как самая настоящая капуста, но если вы промокнете (ещё и не рядом с базой), то готовьтесь к смерти.
В The Long Dark, конечно, есть оружие, но легче от этого вам совсем не станет. Убиваешь оленя, празднуешь себе, а оказывается, что ты далеко не единственный, кто на этого оленя претендовал. И вот ты уже не радуешься добыче, а уносишь ноги от очередного медведя по сугробам и кочкам. После этой игры вы будете ценить центральное отопление как величайшее изобретение человечества.
Green Hell
Год выхода: 2019
Разработчик: Creepy Jar
Платформы: ПК, PS4, Xbox One, Nintendo Switch
Если вы не сильно большой ценитель холода, то на выбор для вас ещё есть дебри джунглей Амазонки. Но наличие тепла приносит не меньше проблем, чем его отсутствие. В Green Hell у вас есть «умные часы», которые позволяют осматривать руки и ноги на наличие проблем. И вы будете делать это каждые пять минут. На вас постоянно прилепляются пиявки (особенно куда не надо). Под кожу могут залезть черви (и их нужно выковыривать костяной иглой). Каждая царапина может загноиться и вызвать лихорадку.
Выйти вперёд ногами тут проще простого. Съели незнакомый гриб? Пищевое отравление. Выпили грязной воды? Паразиты. По вам проползла сколопендра? Яд. Вы будете умирать от всего: от голода, от пантер, от аллигаторов, от падения с небольшой высоты и от десятков экзотических болезней. Если вдруг хотели прочувствовать на себе ощущения, которые переживает рядовой ипохондрик каждый день — добро пожаловать.
Dwarf Fortress
Год выхода: 2022
Разработчик: Bay 12 Games
Платформы: ПК
Это игра, в которой симулируется ВСЁ. От геологических слоёв планеты, истории цивилизаций и течения подземных рек до психологического состояния, системы кровообращения и даже настроения каждого отдельного дварфа. Ваш лучший воин может впасть в депрессию, потому что у него промокли носки во время дождя. Или впасть в ярость и устроить резню, потому что кто-то украл его любимую кружку. Коты здесь могут умереть от алкогольного отравления, нализавшись эля, пролитого на пол в таверне.
Вы не управляете дварфами напрямую, вы лишь раздаёте приказы и беспомощно наблюдаете, как ваша идеально спланированная игра рушится из-за того, что один из дварфов опять напился и потащил с собой всех ваших лучших воинов на поиск «приключений». В Dwarf Fortress возможно почти всё, а то, что невозможно — за вас сделают ваши подопечные.
Project Zomboid
Год выхода: 2013
Разработчик: The Indie Stone
Платформы: ПК
Забудьте про хедшоты и паркур (привет Dying Light). В Project Zomboid вас, скорее всего, убьёт не зомби. Вас убьёт царапина от разбитого окна, которую вы забыли перевязать, и она загноилась. Или простуда, потому что вы промокли под дождём. А может и депрессия от того, что вы слишком долго сидели в одиночестве и ели консервы с истёкшим сроком годности. Слоган игры «Это история о том, как вы умерли» — не метафора, а единственно гарантируемый финал.
В отличие от большинства игр про зомби, здесь укус не просто срезает часть полоски HP, а с вероятностью в 100% укоротит ваш срок жизни до нескольких дней. Вы не умрёте сразу, вы будете медленно угасать, наблюдая, как инфекция пожирает вас изнутри. Это не игра про то, как спасти мир. Это игра про то, как найти консервный нож, забаррикадироваться в доме и оттянуть свой неизбежный конец ещё на один день.
А какие игры для вас зашли «слишком далеко» с реализмом? Делитесь в комментариях!
Чтобы выгодно купить эти и тысячи других игр, заглядывайте на маркетплейс Keysforgamers. Не забудьте использовать промокод PIKABU для дополнительной скидки! У нас вы найдете удобное пополнение кошелька Steam с низкой комиссией, тысячи игр по хорошим ценам и возможность самому стать продавцом. Заглядывайте на огонек!