Представьте: Блог им. hitzu: MMOизация

Недавнее событие, организованное двумя летсплеерами, вызвало в сообществе Факторио некоторое шевеление. Девелоперы сами поучаствовали в эвенте, чтобы своими глазами посмотреть на фактический стресс-тест. Буквально сразу же они включили в новый апдейт несколько изменений тех недочётов, что обнаружились только при большом скоплении людей. Если говорить числами, то зафиксированный максимум одновременных подключений составлял около 400 человек, играбельно было не более чем при сотне, но причиной этого, по словам kovarex — ведущего разработчика, была только недостаточная мощность сервера, а точнее — CPU. Так можно ли превратить кооперативную игру, заточенную под одного-пять друзей, в полноценную ММО, как осторожно предположил kovarex в последнем девблоге?

Структура мира
Из технических изменений игре прежде всего потребуется изменить структуру генерируемого мира. В Факторио карта создается с помощью сравнительно простого процедурного кода, основанного на шуме Перлина и симплекс. С его помощью нельзя сгенерировать объекты, которые для своего существования требуют информации от соседних областей, зато можно генерировать карту, сектор за сектором, фактически бесконечно. Таким образом размер сейва напрямую зависит от открытой карты (открытой — значит сгенерированной). Это допустимо для однопользовательской или кооперативной игры, где игроки сами контролируют этот параметр. Но в многопользовательской игре со свободным входом кучность в центре подталкивает игроков искать свой угол, где они могли бы развернуться. Это хорошо заметно в видео, где очень быстро было построено несколько независимых аутпостов. Кроме того, это потенциальная уязвимость для грифинга — открывать большие территории и тем самым нагружать не только сервер, но и все клиенты, ведь все расчёты ведутся на каждом клиенте, а сервер занимается только передачей тех изменений, что вносят игроки.

Из-за особенностей геймплея нельзя выгружать из памяти открытые секторы, так как там могут быть структуры, которые должны обсчитываться вне зависимости от того, есть там кто-то или нет: копалки должны добывать руду, конвейеры должны перемещать вещи, генераторы должны производить ток, а разведанные базы с жуками должны этих жуков выращивать. Так что в Факторио падающее дерево всё-таки трещит, даже если никто его не слышит.

Представьте: MMOизация

Выгрузка из памяти неиспользованных секторов может немного снизить нагрузку, но не избавит от грифинга, ведь можно поставить одинокую солнечную панель где-то в лесу, и сектор не сможет выгрузиться. Необходимо ввести «параллельные миры», соединяющиеся друг с другом в ключевых точках, но не требующие «постоянного присмотра». И такая технология в игре уже есть, она называется «Слои». Разработчиками в ванилле она не используется, и была сделана на будущее, зато активно используется моддерами. Самый популярный мод с её использованием — Factorissimo.

Геймплейно это можно представить так: вам дают отдельный регион на планете, который для всех остальных будет представлять из себя Чёрный ящик. Он будет обсчитываться только на сервере и тех клиентах, которые локально в нём присутствуют, и через сервер обмениваться входящими и выходящими данными с соседними регионами.

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

Читы
Как я уже заметил, абсолютно все расчёты ведутся на клиенте. Поэтому для предотвращения читерства, неизбежного в ММО, нужны очень сильные инструменты. Моих знаний недостаточно для того, чтобы предложить какое-либо решение, но этот вопрос нужно обязательно поднимать, если вы собираетесь делать ММО-игру.

Темп игры
Это одно из самых важных геймплейных изменений, которое должно быть введено в игру. Все рецепты должны стать на порядок дороже, скорость добычи ископаемых уменьшена, ручной труд должен стать намного более бесполезным. Частично можно взять пример с Marathon мода. Ещё неплохо бы ввести качественные изменения в строительство структур, чтобы большинство из них не ставилось мгновенно. Это даст больше значимости постройкам, продлит общее время игры (да, это дешёвый приём, но он работает) а также позволит видеть воочию, кто чем занят с помощью проигрываемой анимации. Взаимодействие click-n-hold должно быть заменено на простой click, чтобы дать возможность печатать в чат.

Представьте: Блог им. hitzu: MMOизация

