Daily MaverickLIVING NIGHTMARE: QwaQwa residents battle 10-year water, electricity outage ‘nightmare’ESPN DeportesSuiza excluye a Xhaka por cartilla de vacunación falsaוואלהשר האוצר האמריקני: חברות התעופה האיראניות עלולות להיות מנותקות מפעילות בינלאומיתThe Jerusalem PostKurdish Peshmerga completes its long process of unification - explainerESPNSaints LT Banks to undergo ankle surgery, out indefinitelyColliderThe Stars of Netflix's 'Gilmore Girls' Replacement Officially Break Silence Over Shock CancellationХабрМечтает ли трехмерный андроид о четырехмерных овцах?CNN بالعربيةمعركة قانونية جديدة.. شبكات إخبارية تتحدى قرار ترامب بسحب تصاريحها الصحفية من البيت الأبيضANSA'La guerra in Ucraina deve finire', il monito di TrumpTechCrunchOpenAI forms math advisory group as its AI resolves more than 100 open problemsEuronewsPearly Kings and Queens bring London’s Cockney tradition to lifeRFI 中文特朗普要买白俄罗斯钾肥, 立陶宛要继续制裁白俄罗斯
The Daily Newsstand · Free, Always
Monday, September 21, 2026

Сколько обходится содержание одного игрока — создание своей 2D MMO RPG, ч. 22

Translate

Пустой мир ничего не стоит. Я поднимаю два десятка карт, прохожу их из конца в конец — и сервер этого почти не замечает: карта без людей и существ держит своё место в памяти и дремлет. Стоить мир начинает в тот момент, когда в нём кто-то живёт.

В прошлой части мир Тулимшара сшили в бесшовный, и я обещал его заселить. Заселение в этот раз я показал не текстом, а на экране — серией уроков, ссылки ниже. А главный вопрос этой части — во что живой мир обходится серверу и сколько из этого приходится на одного игрока.

Коротко о проекте

С 2022 года я в одиночку веду дневник разработки: делаю авторитарный сервер для 2D MMO RPG — игр с открытым бесшовным миром, где игроки и существа живут в реальном времени. Сервер на PHP и Symfony, клиент на Unity, правду о мире считает только сервер. С 17-й части в работе участвует ИИ: механику он собирает по словесному описанию, а что в ней считать верным, решаю я. Показываю всё на The Mana World — открытой MMO, которую я переношу на платформу.

Последние части складываются в одну линию: у платформы появились инструменты совместной работы — соавторы с доступом к нужным разделам, каталог, из которого игра набирается готовыми кусками: мирами, анимациями, наборами картинок, библиотеками механик. Она устроена так, чтобы свою игру на ней собирал не только я; каталог подробно разобран в 19-й части. Эта часть — про то, что происходит с миром после того, как его собрали.

Заселение — на экране

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

Все выпуски — в плейлисте «🛠 Панель управления: игра без кода».

Заселение карты — от пустого раздела до мобов, которые по ней ходят:

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

Ролики канала — записи платформы: номер выпуска, разделы, о которых он, число сцен, даты сборки и выкладки. Состояние подсказывает, что с роликом делать дальше

Ролики канала — записи платформы: номер выпуска, разделы, о которых он, число сцен, даты сборки и выкладки. Состояние подсказывает, что с роликом делать дальше

Страница одного выпуска: карточка на YouTube с обложкой, голос и звучание озвучки, собранное видео с описанием, разделы, о которых ролик, и его сцены

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

Во что обходится живой мир

Теперь то, ради чего всё это считалось. Во что обойдётся мир, видно ещё до того, как игру кто-то установил, — прямо на её карточке в каталоге. Уроки снимаются на отдельной учебной игре, а считаю я на большом мире — The Mana World:

Карточка игры в каталоге: слева открыта команда «выстрел заклинанием» с ценой срабатывания формулами, справа блок «Во что обойдётся сервер» — онлайн и плотность существ выбираются списками, память, ядра и карты пересчитываются сразу

Читается блок без всякой математики. Карта работает, только пока на ней кто-то есть: пришёл игрок — сервер её поднимает. На снимке выбрано три сотни игроков — «спокойная улица» — и нормальная плотность существ: поднимется 21 карта из 26, уйдёт около гигабайта памяти и три с небольшим ядра. Живых — тех, кого сервер обсчитывает каждый такт, — 743: сами игроки и разбуженные рядом с ними существа. Сменил онлайн или плотность — числа пересчитались сразу.

Отсюда и ответ на вопрос из заголовка. Делим итог на число игроков — выходит около 3 МБ памяти и сотая доля ядра на одного, вместе с существами, которых он будит вокруг себя. Цифра не постоянная: при другом онлайне и другой плотности существ она другая, расход растёт не по прямой — потому калькулятор и считает по ступеням, а не одной ставкой.

