MushRog

一个等队友的广场

2026年10月12日 mecanicaarquitetura

机器翻译,尚未审校。

登录和战斗之间,现在有了一个地方。这是一座小城镇,中间是广场和喷泉,四周有四栋建筑,北边有一道传送门,通向 Salamandra 的房间。你带着自己的队伍进城,看看附近有谁,聊几句,然后一起进房间。回来的时候,从同一道门出来。

为什么做

在设计文档里,城镇一直是游戏的社交中心,延续 Ragnarok 的精神:在这里组队、展示装备、聊天。它同时也是第 1 阶段最严格的网络测试。一个房间里只有四个人,而一座城镇里可能有几百人,不可能把每个人的位置都发给所有人。

怎么实现的

地图被划分成和一屏大小相同的格子。每个玩家只会收到周围格子里、距离不到 560 像素的人的信息。想让一个人从视野里消失,他必须走出 720 像素以外;两个数字之间留出这段差距,是为了避免有人在屏幕边缘一闪一闪。服务器只在你附近有变化时才发送位置;如果你周围的人都没动,每秒只会收到一个包,仅用来确认连接还活着。每个玩家的名字、职业和外观只在你第一次看到他时发送一次,之后只发位置和朝向。

我们用一百个玩家在城镇里随机走动做了测量,每个 tick 不到三毫秒,预算是五十毫秒。

本地聊天会发给你能看到的人,并以气泡的形式显示在头顶。前面加上 “/g”,就会发给所有在线的人。限制是每五秒五条消息,超过就要等待。建筑有碰撞,你会贴着墙滑过去,而不是被卡住。目前它们只是写着名字的彩色方块(铁匠、商店、仓库、酒馆),还都打不开。

自动测试现在会走完一整圈:两个 bot 进入城镇,互相看见,分别发送本地和全局消息,绕过喷泉走到传送门,进入房间,战斗,再回到城镇。

下一步

一个可以刷怪的房间、宝箱钥匙和个人掉落。之后再用大量 bot 来看看城镇里真有一百个人是什么样子。

变更

  • 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.

← 返回开发日志