Как мы делаем 2D-симулятор грузоперевозок: что уже готово и куда движемся к MVP
Мы с командой «Voltage» делаем Truck Sim 2D — двухмерный сайдскролл-симулятор грузоперевозок для Android и ПК на Godot 4.6. Идея простая: игрок выбирает машину и прицеп, забирает груз, довозит его до предприятия, получает деньги и тратит их на топливо и апгрейд техники — чтобы отправиться в следующий рейс. Но со временем мы хотим, чтобы этот цикл проходили не в одиночку, а вместе с друзьями по сети.
Сейчас доступна играбельная версия 0.2.8 под Android и Windows:
Обратная связь — в комментариях или через анонимную форму
В этой статье — что уже реализовано и как это устроено, и что мы планируем сделать до минимального MVP.
Что уже сделано
Экономика и производственная цепочка
Мир игры — это город, заправка, угольная и железная шахты и металлургический завод, связанные маршрутами. Чтобы получить сталь, нужно сначала привезти на завод уголь и руду:
Завод принимает только тот груз, который фактически до него доехал. Заработанные деньги уходят на топливо и апгрейды двигателя, трансмиссии и бака — вождение и менеджмент технику завязаны в один цикл, а не разнесены по отдельным экранам.
Физика машины, прицепа и груза
Машина построена на RigidBody2D: подвеска считается отдельно для колёс, коробка поддерживает режимы P / R / D / M, можно переключаться между задним и полным приводом. Тип покрытия (асфальт, грязь, песок, снег, лёд) влияет на сцепление и сопротивление качению.
Прицеп — отдельное физическое тело на PinJoint2D, что позволяет сцепке складываться на переломах рельефа. Сборка машины с прицепом вынесена в общий TrailerFactory, чтобы связка одинаково создавалась в поездке, на погрузке и на заправке.
Груз тоже физический: каждый кусок угля, руды или стали — отдельный объект с массой, который может выпасть через борт. Итоговый тоннаж считается по тому, что реально осталось в кузове — если часть груза потеряна по дороге, приборная панель и завод это увидят напрямую, без отдельной системы штрафов.
Погрузка без лишних манёвров
Погрузка — отдельная универсальная сцена. Она получает от карты тип товара, запас и точку-источник и создаёт машину с прицепом так, чтобы кузов сразу оказался под погрузочной горловиной — без ручного манёвра игрока:
Первая сетевая версия
Сейчас это базовый технический слой, а не готовый кооператив. Один игрок создаёт комнату в локальной сети, второй подключается по IP — если оба едут по одному маршруту, они видят машины друг друга и могут ехать конвоем.
Связь работает через ENet: клиент передаёт позицию, скорость и обороты, а удалённая машина интерполирует эти состояния. Столкновений между игроками пока нет, деньги, груз и сохранение — локальные, отдельные у каждого. Для комнаты можно задать пароль: сервер отправляет одноразовый запрос, а клиент считает ответ через HMAC — это задел на будущее, когда сессии смогут выходить за пределы локальной сети, а не только требование для LAN как таковой.
Главный вывод этого этапа: мы умеем стабильно показывать несколько машин на одном маршруте. Общей экономики сессии, сетевого груза и механик взаимопомощи пока нет — и это следующий шаг.
Почему Godot
Выбрали Godot за связку встроенной 2D-физики, сценной структуры и экспорта сразу на Android и ПК из одного проекта. Для нас это было принципиально: `RigidBody2D`, `PinJoint2D` и коллизии для кузова с сыпучим грузом нужны были из коробки, без стороннего физического движка и без ручной синхронизации версий под каждую платформу отдельно.
Сценная модель Godot оказалась удобной ещё и потому, что карта, гараж, поездка, погрузка и заправка — это разные экраны с общими элементами: одна и та же машина с прицепом должна одинаково выглядеть и вести себя везде. Собрав их сборку в TrailerFactory и переиспользуя сцены между режимами, мы избавились от дублирования логики, которое иначе пришлось бы держать синхронным вручную при каждом изменении физики или интерфейса.
Инструменты и структура проекта
Проект на GDScript, в Godot: карта, гараж, поездка, погрузка и заправка — отдельные сцены с переиспользуемыми машиной, прицепом и UI.
В разработке использовали Kodik — редактор, терминал и AI-диалог в одном окне. AI помогал искать дублирующуюся логику (так родился TrailerFactory), переносить элементы интерфейса из кода в `.tscn` и готовить документацию. Физику, управление и LAN-сессию при этом всегда проверяли вручную на обеих платформах — автоматика не оценивает эргономику ввода и динамику прицепа.
Роадмап до MVP
Порядок для нас принципиален: сначала сделать содержательным уже работающий цикл и превратить LAN-конвой в настоящий кооператив, и только потом расширять масштаб мира.
- Общие задания. Совместный заказ, который нельзя выполнить в одиночку так же эффективно: распределение груза между машинами, несколько связанных рейсов.
- Синхронизация состояния сессии. Общая экономика заказа, сетевой груз, согласованное сохранение прогресса между участниками.
- Механики взаимопомощи. Помощь партнёру на сложном участке маршрута, а не просто параллельная езда.
- Полировка кооп-цикла. Проверка на обоих платформах, балансировка топлива и прибыли под совместную игру.
Только после этого — расширение за пределы автодорог: терминалы перегрузки, железнодорожные и водные маршруты, где в кооперативе один игрок довозит груз до станции, а другой продолжает доставку поездом или судном. Это следующий большой этап, а не часть MVP.
Вместо заключения
На версии 0.2.8 уже можно загрузить физический груз, провести его через производственную цепочку, потерять часть на сложной дороге, заработать на апгрейды и проехать маршрут вместе с другом по LAN. Нам важно, чтобы кооператив стал не декорацией, а причиной, ради которой стоит звать друга — и весь ближайший роадмап выстроен вокруг этого.
Если попробуете сборку — расскажите, понятен ли основной цикл и чувствуется ли влияние груза на результат.