image

Продолжение истории о хоббийной разработке игры о масштабной симуляции кораблей в космоопере.

Что сделано за эти три года


То что сейчас есть, наконец-то можно назвать MVP.

Самые важные механизмы есть и работают.

  • Симулятор боев. Проводит бои.
  • Симулятор галактики. В нем живут корабли.
  • Визуализатор боев. Показывает как прошли бои.
  • Статистика. Показывает успешность кораблей.
  • Конструктор кораблей. Здесь игрок делает корабли.
  • Конструктор модулей для кораблей. Здесь создаются новые модули для кораблей.
  • Генератор случайных кораблей. Создает случайные корабли и мутирует существующие корабли.

Симулятор боев


Самая сложная часть, потребовала наибольших усилий. Требования были повторяемость, логи, и главная скорость. Сейчас она работает так.

Динамический шаг по времени. Каждый тик имеет свою дельта тайм, подобранный так, чтобы что-то произошло. Нет циклов «ничего не произошло».

Статические координаты. Меняется только расстояние между кораблями, у каждого корабля своя система координат, которая залита в бетон.

Дистанция боя устанавливается таким образом, чтобы у более быстрой команды, дамаг гарантированно был.

Всё это позволила проводить 10-100 боев в секунду на поток. Многопоточности внутри симулятора боев нет, но этого и не нужно. Сам симулятор вызываем в несколько потоков.
Каждая активность логируется, но только если стоит флаг вести полные логи. По умолчанию, этот флаг не стоит. Записывается только сид боя и начальный состав кораблей. Если игрок хочет посмотреть как прошел бой, бой переигрывается с полными логами, а потом показывается в визуализаторе на основе логов.

Повторяемость боев. Сначала хотелось иметь полную детерминированность, где всё на целых числах без плавающей точки, но потом отказался. Достаточно хорошо, если рандом будет только от одного сида. На одном и том же процессоре, всегда все идет одинаково. Теоретически. По крайней мере, на глаз не заметили ни разу.

Симулятор галактики


Больше матчмейкер чем галактика. Корабли переходят от точки к точке, собирая ресурс и если сталкиваются с другим кораблем, сражаются до смерти. Нет государств, нет развития галактики, никаких флотов, каждый сам за себя. В общем заглушка.

Но даже так получилось очень интересно. Неожиданно выяснилось что самая главная характеристика корабля, это стоимость. Именно стоимость определяет экологическую нишу корабля. Если взять успешный корабль и докинуть ему пушек, то результат очень часто обескураживает, т.к корабль выпадает из своей ниши и вымирает.



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

Визуализатор боев


Неожиданно сложная задача, показать бой с переменным шагом по времени, стрельбу на дистанцию в десятки км, почему этот корабль может уклониться, а этот же корабль не может уклониться в другом бою. Результат пока неудовлетворителен.



Статистика


Графики, показывающие текущее количество кораблей в галактике, неожиданно залипательны. Полностью воспроизвелась залипательность наблюдения за хаосом, в попытках понять как оно работает и предсказать что будет дальше.



Конструктор кораблей


Работает как и во многих других играх со строительством.



Конструктор модулей для кораблей


Скорее девтул, чем часть игры. Без знания внутренностей, вряд ли получится использовать. Еще созданные новые модули не появляются в уже запущенных играх, необходимо создать новую игру.



Генератор случайных кораблей


Работает довольно просто, случайно выбирается пушки, двигатели. Потом к ним добавляем потребное количество генераторов и накопителей энергии +-небольшая случайность. Потом происходит расстановка модулей, «Задача упаковки» подмножество NP полных задач… Решили последовательным перебором координат. Берется модуль, который пытаемся втиснуть на каждое место начиная от 0,0.

Генетический алгоритм получился неожиданно просто. Создается массив случайных чисел, «геном». Дальше, при создании случайного корабля, вместо обращения к ГСЧ, обращаемся к геному. При мутации, меняем геном и пересоздаем на новом геноме. Минус этой схемы, корабли игрока не мутируют.

Геймплейные проблемы


Можно ли в это играть сейчас. Можно. Но… Новичку трудно понять как начать. UI неинтуитивная и туториала нет. А сделать туториал который за ручку ведет игрока по всему важному, займет много времени и сил. А потом всё изменится и понадобится делать новый туториал.

Сейчас нет прогрессии в игре. Начальный набор модулей остается неизменным. Её хватает на полчаса-два часа игры. Надо постепенное усложнение механик и открытие новых модулей добавить.

Масштаб игры. Сейчас галактика имеет фиксированный размер. Это не дает ощущение большого мира. Для ощущения масштаба, надо с чем-то сравнивать. Сейчас решение видится как увеличение размера галактики по ходу игры. Или онлайн с особо большой галактикой на сотню игроков, который открывается после синглплеерной компании.

