Я решил заселить Марс одним видом роботов и увяз в собственной игре
Сначала коротко: это уже не набор красивых картинок и не концепт «когда-нибудь я сделаю игру». В «Робосоме» можно высадиться на Марс, построить работающую колонию, наладить добычу и производство, собрать новых роботов, посидеть за штурвалом корабля и повоевать с другой колонией. Игра сейчас работает на Windows и Android.
Начинается всё довольно скромно. На поверхность садится пятидесятиметровый корабль «Стриж». Рампа опускается, из грузового отсека выходит одна Робосома. Базы нет. Дорог нет. Даже розетки, в которую можно воткнуться, нет. Есть только робот, груз стартового оборудования и очень большой Марс.
Дальше у игрока два варианта: построить из этого город или оставить на равнине очень дорогую кучу металла.
Что это вообще за игра
По жанру это смесь стратегии в реальном времени, строительства колонии, логистики и немного симулятора техники. Я не хотел делать очередную схему «поставил шахту, подождал таймер, собрал кристаллы». Здесь здание само по себе почти бесполезно. Его надо поставить там, где до него доберётся робот, обеспечить энергией, подвезти сырьё, забрать готовый продукт и не перекрыть ворота соседней постройке.
Первые минуты обычно выглядят примерно так:
Осмотреть место посадки и понять, где нормальный склон, а где робот потом будет бессильно перебирать ногами.
Развернуть энергетику и добычу.
Построить хранилище и производственную цепочку.
Довезти материалы до фабрики.
Собрать вторую Робосому. С этого момента колония начинает понемногу расти сама.
Сейчас в игре 11 типов зданий. Есть добыча, энергетика, переработка, склады, фабрика, обслуживание, оборона и топливная цепочка для «Стрижа». Роботы действительно несут грузы между объектами. Если логистика встала, цифры на складе не телепортируются из одного окна в другое. Можно играть против компьютерной колонии, наблюдать бой ИИ против ИИ, взять выбранного робота под прямое управление от первого лица или сесть в кабину корабля.
Игра бесплатная. Рекламы, покупок энергии, премиальных ящиков и прочего внутри нет. Мне сейчас гораздо важнее понять, интересно ли в это играть человеку, который не видел мои схемы и не знает, какую кнопку я считаю «очевидной».
Почему Робосома одна, а не зоопарк из двадцати роботов
Когда я придумывал мир игры, первая версия была самой обычной: маленький робот-шахтёр, тяжёлый строитель, быстрый разведчик, грузовик, ремонтник, боевой робот. Для картинки удобно. Для Марса, как выяснилось, сомнительно.
На Земле сломанный погрузчик можно отвезти в сервис. На Марсе ближайшая подходящая деталь может лететь больше двух лет. Если в колонии пять несовместимых машин, то нужны пять наборов приводов, разъёмов, аккумуляторов, инструментов, диагностических программ и запасных ног. Надёжность такой системы не складывается, а рассыпается.
Так появился «Стандарт Робосомы»: один корпус, одна энергетическая ячейка, общая вычислительная архитектура, одинаковые силовые и механические разъёмы, одна система диагностики и один протокол команд. Меняются инструменты и модули, но не весь робот.
Новый инструмент допускается. Новый несовместимый класс робота без крайней необходимости не допускается.
Это не волшебная машина, которая одинаково хорошо умеет всё. Скорее марсианский трактор. Сегодня он несёт контейнер, завтра ставит опору здания, послезавтра получает буровой модуль, а если к базе пришли незваные соседи, берёт оружие. Один и тот же корпус выполняет четыре основные роли: строитель, добытчик, перевозчик и защитник.
Внешне Робосома не похожа на человека. Ей незачем красиво ходить по лестнице, пожимать руку или поддерживать разговор у кофейного автомата. Нужны низкий центр тяжести, четыре опорные ноги, манипуляторы спереди, круговой обзор и возможность вытащить себя из неприятного места. Получился двухметровый четырёхногий «промышленный муравей» массой около 400 килограммов. Цифры относятся к лору, но геометрию и поведение я стараюсь не отрывать от здравого смысла.
Почему ноги, а не колёса? Колёса проще и экономичнее, но колония не может выбирать только идеально укатанные равнины. Камни, уступы, входы в лавовые трубки, осыпи и последствия неудачной стройки никуда не денутся. На реальных работах JPL уже испытывались четвероногие машины вроде Spot для автономного исследования сложных подземных пространств. Я не копирую конкретного робота, но сама логика такой ходовой части вполне земная.
Откуда взялось название
«Робосома» выросла из слова «рибосома». Рибосомы маленькие и довольно универсальные: они собирают белки, из которых живёт и растёт организм. В лоре человечество смотрит на Марс примерно так же. Планета пока не дом, а новая ткань, которую ещё только предстоит вырастить. Роботы в ней выполняют роль рабочих клеток.
Поэтому главная единица игры не танк и не герой с биографией на три экрана. Это базовая машина, способная поддерживать общую инфраструктуру и в конце концов собрать ещё одну такую же машину.
Самый важный момент колонии для меня не первый выстрел и не огромный взрыв. Это первый робот, который выходит из местной фабрики. До этого момента база зависит от того, что привезли с Земли. После него инфраструктура впервые начинает воспроизводить себя.
Но микросхемы из песка она ведь не напечатает
Конечно нет. Я специально не хотел решать всё нанороботами и «универсальным репликатором». Корпуса, силовые детали, простые приводы, трубы и часть инструментов колония со временем делает из местного сырья. Но сложная электроника, сенсорные матрицы и компоненты энергетических ячеек сначала прилетают с Земли в компактных контейнерах-семенах.
Получается не вечный двигатель, а понятная лестница развития. Сначала Земля поставляет почти всё. Потом колония делает тяжёлые и простые детали сама. Дальше доля местного производства растёт, а самые сложные компоненты ещё долго остаются импортными. Это даёт и нормальную игровую экономику, и причину беречь грузовые рейсы.
Энергия Робосомы по лору тоже стандартизирована: долговечная радиоизотопная ячейка и буферный аккумулятор для пиковых нагрузок. Тепло ячейки помогает переживать марсианскую ночь и не замораживать суставы. Но сварочный цех или плавильную печь робот на себе не потянет, для них всё равно нужна сеть базы.
Почему людей сначала нет
Это уже именно художественная часть мира игры, а не утверждение о будущем.
По лору до массового освоения на Марс успели слетать три человеческие экспедиции. Четырнадцать человек вернулись на Землю, но медицина собрала достаточно неприятных данных: радиация, пыль, низкая гравитация, замкнутая среда и постоянный риск сделали вывод скучным, зато честным. Первую постоянную инфраструктуру должны строить машины. Люди придут, когда на поверхности уже будут энергия, укрытия, производство, запас деталей и несколько способов не умереть из-за одного сломанного насоса.
Первая Робосома выходит из «Стрижа» на равнине Аркадия. Температура около минус 92, давление примерно 6 миллибар. Ответ с Земли в тот день идёт четырнадцать минут в одну сторону. Пока оператор прочитает сообщение и нажмёт кнопку, машина уже примет тысячи мелких решений сама. Не потому что она обрела душу, а потому что иначе на Марсе не поработать.
У неё поэтому три уровня «мозга». Быстрые процессоры держат движение и реакцию на окружение. Отдельный медленный, но стойкий контроллер следит, чтобы быстрый мозг не отправил корпус в овраг после случайного сбоя. Ускоритель распознавания помогает разбирать картинку и рельеф. Это пока в основном устройство мира, но оно подсказывает, как я хочу строить повреждения и отказы дальше.
Марс здесь не декорация под базой
Вообще проект начался не с роботов. Я пытался сделать что-то похожее на Google Earth, только для Марса: гладко летать от вида всей планеты до поверхности и не терять ощущение масштаба. Потом на сфере появился объект. Потом захотелось, чтобы он двигался. Потом понадобились ресурсы, здания, производство, противник и корабль. В какой-то момент стало поздно притворяться, что я пишу просто просмотрщик планеты.
Марс сделан сферой в масштабе 1:1, радиус 3389,5 километра. Для глобальной высоты используются данные MOLA и HRSC, для цвета глобальные мозаики Viking. Вода под поверхностью и интересные районы сверяются с опубликованными картами NASA. Сверху добавляется процедурный микрорельеф, иначе даже реальные глобальные данные вблизи выглядели бы слишком гладко.
Полный набор снимков высокого разрешения весил бы терабайты. Один только комплект CTX получается примерно 5,6 ТБ, поэтому засунуть его в установщик было бы смелым способом познакомиться с отзывами пользователей. Сейчас игра берёт реальную крупную форму рельефа и достраивает мелкие детали на месте. Позже хочу сделать потоковую подгрузку районов, чтобы подробность росла там, где действительно находится игрок.
Рельеф участвует в игре, а не лежит ковром. Крутизна влияет на строительство и движение, горизонт закрывает дальние объекты, робот должен стоять на настоящей поверхности, а камера не имеет права иногда смотреть сквозь гору только потому, что так удобнее формуле. Последний пункт звучит очевидно. Он стоил мне неприятно много времени.
Зачем писать собственный движок
Не потому что Unity или Unreal «плохие» и не потому что я умею лучше сотен инженеров. Я просто начал с задачи, которая плохо укладывалась в обычную сцену: огромная сфера, координаты планетного масштаба, постоянный переход от орбиты к ногам робота и тысячи движущихся объектов.
Игра написана на Rust. Графика идёт через wgpu, шейдеры на WGSL. Готового игрового движка нет, но было бы нечестно говорить «без библиотек»: разумеется, я использую экосистему Rust, загрузчики, математические и системные компоненты. Просто устройство мира, рендер, симуляцию, интерфейс, сетевой протокол и инструменты проекта приходится собирать под эту игру.
Координаты мира хранятся с высокой точностью, а перед отрисовкой всё считается относительно камеры. Иначе на другом конце планеты у робота начинают дрожать ноги просто из-за того, что обычному числу с плавающей точкой уже не хватает точности. Далёкие участки планеты упрощаются, близкие уточняются. Симуляция живёт отдельно от отрисовки, чтобы задумавшийся робот не вешал весь кадр.
Ещё внутри есть общая шина команд. Кнопка мыши, касание экрана, сетевой игрок и внешний ИИ не должны иметь четыре разных тайных хода в код. Они посылают одни и те же команды и получают доступную игроку информацию. Это не самая заметная функция на скриншоте, зато без неё будущая кроссплатформенность и подключаемые боты быстро превратились бы в клубок исключений.
Большая часть разработки выглядит совсем не как разработка мечты
Красивый кадр с рассветом занимает одну минуту. Поиск причины, почему робот пятнадцать раз подряд заезжает в одни и те же ворота, занимает вечер.
Один из моих любимых багов жил в передаче груза. Робот въезжал в здание, отдавал контейнер, выходил, тут же снова считал задачу актуальной и возвращался. Получалась очень ответственная машина, которая зациклилась между воротами и здравым смыслом. Пришлось вводить явное состояние передачи и блокировку повторного входа.
В другой раз ИИ строил здания там, где игроку игра честно запрещала это делать. Он не жульничал специально, просто у него была более простая проверка уклона. На карте возникали базы на косогорах, а человек выглядел единственным участником, который почему-то соблюдает строительные нормы.
У «Стрижа» однажды тень улетела от корпуса. Высота рельефа учитывалась два раза: корабль стоял правильно, формула тени тоже была по-своему правильной, вместе получилась ерунда. Камера на крутом склоне умела превращать робота в вытянутую линзу. Пять тысяч машин возле препятствия дружно повторяли дорогую проверку и съедали кадр. Сетевой матч на одном компьютере был прекрасен, а реальный телефон по Wi-Fi обнаружил задержки команд от одной до пяти секунд. Последняя проблема особенно полезно напомнила: два окна на одном ПК не являются сетевым тестом, сколько бы зелёных строк ни показали тесты.
На Android отдельной болью стала графика. На тестовом телефоне тяжёлая сцена держала около 26 кадров в покое и 33 при движении камеры. Я стал рисовать сам мир в половинном разрешении, оставив интерфейс полноразмерным. Получилось примерно 40 и 50 кадров соответственно. Не магические сто, но уже нормальный результат. График выше именно с реального замера, а не из презентации инвесторам, которых у меня всё равно нет.
Автоматических проверок в проекте уже больше четырёхсот. Они спасают от повторения старых ошибок, но всё равно не находят главное: где человеку скучно, что непонятно в первые минуты и в каком месте интерфейс хочется закрыть вместе с игрой. Для этого нужны живые игроки.
«Стриж» и топливо из марсианского воздуха
Корабль сначала был просто красивой точкой старта. Потом у него появилась рампа, грузовой отсек, места для десяти Робосом и кабина. Теперь он умеет летать между площадками, садиться, заправляться и перевозить технику. В кабине можно управлять тягой, следить за курсом, остатком топлива и стараться не проверять прочность посадочных опор слишком буквально.
Топливо не возникает по нажатию кнопки. Колония добывает воду, разделяет её, получает кислород, забирает углекислый газ из атмосферы, проводит реакцию Сабатье, затем сжижает компоненты и везёт криогенные баки на площадку. Это игровое упрощение большой технологической цепочки, но основание у неё реальное. Эксперимент MOXIE на марсоходе Perseverance уже показал получение кислорода из марсианской атмосферы. А карты неглубокого водяного льда NASA помогают понять, почему место базы вообще имеет значение.
Откуда в игре война, если задача вроде бы общая
Мне не хотелось придумывать злых инопланетян. Хватает обычной географии и разных интересов. Хороший выход льда к поверхности ограничен. Ровная площадка рядом с ресурсами ценна. Высота даёт обзор и радиогоризонт. Две колонии могут договориться, обменяться грузом и вместе строить сеть. А могут решить, что сосед слишком близко поставил бур.
Важное ограничение лора: машины воюют с машинами до массового прибытия людей. Это не история про отправку поселенцев в мясорубку. Конфликт здесь нужен как ещё одна проверка автономной инфраструктуры, логистики и способности колонии пережить потерю узла.
Сейчас есть отдельные сетевые матчи один на один через собственный релей-сервер. Это ещё не тот глобальный мир, который я задумал. Большая цель намного наглее: один живой Марс, тысячи колоний на одной сфере, торговля, кланы, войны, далёкие экспедиции и события, которые происходят без загрузки отдельной «карты». Клиенту при этом нельзя отправлять состояние всей планеты каждую секунду, поэтому мир должен делиться на области интереса: близкое приходит часто и подробно, дальнее редко и грубо.
Получится ли довести это в одиночку именно до такого масштаба, честный ответ: не знаю. Но архитектуру стараюсь строить так, чтобы потом не выяснилось, что весь Марс на самом деле квадрат 4 на 4 километра с красивым небом.
Как всё это делается
Проект я веду один в свободное время, обычно после основной работы и по выходным. Это не подвиг и не попытка вызвать жалость, просто поэтому обновления иногда выходят рывками: неделю чинится одна скучная вещь, потом за вечер появляется заметная новая функция.
В работе я использую разные нейросети. Относиться к ним удобнее как к нескольким очень быстрым стажёрам. Один пишет заготовку, второй спорит с первым, третий с полной уверенностью предлагает снести несущую стену. Решать, проверять, собирать проект и отвечать за результат всё равно приходится мне. Особенно хорошо они помогают с тестами, разбором логов, рутинными вариантами кода и поиском места, где я сам уже третий час смотрю не в ту строку.
Модели игры, сервер, сайт, Android-сборка и Windows-версия живут в одном проекте. Дальше в списке Linux, macOS и iOS. Веб-версию тоже хочется попробовать, хотя ей придётся заметно ужать аппетит. Главное требование для всех вариантов: одна и та же симуляция и возможность играть вместе, а не пять похожих игр, которые разъехались по функциям.
Что я сверяю с реальными исследованиями
Не хочу делать из статьи список литературы с первой строки, но источники лучше показать. Вот несколько опорных материалов, от которых я отталкиваюсь:
NASA о самостоятельной навигации Perseverance. Из-за задержки связи марсоход не может ждать земного оператора перед каждым камнем.
Итоги эксперимента MOXIE по получению кислорода из атмосферы Марса.
Глобальная модель высот MOLA и HRSC и цветовая мозаика Viking.
На сайте есть отдельная страница о научной основе игры. Я не утверждаю, что каждая игровая цифра является проектом готовой марсианской миссии. Это всё-таки игра. Но если реальное ограничение делает механику интереснее, я лучше оставлю ограничение, чем заменю его голубым кристаллом.
Можно уже скачать. И мне правда нужны чужие глаза
Текущая версия лежит на официальной странице загрузки. Там есть Windows и Android. Обновлённые сборки также отправлены на проверку в Google Play и RuStore, поэтому в магазинах они появятся после прохождения модерации.
Сейчас я ищу не комплименты, а нормальную обратную связь. Если игра сломалась, напишите, где и что вы делали. Если всё работает, но через десять минут стало скучно, это не менее полезный отзыв. Если интерфейс заставил угадывать, куда нажимать, значит проблема в интерфейсе, а не в пользователе.
Особенно хочу спросить у Пикабу:
Понятно ли, что делать в первые двадцать минут?
Что здесь интереснее: строительство, логистика, прямое управление роботом, корабль или сетевой мир?
Какой механики колонии вам не хватает в первую очередь?
Где вы сами находите маленькие игры, о которых ещё никто не знает?
На каких площадках и в каких сообществах вообще стоит показывать такой проект?
Можно писать в комментариях или на support@robosoma.ru. Для сообщения об ошибке идеально приложить скриншот, версию системы и пару предложений о том, что происходило перед сбоем. Но даже «нажал сюда, всё исчезло» лучше молчания.
Сайт проекта: robosoma.ru
Скачать: robosoma.ru/skachat.html
Спасибо тем, кто дочитал. Если решите высадиться, напишите потом, удалось ли второй Робосоме вообще выйти из фабрики. Я слишком долго видел эту игру глазами человека, который знает каждую гайку, и мне очень нужны глаза людей, которые ничего ей не должны.
Текст написан от лица разработчика по документации и текущему состоянию проекта. Перед публикацией я прогнал его через нейросеть, чтобы вычистить ошибки и сделать длинные места понятнее. Все решения, факты и финальная редактура проверены мной.










