Площадь, где можно ждать группу
Между логином и боем теперь есть место. Это небольшой город: площадь с фонтаном посередине, четыре здания вокруг и портал на севере, который ведёт в комнату Salamandra. Ты приходишь с командой, смотришь, кто рядом, болтаешь и идёшь в комнату вместе со всеми. На обратном пути выходишь через тот же портал.
Зачем
В дизайн-документе город всегда был социальным сердцем игры, в духе Ragnarok: там собирают группу, показывают экипировку и общаются. Заодно это был самый серьёзный сетевой тест первой фазы. В комнате четыре человека, а в городе их могут быть сотни, и рассылать позицию каждого каждому нельзя.
Как это работает
Карта поделена на клетки размером с экран. Каждый игрок получает только тех, кто в соседних клетках и ближе 560 пикселей. Чтобы перестать видеть кого-то, нужно отойти дальше 720 пикселей; разница между двумя числами не даёт людям мигать на краю экрана. Сервер шлёт позицию, только если рядом что-то изменилось, а если все вокруг стоят на месте, приходит один пакет в секунду, просто чтобы подтвердить, что соединение живо. Имя, класс и внешность каждого игрока приходят один раз, когда ты видишь его впервые. Дальше идут только позиция и направление.
Мы замерили со ста игроками, случайно бродящими по городу: вышло меньше трёх миллисекунд на tick при бюджете в пятьдесят.
Локальный чат уходит тем, кого ты видишь, и появляется в облачке над головой. С “/g” в начале сообщение уходит всем, кто в сети. Лимит пять сообщений за пять секунд, потом ждать. У зданий есть коллизия, и ты скользишь вдоль стены, а не упираешься в неё. Пока это цветные блоки с подписью (кузнец, лавка, склад, таверна), и ни одно пока не открывается.
Автоматический тест теперь проходит весь круг: два бота приходят в город, видят друг друга, обмениваются сообщениями в локальном и глобальном чате, огибают фонтан до портала, заходят в комнату, дерутся и возвращаются в город.
Следующий шаг
Комната с мобами для фарма, ключи от сундуков и личный лут. Потом много ботов, чтобы увидеть город с сотней настоящих людей.
Изменения
- feat(city): hub city with proximity replication, chat and portal
CityState (movement, building collision with sliding, portals) and InterestGrid (screen-sized cells, enter 560 px / leave 720 px). Server sends static player info once per viewer and positions only when something nearby changed (1 s keepalive), at 10 Hz. Local chat goes to visible players with speech bubbles; /g goes to everyone; rate limited. Portal moves the player into the boss room; leaving returns to the portal exit. Client gets CityView with camera, ChatUI, and a leave button in the room. 100 players cost under 3 ms per city tick. The network test now walks the full loop: city, chat, portal, room, back.