同一个房间里的两个人
MushRog 上线了。一个人通过菜单开房,最多三个人通过 IP 加入,所有人一起打同一只 Salamandra。有人放出 Sobrecarga 时,其他人能看到爆炸,屏幕角落里还会显示它的名字。
为什么做
第 1 阶段是为了回答一个问题:我们离线做的战斗模拟,能不能不改动就变成服务器权威?答案是可以。决定伤害、反应、切换和闪避的代码完全是同一份,只是调用它的对象变了。
怎么实现的
服务器以每秒 20 个 tick 运行模拟。玩家只发送意图(往那边走、用 skill 2、切换),服务器检查距离、冷却和法力,然后返回房间的状态和该 tick 的事件。客户端在线上什么都不模拟:它保存一份状态的镜像并绘制,在两个 tick 之间插值位置,免得画面卡住。
可以在同一个进程里开房并游玩,也可以启动一个无界面的服务器让其他人加入。菜单有三个选项:单人、开房、加入。
boss 的生命会随着人数增加:两人是 1.7 倍,三人是 2.4 倍,四人是 3 倍。胜利或失败几秒后,房间会自动重置。
为了测试,我们让两个无界面的 bot 进入服务器,走动、放出 Faísca,并确认彼此能看到对方。这个测试每次改动时都会和其他测试一起运行。
登录、创建角色和城镇还没有。目前每个人都以默认的法师加战士队伍进入。
下一步
登录和创建角色,让每个人带着自己的队伍进入。
变更
- feat(client,net): online rooms for up to 4 players
Menu with solo, host-and-play and join. Listen host plays as p1; the room resets a few seconds after win or wipe; boss HP scales with the number of players. Client mirrors server state, interpolates between snapshots, renders every team with name and HP, and animates casts from a new cast event. tools/net_test.sh runs a dedicated server with two headless bots. Version 0.0.2.