
Мы с командой «Voltage» делаем Truck Sim 2D — двухмерный сайдскролл-симулятор грузоперевозок для Android и ПК на Godot 4.6. Идея простая: игрок выбирает машину и прицеп, забирает груз, довозит его до предприятия, получает деньги и тратит их на топливо и апгрейд техники — чтобы отправиться в следующий рейс. Но со временем мы хотим, чтобы этот цикл проходили не в одиночку, а вместе с друзьями по сети.
Сейчас доступна играбельная версия 0.2.8: Android, ПК. Обратная связь — в комментариях или через анонимную форму.
В этой статье — что уже реализовано и как это устроено, и что мы планируем сделать до минимального MVP.
Что уже сделано
Экономика и производственная цепочка
Мир игры — это город, заправка, угольная и железная шахты и металлургический завод, связанные маршрутами. Чтобы получить сталь, нужно сначала привезти на завод уголь и руду:
Угольная шахта ─┐ ├─> Сырье ─> Металлургический завод ─> Сталь ─> Город Железная шахта ─┘
Завод принимает только тот груз, который фактически до него доехал. Заработанные деньги уходят на топливо и апгрейды двигателя, трансмиссии и бака — вождение и менеджмент технику завязаны в один цикл, а не разнесены по отдельным экранам.


Физика машины, прицепа и груза
Машина построена на RigidBody2D: подвеска считается отдельно для колёс, коробка поддерживает режимы P / R / D / M, можно переключаться между задним и полным приводом. Тип покрытия (асфальт, грязь, песок, снег, лёд) влияет на сцепление и сопротивление качению.
Прицеп — отдельное физическое тело на PinJoint2D, что позволяет сцепке складываться на переломах рельефа. Сборка машины с прицепом вынесена в общий TrailerFactory, чтобы связка одинаково создавалась в поездке, на погрузке и на заправке.
Груз тоже физический: каждый кусок угля, руды или стали — отдельный объект с массой, который может выпасть через борт. Итоговый тоннаж считается по тому, что реально осталось в кузове — если часть груза потеряна по дороге, приборная панель и завод это увидят напрямую, без отдельной системы штрафов.
Погрузка без лишних манёвров
Погрузка — отдельная универсальная сцена. Она получает от карты тип товара, запас и точку-источник и создаёт машину с прицепом так, чтобы кузов сразу оказался под погрузочной горловиной — без ручного манёвра игрока:
var bay := VehicleDB.get_trailer_bay(trailer_id) if bay.is_empty(): bay = VehicleDB.get_bay(GameState.selected_truck) var bay_center := (float(bay["x_min"]) + float(bay["x_max"])) * 0.5 truck.global_position.x = loading_site.global_position.x - bay_center

Первая сетевая версия
Сейчас это базовый технический слой, а не готовый кооператив. Один игрок создаёт комнату в локальной сети, второй подключается по IP — если оба едут по одному маршруту, они видят машины друг друга и могут ехать конвоем.