Социализация
Кроме обычных и привычных нам по множеству ММО списка присутствующих в игре людей и друзей нужны отдельные чаты для разных групп. В игре уже существуют концепция сил («forces» или по-простому «фракции, кланы, корпы, гильдии»), которые могут быть враждебны и нейтральны друг к другу, с независимым развитием технологий и независимыми «военными» структурами типа автоматических ворот и турелей. А также концепция «сквадов» (squads или группы). Их нужно развить и добавить удобный интерфейс, чтоб пользоваться ими.

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

Долгосрочные цели и самоподдерживающийся геймплей
На основе взаимодействия разных сил можно развить очень крутой долгосрочный геймплей с политикой, договорами, союзами, войнами и так далее. Основная цель, которую ставит сейчас игра — запустить ракету со спутником в космос — выполняется за промежуток от 2 до 20 часов одним человеком. Это не только быстро, но и не имеет никакого смысла в ММО. Нужна более глобальная цель, например построить большую производственную империю, стать единственным на планете производственником, стать самым лучшим производственником, объединить под своим крылом множество независимых производственников и так далее. Цель должна быть одновременно:

  • труднодостижимой — месяцы, а может и годы работы, но не считанные дни
  • достаточно размытой — нечёткие критерии, которые можно исправлять и корректировать по ходу дела
  • требующей объединения множества людей — а иначе зачем нам делать ММО?
  • эксклюзивной — не бывает двух самых лучших

Людям нужен смысл чтобы объединяться, но также нужен повод для возникновения конфликтов. Конфликты возникают в условиях нехватки ресурсов, союзы нужны в условиях жёсткой среды и для объединения сил над крупным проектом, где одной недостаточно.



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

В текущей игре игроку нужно тратить часть ресурсов на производство специальных «научных пакетов», которые затем тратятся в лабораториях при прокачке технологий. Этот подход ориентирован на синглплеер и намеренно позволяет игроку выучить всё. В ММО игре важна глубокая специализация, которая вызывает зависимость друг в друге, а значит, в социальных связях, которые двигают самую интересную часть игры — политику. Поэтому его нужно полностью заменить на такой, чтоб не позволить корпорациям выучить все технологии, плюс дать возможность углублять специализацию перками и улучшениями. Мои поверхностные наброски включают в себя «патенты» добывающиеся большими ресурсными вложениями, опытом и достижениями, а также их покупкой на рынке, если конечно кто-то решит их продать.

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

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

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

Представьте: Блог им. hitzu: MMOизация

Война
Война должна быть последним, а не первым способом решения всех конфликтов (хотя кого я обманываю, некоторые всегда найдут повод докопаться). В любом случае, я бы не хотел декларировать на геймплейном уровне войну как главенствующий геймлей, потому что считаю, что в этой игре достаточно механик для поддержания интереса. Это не Ева на земле. Однако ПВЕ-война предусмотрена геймплеем — агрессивная фауна имеет сильную тенденцию к экспансии. Тут либо постоянно пассивно обороняться, тратя ресурсы и организуя линии снабжения, либо нанимать по контракту отряды охотников и отгонять врагов на расстояние. Тех же самых охотников можно нанимать для войны с другой корпорацией, если не удаётся договориться миром.

Каждая фабрика слишком уязвима для любого вида саботажа, где один отсутствующий элемент может остановить всё производство, а если хозяина ещё нет онлайн, то пиши пропало. Это просто очень лёгкое средство испортить геймплей себе и другим, что не раз обсуждалось в комментариях на ММОзговеде. Поэтому саботаж в игре должен отсутствовать, а каждое нападение во имя геймплея и здоровой личной жизни может быть совершено только во время, удобное для защищающегося. Игры по КТА — не наш путь. Ганк как явление отсутствует — на чужой территории вне времени осады просто нельзя напасть первым, а ничейных территорий не существует.

Два варианта сценария игры
1) В игре существует некая нейтральная могущественная сила, назовём её Империей. В начале игры игрок попадает именно туда, в условный имперский промышленный город, в условный туториал. Ему империя дала льготный кредит на основание и развитие своей фабрики — кусочка земли, где он должен отработать кредит, построив завод по производству условных деталей. Ему дают определённый поток ресурсов на вход и он должен получить прибыль, продавая готовый продукт на экспорт. Туториал может иметь несколько стадий сложности и из него фактически можно не выходить, так как площадка, которую игроку дали, не инстанцирована и расположена на реальной карте города, но представляет из себя вышеописанный чёрный ящик, а потоки экспорта и импорта вещей идут через настоящий имперский рынок, где происходят сделки между игроками. Правда, всё это не совсем выгодно, ведь размер этого участка сильно ограничен, а сделки происходят по имперским условиям с высокими налогами. Поэтому нужно как можно скорее арендовать землю далеко от Империи, где нет таких жёстких лимитов и развивать производство самому. Либо…