Откуда берутся эти числа — вот это и есть главное. Страница складывает их из того, что уже лежит в игре:

  • сколько людей пришло. Онлайн задаётся не числом, а плотностью — сколько игроков приходится на проходимую площадь мира, от «как в MMO в среднем» до «людной площади»;

  • насколько мир заселён. Вторая ось — сколько существ приходится на площадь, от почти пустой местности до постоянных столкновений;

  • какие карты и кто на них стоит. Площадь каждой карты, с кем она соседствует, каких существ на ней расставили — по их видам считается цена механик. Поднятый сосед добавляет работы: изменения уходят и ему;

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

  • сколько стоит сама механика. У каждой команды игры цена записана формулой — как дорожает срабатывание от обстановки: поиск целей вокруг существа в толпе стоит больше, чем на пустой поляне. Её видно на карточке команды в том же каталоге. Формулу ставит тот, кто ведёт механику; у меня её выводит ИИ, разбирая сложность алгоритма в коде команды. Так же оценён и один такт основы игры — насколько он тяжелеет, когда живых и соседей вокруг каждого становится больше. У механики без оценки платформа берёт своё умолчание и пишет «цена не оценена», а такт без оценки не считается вовсе — карта честно помечается неоценённой.

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

У установленной игры тот же расчёт идёт подробнее — на странице её ресурсов в панели управления, с разбивкой по серверам, на которых крутятся её карты: мир раскладывается по нескольким машинам, и как это устроено, я разбирал в 10-й части.

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

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

К прошлой части: у схемы переходов появилась проверка прохода

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

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

Схема мира и проверка прохода: жёлтая рамка — в карте есть места, куда игроку не попасть, красная — карта отрезана целиком. Справа все 26 таких мест, у порта в одном из них заперто 15 существ

В моём мире таких мест 26, и на схеме их видно сразу — по рамкам карт. Мелочь в одну-две клетки у краёв тут тоже есть, но большинство — куски в десятки и сотни клеток. Две карты отрезаны целиком: канализация и летающий остров. А в отрезанном куске у порта стоят пятнадцать существ.

Самое полезное в этой таблице — последний столбец. Отрезанный кусок земли сам по себе бывает задумкой. Вопрос к нему появляется, когда в нём кто-то стоит: пятнадцать существ, которых игрок никогда не встретит, — это ошибка расстановки, найденная до того, как её нашёл игрок.

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

Чего ИИ не умеет

Инструменты из этой части писал ИИ, ролики собирает он же. Чего он не делает сам:

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

  • не отличает задумку от ошибки. Таблица честно перечисляет все 26 отрезанных мест, а какие из них задуманы, решаю я;

  • не придумывает правила подачи. Что считать результатом выпуска и как строится плейлист, задал я — по этим правилам он планирует и снимает сам.

Что дальше

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

Графика мира пока та, что пришла из The Mana World. Ремастер тайлов — отдельная работа, до которой я дойду позже.

И ещё одно направление, которое я веду параллельно. По-настоящему хорошие игры, я уверен, сделают те, кто придёт на платформу со своим знанием геймдизайна: моя задача — чтобы у них были для этого инструменты. А чтобы показать инструменты в деле, я переношу на платформу старые MMO RPG с открытым кодом и контентом — на их материале снимаются и уроки. The Mana World — первая из них.

Вопрос к вам

Кто запускал свой игровой сервер: как вы заранее прикидывали, сколько железа уйдёт на мир, — считали, мерили на стенде или узнавали по факту после запуска?

История

  1. Платформа для 2D MMO вместо очередного игрового сервера

  2. Почему одного процесса не хватит: асинхронность и масштаб

  3. Почему игровому серверу нужен WebSocket, а не HTTP

  4. Redis как память игрового мира: сколько игроков и NPC он держит

  5. Lua или JavaScript в песочнице: чей код быстрее на сервере

  6. Выбор технологий и ECS: почему архитектура быстрее языка

  7. Тайловые карты: импорт локаций из Tiled одной строкой

  8. Клиент на Unity для авторитарного сервера: что он обязан уметь

  9. Игровые механики без обновления клиента: события на сервере

  10. Бесшовный мир в 2D MMO: локации на разных машинах

  11. Почему персонаж телепортируется: пинг, интерполяция и экстраполяция

  12. Очереди без RabbitMQ: обмен между процессами в памяти

  13. Event-driven и JSON-RPC: почему игровой сервер не собран из сервисов

  14. Не размер пакета: где на самом деле узкое место сетевого сервера

  15. Почему сервер собран на процессах, а не на потоках

  16. MVP авторитарного сервера для 2D MMO: три года и что получилось

  17. Внедряю ИИ: механики из одного описания

  18. Конвейер контента для MMO: импорт анимации, экипировка и обновление игры без патчей

  19. Каталог ассетов и git для MMO: как командой вести игру в облаке

  20. Тесты для кода, который пишет ИИ: контракты вместо ассертов

  21. ИИ-картограф: как карты сшиваются в бесшовный мир

  22. Сколько обходится содержание одного игрока

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.