Коротко о крупных изменениях. Полный список правок конкретной сборки находится в истории версий.
Марс перестал повторяться
Игрок прислал три кадра с разных высот и написал: «на поверхности проявляются повторные пятна, полосы. Выглядит неестественно. Словно одну текстуру скопировали и размножили». И поставил условие: время загрузки увеличивать можно, частоту кадров ронять нельзя.
Причин нашлось три, и они друг с другом не связаны.
Первая — в формуле случайных чисел, из которой рождается микрорельеф. Она была симметрична: поменяйте местами две координаты, и получите ровно то же самое число. Измерили на двухстах тысячах точек — совпадение было полным у всех до единой. Поверхность из-за этого зеркалилась сама в себе и рассыпалась одинаковыми «запятыми»: их игрок и обвёл на кадре с километровой высоты.
Вторая — и главная. Слой цвета брал маленькую картинку шума размером 256 на 256 точек, в которой было всего три пятна, и накатывал её на планету каждые 192 метра. То есть по всему Марсу ездили одни и те же три кляксы по 64 метра — буквально то, что игрок и описал словами «скопировали и размножили». Теперь картинка вчетверо больше, накатывается вчетверо реже, пятен в ней сорок восемь вместо трёх, и поверх них лежат ещё три более мелких слоя. А главное — координата перед выборкой сама смещается другим шумом: от этого края пятен перестали повторять клетки решётки и стали похожи на разводы пыли.
Третья — до поверхности не доходил номер мира. Рельеф от него зависел, а цвет и микрорельеф нет, и грунт выглядел одинаково во всех партиях. Теперь по номеру мира заново запекается вся картинка шума.
Отдельная история — цена. Первым делом мы поставили честный целочисленный генератор: он лечил не только симметрию, но и грубость шкалы — вместо 64 различимых уровней стало четыре миллиарда. И стоил тринадцать процентов кадра. Условие игрока это нарушало, поэтому вариант отправился в мусор, а на его место встала формула той же длины, которая убирает видимый глазу дефект и не трогает бюджет. Три парных замера подряд показали, что новая сборка ни разу не медленнее старой. Выпечка шума на загрузке подорожала с 92 до 334 миллисекунд — ровно тот размен, который игрок разрешил.
Заодно переехала развёрнутая панель диагностики: раньше она уходила вниз, к игровым кнопкам, и хвосты строк терялись. Теперь она стоит на одной высоте со счётчиками и правее их колонки, а если на узком экране туда не помещается — честно возвращается вниз, но целиком.
Число носильщиков теперь работает в обе стороны
Игрок описал странность: «поставил семь носильщиков — носят семеро. Ставлю шесть — всё равно носят семь. На увеличение переключатель работает, на уменьшение нет. С обоими зданиями». Проверка подтвердила это числом: панель экстрактора переводили с четырёх на ноль, и через минуту здание по-прежнему обслуживали четыре робосомы.
Причин оказалось три, и все разные. У экстрактора сокращения смены не было написано вовсе — код умел только добирать руки. У цеха сокращение было, но требовало руку пустую, без задачи и вне шлюза: работающий носильщик таким не бывает никогда, и цикл выходил на первом же шаге. А третья причина — набор старых оговорок «ноль, но один носильщик всё равно нужен, чтобы вывезти накопленное»: таких мест в коде нашлось три, и каждое по отдельности возвращало робосому к выключенному зданию.
Теперь число в панели — это штат, и он соблюдается в обе стороны. Лишняя рука не бросает груз посреди дороги: она доводит рейс до конца, сдаёт его и в тот же миг выходит из смены. Ноль в панели равносилен выключенному зданию — все робосомы освобождаются и сами берутся за другие дела, а содержимое контейнера спокойно ждёт, пока вы снова назначите смену.
По дороге нашёлся давний дефект, из-за которого освобождённая робосома оставалась стоять в голове очереди у ворот склада — уже без роли и без причины двигаться, — и все за ней ждали вечно. Замер: две робосомы зависли с восемьюдесятью реголита на руках при полном контейнере и пустом складе.
Ракета стала зданием
Игрок прислал четыре сохранения и описал давнюю беду: вражеская робосома, проходя сквозь ракету, застревала у одной из её ног и начинала дёргаться туда-сюда без конца. Эту ошибку чинили пять раз за четыре дня в августе — и каждый раз она возвращалась.
Разбор показал, почему. Твёрдость ракеты держалась не на одном правиле, а на наборе исключений: корпус препятствием не считался, шесть опор жили отдельным списком, полотно трапа — цепочкой кружков, и поверх всего этого выдавались пропуска. Каждая правка чинила одно исключение и не трогала остальные. Главным виновником оказался пропуск: робосоме, сходящей с корабля, на восемь секунд отключались все препятствия в круге почти тридцати метров — вместе с опорами. Когда пропуск истекал, а робот стоял внутри ноги, его начинало выдавливать наружу по два метра за такт; он возвращался к цели и входил снова.
Теперь ракета — обычное здание по обходу: одно круглое тело по самой дальней точке, будь то пятак опоры или конец спущенного трапа. Его видят разом и обход, и поле маршрутов, и проверка видимости, поэтому спорить друг с другом им больше нечем. Пропуск снимает ровно тело своего корабля, а опоры остаются на месте — сквозь ногу не пройти ни своим, ни чужим. Проверка на присланном сохранении: старая сборка дала 28 срабатываний счётчика дёрганья за три минуты, новая — ни одного.
Заодно исправлены две связанные вещи. Трап больше не падает заново при каждой загрузке сохранения — его положение теперь хранится в файле, а старые сохранения игра понимает сама. И обход считается с трапом: сверху под него не заползти, а в виде от первого лица трап, наоборот, перестаёт быть препятствием — можно подойти, подняться и войти внутрь корабля.
Главный экран переверстан
Первый экран игры получил осмысленную композицию. Слева стоит панель: название игры, тонкая линейка и короткий рассказ о том, что это за игра — стратегия в реальном времени на поверхности Марса, где вы начинаете с одной машины и разворачиваете колонию по всей планете. Под рассказом три строки о главном: настоящий рельеф в масштабе один к одному, до тысячи робосом в бою, сетевая игра и вид от первого лица. Справа — меню.
Кнопки стали заметно крупнее: место, которое раньше занимала надпись во весь экран, отдано им. На экране 1920×1080 кнопка выросла со 99 до 137 точек, на широком мониторе 3440×1440 — со 132 до 184. Ни название, ни меню больше не прижимаются к краю экрана: у каждого блока свои поля, и содержимое стоит по центру своего блока.
Вёрстка проверена не на глаз: на телефоне в ландшафте, на квадратном планшете 4:3, на обычном мониторе и на сверхшироком, на двух языках и в двух раскладках — под палец и под мышь. Заодно нашлась и починена редкая ошибка округления, из-за которой последняя строка описания на части разрешений молча заменялась многоточием.
Название игры выросло во весь экран
На телефоне название игры в главном меню оказалось неприлично мелким: узкая полоска сверху, которую и не разглядеть. Теперь слово занимает весь экран и стоит позади кнопок — объёмное, с выдавленными гранями и мягким кантом, и оно медленно плавает, будто висит в пространстве. Точка схода обходит круг примерно за сорок секунд, поэтому буквы едва заметно поворачиваются.
Чтобы меню при этом осталось читаемым, надпись и подписи кнопок разведены по светлоте: слово живёт в тёмно-синей половине шкалы, текст на кнопках — почти белый, а корпус кнопки стал плотным. Смотреть на заставку приятно, а нажимать по-прежнему удобно. В русской версии слово пишется РОБОСОМА, в английской — ROBOSOMA.
Заодно исправлено то, что игрок заметил сразу: выход в меню прямо из игры показывал старую страницу — кнопки в два столбца, и подпись «СОХРАНИТЬ ИГРУ» вылезала за рамку соседней. Меню паузы собрано по тем же правилам, что и главное: один столбец, общая ширина, честные поля у текста.
Меню собрано в один столбец
Игрок прислал кадр: в главном меню подпись «ЗАГРУЗИТЬ ИГРУ» не помещалась в рамку кнопки и выезжала за её край. Причина оказалась простой и обидной — размер шрифта подписи считался только от высоты кнопки и с её шириной не сверялся вовсе. Короткие слова помещались случайно, длинное — нет.
Меню переделано: шесть кнопок теперь стоят одним столбцом, у всех общая ширина и ровный шаг, а у текста внутри появились честные поля с обеих сторон. Если строка длинная, уменьшается шрифт — за рамку текст не выходит больше никогда, и это теперь проверяется автоматически на экранах от 4:3 до сверхшироких и на телефонной раскладке под палец.
Название игры поднялось к верхней рамке и наконец переводится: в русской версии оно пишется РОБОСОМА, в английской остаётся ROBOSOMA.
Робосомы перестали слоняться без дела
Игроки замечали странность: в панели экстрактора выбрано семь носильщиков, а реголит выносят пятеро — двое стоят рядом и ждут команды. Причина оказалась в том, что число из панели работало не как штат здания, а как потолок сиюминутной потребности: пока в контейнере лежал один-два рейса, лишние руки не вербовались вовсе. Теперь это настоящая смена — сколько указано, столько робосом и закреплено, а освободившиеся сами занимают пустые места. То же исправлено и у цеха.
Второй баг было видно глазом: робосома уходила за пределы колонии, останавливалась, возвращалась к базе и снова уходила — и так по кругу. За неё действительно спорили два разных алгоритма, назначая и отменяя работу в одном и том же такте. Теперь у каждой робосомы один хозяин: тот, кто дал ей работу, держит её несколько секунд, и посторонняя автоматика не может её перехватить. Приказ игрока по-прежнему главнее всего.
Заодно колония перестала разбегаться по чужим залежам: робосомы работают у себя, а к дальней залежи их отправляет игрок. Все три правила действуют одинаково и для колоний ИИ-противника. Версия 0.7.43 доступна для Windows и Android.
Настройки переделаны для телефона
Все кнопки главного меню и настроек теперь одного удобного для пальца размера. Перегруженная страница экрана разделена на КАРТУ, КАДР и ЭФФЕКТЫ, а политика и поддержка вынесены в отдельную вкладку ИНФО.
Русское и английское руководства получили новые кадры из настоящей релизной сборки. Версия 0.7.42 с этим интерфейсом опубликована для Windows и Android.
Сайт заговорил по-английски
У каждой публичной страницы появилась английская пара, ручной переключатель RU/EN и одинаковая навигация. При первом заходе сайт смотрит на язык браузера, а сделанный вручную выбор запоминается на устройстве.
Сайт получил новый маршрут для новичка
Главная стала короче, появилось отдельное начало на пять шагов, новости, вопросы и ответы, известные проблемы и понятная форма сообщения об ошибке. Научные факты теперь явно отделены от игровой модели и лора.
В игре появился английский язык
Переведены меню, подсказки, информационные панели, ошибки строительства и надписи над объектами. Игра определяет язык устройства при первом запуске, а ручной переключатель остаётся в настройках.
Это не только перевод слов. Длинные английские строки пришлось проверять на настоящих экранах, чтобы текст не упирался в рамки и не превращался в знаки вопроса.
Robosoma вышла в Google Play и RuStore
Приложение опубликовано в Google Play и RuStore. Google сначала отклонил игру из-за подозрения на выдачу себя за другой проект. Пришлось подтвердить домен, авторство названия и происхождение графики.
После переписки игру одобрили с названием Robosoma и исходной иконкой. Игра остаётся бесплатной, без рекламы и покупок.