2) Либо присоединиться к одной из существующих корпораций и встать под их патронаж. Это можно сделать даже не проходя туториал, но тогда корпорация должна будет выплатить кредит сама. Обучение в этом случае также ложится на плечи самой корпорации.

Представьте: Блог им. hitzu: MMOизация

Уход из игры
Уход из игры рядовых участников не сильно скажется на производительности целой фабрики, но если уйдёт глава корпорации, то владение должно например через 30 дней перейти в руки одного из участников. Это решается голосованием. Если так случается, что уходят все участники корпорации, то фабрика выставляется Империей на аукцион по минимальной рыночной стоимости. Аукцион длится не меньше одной недели и продолжается до последней ставки плюс 3 часа. Прирост ставок не может быть меньше 10% ставки. Если через неделю никто не выразил желания купить фабрику, она удаляется.

Итог
Для того, чтобы стать не просто кооперативной игрой, где возможен большой мультиплеер, а настоящей ММО, которая не закончится через два дня, игре нужно очень сильно измениться, а количество добавленного контента и социальных механик должно увеличиться многократно. И это будет уже совсем другая игра. Игра, которую я жду©.

Представьте: Блог им. hitzu: MMOизация

Спасибо что не уснули от долго чтения. :)

21 комментарий

avatar
С серверной частью может помочь серия ANNO, разделением мира на острова. Также добавляется портовая инфраструктура, в портовых терминалах можно настраивать покупку и продажу товаров, добавляется пласт морского геймплея.
Так как Факторио — игра про конвейерное производство, то и потребление должно быть конвеерным, боеприпасы первыми приходят в голову(неосторожному жуку). Если использовать НФ концепцию «мир смерти» с окружающей средой, целенаправленно изничтожающей человека, то боеприпасов понадобится много: патроны, напалм, гербициды, и прочее.
  • 0
avatar
Море добавит действительные зоны без владельца.
  • 0
avatar
Эм, это как, и что в этом плохого?
  • 0
avatar
Ганк :)
  • 0
avatar
Ну дык, есть куча способов противодействия. От банального запрета, до…
  • 0
avatar
Я старался исходить из того, что уже есть в игре и что можно расширить. Но корабли и лодки просят давно, да.
  • 0
avatar
Чем плохо свободное ПвП, если оно не занимает существенную часть игры?
  • 0
avatar
Свободное ПвП = ганк в 99% случаев. В рамках Факторио это ещё и грифинг.
  • 0
avatar
Свободное ПвП на примере с Евой говорит, что помимо ганка там очень много интересных сражений. А здесь предлагается сделать это в рамках моря, где нет грифинга.
  • 0
avatar
Я повторяю. Я исходил из того, что уже есть в игре, что нужно лишь расширить и обогатить. Добавлял только самое необходимое, без чего ММО ну никак не получится, например социализации. Без моря вот получится. Если что, оставить морской контент на перспективу, потому что он влечёт за собой работу как на ещё одну игру: нужны водные мобы, какая-никакая дополнительная графика чтоб вода смотрелась получше, точки интереса и особые виды ресурсов на воде, корабли и лодки, и прочая прочая прочая.
  • 0
avatar
Не думаю что на море нужны ресурсы и мобы(по крайней мере сразу), нужны портовая инфраструктура и корабли. Не думаю что объем работ будет больше чем с, упомянутым в заметке, расширением и усложнением производственных цепочек.
  • 0
avatar
Не думаю что на море нужны ресурсы и мобы(по крайней мере сразу)
Ответом на это будут стоны «Ой, на море скууучно и кроме ганка ничего неееееет! Почему вы нас заставляете этим занимааааааться?» и всё в таком духе.

Не думаю что объем работ будет больше чем с, упомянутым в заметке, расширением и усложнением производственных цепочек.
Он не будет больше, он просто добавится плюсом.
Комментарий отредактирован 2016-09-19 18:18:52 пользователем hitzu
  • 0