Слишком много кораблей, они потеряли индивидуальность. Уменьшение галактики, уменьшение скорости, дать игроку собственное государство в стиле 4Х игр(цива, стелларис, моо). Это увеличит роль отдельных кораблей и флотов, что положительно скажется на вовлеченность в происходящее. Возможно стоит сделать двухуровневую систему, повседневный уровень с торговцами и пиратами. И уровень крупных флотов и уникальных суперкораблей, включающийся при войнах и других ЧС.

Камень-ножницы-бумага. При длительных симуляциях выявилась довольно неприятная ситуация. Появляется корабль (камень). Его истребляет корабль (бумага). Его истребляет корабль (ножницы). Его истребляет корабль (камень). Удачность дизайна не имеет значения. Хороший камень истребляет ножницы так же успешно как и отличный камень, между ними нет разницы. Купировали проблему сохранением всех кораблей которые успешно размножились и постоянным их респавном. Другое возможное решение это уменьшение связности карты, множество малосвязанных регионов в которых доминируют разные виды судов.

Отсутствие зрелищности. Симуляции проводятся за кулисами, до тысячи боев в секунду. Масштаб происходящего пиу-пиу незаметен.

Отсутствие четких целей игры. У игрока сейчас нет, явно поставленной цели сделать лучший корабль. Решение видится в элементах тайкуна и 4Х. Что-то вроде заказов на корабли, доходы от удачных кораблей, необходимость зарабатывать деньги для расширения верфи и тп. Одновременно с этим в галактике происходит стандартная 4Х активность между NPC империями. При определенных действиях игрока, можно получить свое государство, что даст контроль над бюджетом. Подконтрольное государство гарантированно покупает у вас корабли, по вашей цене и без волокиты с тендером.

Сюжет. Её нет. Но это космоопера, тут нужен сюжет. Есть идея показать жизнь человека, инженера в судостроительной компании (делаешь корабли за зарплату и премии) -> владельца судостроительной компании (делаешь корабли и продаешь) -> варлорда темных веков (делаешь корабли из того что получилось добыть путем грабежа и salvage) -> царя небольшого государства (делаешь корабли для своего флота и на продажу)-> императора галактики(делаешь корабли для похода в другую галактику или для борьбы со вторжением из другой галактики). И еще опциональная роль ценного раба, если сумел прославиться как корабел, но попался в плен(делаешь корабли для хозяина, возможно с маленьким несущественным изъяном).

Графика. Решили что плохая графика хуже чем отсутствие графики. Всё строго функционально. Но люди любят глазами, разноцветные кубики не возбудят желания играть в это. То ли дело огромные пушки, делающие пиу-пиу.

Хотя с течением времени, я стал замечать что-то притягательное в эстетике разноцветных кубиков…

Звук. Её нет.

Что можно изменить


Смена сеттинга на микробиологию. Корабли в галактике слишком тупые и похожи на бактерии. Так пусть будет микробиология! Создаем микроба, настраиваем ему гомеостаз, поведение при разных триггерах, сколько рибосом делать, сколько хлоропластов, делать транспортную сеть или обойдется чисто диффузией, условие перехода в цисту, набор пищеварительных ферментов, жгутики или реснички для движения, и тп. И отправляем жить в дикий мир. Можно на Марс. Или под ободок унитаза.

Выкинуть всю самодостаточность, переделать под мод в Стелларис.

Хроники разработки


Несколькими годами ранее. Я придумываю игру о кораблестроении, где не будет скучного микроменеджмента, где будут массивная симуляция жизни кораблей в жестокой голактеке.
Зима 2018-19. Я залипаю на видео с кибербиологией и ловлю видения о игре с массивной симуляцией жизни. Кажется, что сделать такое про кораблики в космосе будет несложно…
Весна 2019. Я продолжаю ловить видения и рассказываю друзьям об этом.

Лето 2019. Вдруг друг соглашается поработать над такой игрой. Думаем что мвп займет три-четыре месяца вечернего кода.

Осень 2019. Выпускаю статью на Хабре о идее и видениях этой игры. Люди положительно воспринимают все это, получаем +мораль.

Зима 2019-20. Что-то появилось, во что можно играть. Если знаешь внутреннее устройство.
Лето 2020. Выпускаю статью на Хабре. Есть страшнейшие скриншоты и ссылка на неиграбельную версию. Люди негативно воспринимают все это, получаем -мораль.

Осень 2020. Продолжаем кодить по вечерам. Код симулятора боев, являвшийся спагетти монстром с самого начала, выходит из под контроля. Решаем полностью переписать с 0.
Весна 2021. Перерыв. Отпуска и все такое…

Лето 2021. Возвращаемся к вечерним посиделкам. Кажется что mvp готова. Надо только доделать пару штучек.

Осень 2021. Это успех? Тестовые субъекты залипают на графики + мораль.
Зима 2021. Ленивый кодинг и полировка сделанного.

Кажется что работали ну очень долго. Когда подсчитал сколько конкретно часов проработали, вышло ~1000 человеко-часов непосредственно работы + еще столько же на обдумывание в разное время. Удивился.