Связь работает через ENet: клиент передаёт позицию, скорость и обороты, а удалённая машина интерполирует эти состояния. Столкновений между игроками пока нет, деньги, груз и сохранение — локальные, отдельные у каждого. Для комнаты можно задать пароль: сервер отправляет одноразовый запрос, а клиент считает ответ через HMAC — это задел на будущее, когда сессии смогут выходить за пределы локальной сети, а не только требование для LAN как таковой.
Главный вывод этого этапа: мы умеем стабильно показывать несколько машин на одном маршруте. Общей экономики сессии, сетевого груза и механик взаимопомощи пока нет — и это следующий шаг.
Почему Godot
Выбрали Godot за связку встроенной 2D-физики, сценной структуры и экспорта сразу на Android и ПК из одного проекта. Для нас это было принципиально: RigidBody2D, PinJoint2D и коллизии для кузова с сыпучим грузом нужны были из коробки, без стороннего физического движка и без ручной синхронизации версий под каждую платформу отдельно.
Сценная модель Godot оказалась удобной ещё и потому, что карта, гараж, поездка, погрузка и заправка — это разные экраны с общими элементами: одна и та же машина с прицепом должна одинаково выглядеть и вести себя везде. Собрав их сборку в TrailerFactory и переиспользуя сцены между режимами, мы избавились от дублирования логики, которое иначе пришлось бы держать синхронным вручную при каждом изменении физики или интерфейса.
Инструменты и структура проекта
Проект на GDScript, в Godot: карта, гараж, поездка, погрузка и заправка — отдельные сцены с переиспользуемыми машиной, прицепом и UI.
scenes/ui/ меню, гараж и сетевой экран scenes/gameplay/ карта, поездка, погрузка и заправка scenes/vehicles/ машина и прицеп scripts/vehicles/ физика транспорта и каталог техники scripts/network/ синхронизация удалённых машин scripts/autoload/ состояние игры, сеть и звук
В разработке использовали Kodik — редактор, терминал и AI-диалог в одном окне. AI помогал искать дублирующуюся логику (так родился TrailerFactory), переносить элементы интерфейса из кода в .tscn и готовить документацию. Физику, управление и LAN-сессию при этом всегда проверяли вручную на обеих платформах — автоматика не оценивает эргономику ввода и динамику прицепа.
Роадмап до MVP
Порядок для нас принципиален: сначала сделать содержательным уже работающий цикл и превратить LAN-конвой в настоящий кооператив, и только потом расширять масштаб мира.
Общие задания. Совместный заказ, который нельзя выполнить в одиночку так же эффективно: распределение груза между машинами, несколько связанных рейсов.
Синхронизация состояния сессии. Общая экономика заказа, сетевой груз, согласованное сохранение прогресса между участниками.
Механики взаимопомощи. Помощь партнёру на сложном участке маршрута, а не просто параллельная езда.
Полировка кооп-цикла. Проверка на обоих платформах, балансировка топлива и прибыли под совместную игру.
Только после этого — расширение за пределы автодорог: терминалы перегрузки, железнодорожные и водные маршруты, где в кооперативе один игрок довозит груз до станции, а другой продолжает доставку поездом или судном. Это следующий большой этап, а не часть MVP.
Вместо заключения
На версии 0.2.8 уже можно загрузить физический груз, провести его через производственную цепочку, потерять часть на сложной дороге, заработать на апгрейды и проехать маршрут вместе с другом по LAN. Нам важно, чтобы кооператив стал не декорацией, а причиной, ради которой стоит звать друга — и весь ближайший роадмап выстроен вокруг этого.
Если попробуете сборку — расскажите, понятен ли основной цикл и чувствуется ли влияние груза на результат.
SwanDevGames
Готов отписаться. Как коллега по цеху, могу сразу с порога заявить: либо вы даете игроку обучение, либо выстраиваете игровой процесс линейным образом. Я пошел качать игру, как увидел ссылку, не дочитав статью и... ничего не понял. Если в дальнейшем планируется его вводить точно - ок, если планируете оставить только подсказки, что есть возле объектов - не ок, ибо неясно. К этому же и физическая модель. Разобравшись, что надо грузиться на шахте, нагрузил свой прицеп полностью (написано 10 т, погрузил 10 т) и не смог подняться в горку. Ну и пока не доедешь до пункта назначения - не знаешь его назначения - в тот же котел: либо обучаюсь, либо инфу хотелось бы заранее знать, а то так бенза не напасешься, у нас с ним и так проблемы) (хорошо, хоть не в игре). Дальше пока не двигался, чуть позднее гляну, но личное мнение на текущий момент - интересно. Очень люблю монотонные мобилки. Сделаете рекламу через каждый чих и платный бенз aka энергию - расстроюсь. Если рекламка для буста - сойдет. Пока как то так.