avatar
Мне кажется было бы не плохо добавить старение строений. Если точить под ММО, то все должно тратится как можно больше. Это так же продлит время достижения цели. Плюс как раз заброшенные строения будут со временем исчезать с карты сами.

На счет защиты думаю все просто, если общет идет на клиенте. А сервер выступает только маршрутизатором, то можно у группы игроков в одной локации сверять передаваемые параметры.
  • 0
avatar
Мне кажется было бы не плохо добавить старение строений.
Старение вынуждает игрока заходить в игру в том числе когда он не хочет. Тут нужен аккуратный подход. Потому что когда появляются дроны, то проблема старения и повреждения зданий просто исчезает — всё делают дроны, знай только снабжай их расходниками. Это ещё делит жизнь фабрики на два этапа с совершенно разными по своей структуре подходами к строительству и содержанию базы: «пре-дронный» с ручной постройкой/починкой и «пост-дронный» с автоматизированной починкой и постройкой. Это тоже надо балансировать.
  • 0
avatar
На счет защиты думаю все просто, если общет идет на клиенте. А сервер выступает только маршрутизатором, то можно у группы игроков в одной локации сверять передаваемые параметры.
Оно так и происходит. Как только выявляются разночтения, то случается рассинхронизация. Разработчики очень много внимания уделяют тому, чтобы её не происходило, это была одна из главных проблем в сетевой игре.
  • 0
avatar
hitzu, спасибо. Отличная заметка. Мне была особенно полезна часть про процедурную генерацию и недостаток шума Перлина.
  • +1
avatar
Это не недостаток, это особенность :)
Такой подход позволяет генерировать мир постепенно по мере надобности и фактически бесконечно (ограничение только в разрядности), а это никак нельзя отнести к недостаткам. :)
  • 0
avatar
Если игра хоть что-то считает на стороне клиента, и серверная часть этим расчетам верит, то как MMO это труп.
  • +1
avatar
Сетевой код вырос из Р2Р протокола, где каждый клиент обсчитывает все процессы и сверяется с другим каждым клиентом и если случаются разногласия то происходит рассинхронизация. Позже это было отброшено и теперь это полностью сервер-клиентская игра, но принцип обсчёта на сервере и клиенте остался. Вот тут можно подробнее почитать. www.factorio.com/blog/post/fff-147
  • 0
avatar
Боже упаси. P2P протоколам-то 10 лет от роду. ну может 15. MMO-игры — и те старше.

Или ты имеешь ввиду сетевой код именно в factorio?

Но не суть.

Нельзя ничего на стороне клиента считать. Совсем нельзя.
Даже не расчетным данным с клиента верить нельзя. Совсем нельзя.

Клиент передает серверу ровно сырые данные типа «я стою в этой точке и бъю по этому мобу»

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

И сервер считает все — ага что у тебя там в руке? как это ударит по мобу? какие там у моба ресисты? и т.д. и т.п.

Если хоть чему-то со стороны клиента верить — всё. «хаки» появятся мгновенно.

Как работает классика жанра «спид хак» во всех «доверчивых» MMO? — наивный сервер просто верит, данным от клиента «я теперь тут». Ха ха.

Это кстати реально сложно сделать по уму. Проверка и обсчеты взаимодействия массы персонажей с массой действий в одной точке — та еще тема.
  • +1
avatar
В этой игре просто невозможно отдать все вычисления серверу, слишком много данных пришлось бы передавать по каналам: положение каждого предмета на всех конвейерах, давление во всех трубах, состояние каждого ассемблера и завода, действия каждого манипулятора. При этом считать надо полностью всю карту, а не только то, что видно на экране. Игра строилась очень детерминистично, чтобы у каждого клиента всё было одинаково. Любые расхождения приводят к рассинхронизации и отключению клиентов. Так что с читами там сложновато наверное. Чтобы заспавнить предмет надо чтоб и сервер это сделал, иначе произойдёт рассинхрон. Дамаг считается от типа пушки у тебя в руках, и ты не можешь поменять её параметры — они записаны в json файле, который должен быть у каждого клиента и сервера одинаковым. Как осуществляется перепещение я точно не знаю, но скорость каждого игрока тоже детерминирована экипировкой, и на заре 0.11 было много проблем с детерминистичностью перемещения — довольно много рассинхрона было именно из-за этого. То есть на мой непрофессиональный взгляд игра очень хорошо защищена от читинга. Могу ошибаться, конечно.
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.