Что дальше?


По геймплею, сейчас четка видна развилка, в какую сторону делать игру.

  1. В сторону симуляции, дальнейшая оптимизация симуляторов, огромная и медленная карта для симуляции, много данных. Продолжительные симуляции по несколько суток, для точного выявления лучшего корабля. Более сложная игра, на более хардкорную аудиторию.
  2. В сторону сюжета, меньшая карта, больше элементов игры вне симуляции, небольшая и быстрая карта для симуляции, меньше данных. Симуляции идут пока игрок играет, меньшая сложность в создании успешного корабля. Менее сложная игра, на более казуальную аудиторию.

По разработке. Еще год работы, и появится тепло, надежность, другие виды оружия, правила в конструкторе… Но это уже работа за пределами прототипа. Самые важные концепты есть и работают. К тому же, есть четкое ощущение, что текущая работа как хобби по вечерам исчерпала себя. Слишком многое надо сделать, а два друга по вечерам за 0$, уже как-то неочень работают.

Ссылки

  • Игра на itch.io, бесплатна
  • Дискорд канал нашей команды
  • Комикс от Jeka-cblp, использованный на КДПВ
  • Первая(2019) статья на Хабре
  • Вторая(2020) статья на Хабре

Комментарии (8)


  1. NemoVors
    08.02.2022 15:29

    Интересный концепт, люблю читать такое. Но не раскрыто как корабли появляются. Просто в рандомном месте? Или только при старте симуляции?

    В голосовалке про хардкор/казуал воздержался. На самом деле проголосовал бы за третий вариант, где это все находится между. Что-то должно быть хардкорным - это основа игры. Многие другие штуки можно оказуалить.


    1. dfgwer Автор
      08.02.2022 15:33

      Просто в рандомном месте. Сейчас галактика слишком примитивна чтобы это как-то влияла.
      Когда в галактике появятся биомы и государства, это начнет иметь значение. А пока что, рандом.


  1. MUTbKA98
    08.02.2022 15:54

    У меня вопрос - почему в данном или подобных жанрах корабль - это ведро с болтами компонентами? Когда-то, очень давно, бывало и иначе - была кое-какая структура, когда важны были сектора обстрела, к примеру, или нечто подобное - но потом все пропало, причем массово?


    1. dfgwer Автор
      08.02.2022 16:13

      Массово в каком смысле? Не припомню много игр где сектора обстрела не имеют значения, разве что FTL.
      У нас сектора обстрела не имеют значения потому что бой идет в 1D пространстве, есть расстояние до противника и все на этом. В FTL 0D пространство боя, в Space Engineers и Children of Dead Earth полное 3D где надо следить за секторами. Но в космосе нет проблем с вращением, так что в этих играх, сами игроки нарезают сектора так, чтобы всё смотрела в одну сторону и защищено было только с этой стороны.


      1. MUTbKA98
        08.02.2022 17:54

        Ну GalCiv, Endless Space, Stellaris - все такие. В то же время когда-то случалось и иначе, например, MOO 2, если я правильно помню.Была еще Sword of The Stars, тоже очень давно, там частично было что-то из этого.

        Children of Dead Earth стоит особняком, потому что она единственная, где слово космос понимают правильно, а не как какой-то внутренний космос своего создателя.


    1. ClearAirTurbulence
      08.02.2022 16:27

      Сложно имплементировать.

      Можно, конечно, сказать "Давайте сделаем форму примерно как у Tachi с выдвигающимися PDC", но как это все обсчитывать AI, и как в это играть человеку?

      Вот пример разбора пары боестолкновений в expanse (видео англ), где все более-менее реалистично (насколько это может быть реалистично в sci-fi). Как это перенести в игру? ИМХО, овчинка не стоит выделки. С компонентами-то (если их действительно много, как, например, в классической Ascendancy) и то вагон времени потеряешь, пытаясь найти оптимальные комбинации, и разработать тактику применения.

      Это может иметь смысл в каком-нибудь хардкорном космическом milsim'е, в который играть можно только в 3D, и для полноценной игры нужно строить свой кокпит :)


      1. MUTbKA98
        08.02.2022 17:57

        Ну не знаю, насчет "не стоит выделки". Да, это непросто, но должен же быть какой-то прогресс в жанре?

        Можно сравнить с морскими стратегиями, чем-то близко это к Ultimate Admiral: Dreadnoughts. И оказывается, что все это интересно - не просто тупо набить тушку компонентами, а осмысленно. Неужели на это нет спроса?


        1. ClearAirTurbulence
          08.02.2022 18:11

          Вероятно, со временем и развитием технологий к этому и придет, как шутеры постепенно двигатются к большему реализму - от простой ходьбы к возможности прыгать, приседать, ползать, лазить, заглядывать за угол.

          Сейчас для желанной вами функциональности нужно слишком много ресурсов, которые вряд ли будут транслироваться в соизмеримое затратам усилий улучшение игрового процесса.