绳子的另一端

为了测试一场八人对局,我们在同一台电脑上打开了八个游戏窗口,每个窗口都由 AI 代替一名玩家操作。战斗进行到中途,我们关掉其中一个,然后再重新打开。
要走到这一步,整章才算数。
先来一对一
拔河也要有个人站在绳子另一端才痛快,所以线上功能来得很早。一名玩家通过 Steam 创建房间,邀请一位朋友,两人各自选择阵营和天赋,对局就开始了。对局结束后,再战会带着同样的选择,把两人重新带回房间,并已经准备就绪。
有趣的地方在于,不需要通过网络传输什么。一场战斗可以有每边 90 个部队,每个部队都有生命值、目标、路线和冷却。把这些全部传输过去,既沉重又脆弱。所以我们什么都不传。
书信下棋
想象两个人隔着信件下象棋。每人在家里都有一张棋盘,寄来寄去的只有每一步棋:“马到 f3”。只要双方都不在没有写下来的情况下挪动棋子,两张棋盘就会始终一模一样。
Castle Arena 的线上模式正是这样运作的:两台电脑运行同样的模拟,只交换玩家的指令:这里建造,那里升级,那边释放救援。你的一条指令,大约在 200 毫秒后会在两台机器上同时执行。
这种比较在一个地方会失效,而那恰恰是最难的地方。象棋没有随机性,Castle Arena 却有:暴击、闪避、抽签。如果每台电脑各自掷骰子,棋盘会在第一次攻击后就分道扬镳。所以,所有的随机性都来自同一个随机数序列,它的种子在两端完全相同。任何规则如果从其他地方抽取随机数,自动测试就会失败。
只要起点相同,指令相同,两台机器就必须走到同一场战斗,直到每一点生命值都一样。
大约每秒一次,两台电脑会比对整场战斗的一个“指纹”。如果两者不一致,对局就会暂停,而不是任由两个不同的游戏各自走下去。
免费得到的东西
这种线上方式带来了一些额外的好处。既然同样的指令会产生同样的战斗,一份录像就小得可怜:只需对局设置、种子和指令列表。你可以以 0.5 倍到 8 倍速观看,并跳到任意时刻。
游戏进行时,一个“观察员”会记录每条路线每秒的热度,并标记出重大时刻:救援、建筑倒塌、城堡陷落。对局结束后,精彩时刻会把这些片段剪成一段 30 到 60 秒的合集,城堡会在慢镜头中倒下。结算界面里的图表也可以点击:点一下某个点,录像就会在那一刻打开。这是回答“等等,我们是什么时候丢掉北路的?”最快的办法。
有人掉线时
网络会断开,游戏会卡住,电脑会重启。在一对一对决中,如果对手消失了,对局会暂停,并显示 2:30 的重连倒计时。掉线的一方只需重新打开游戏,选择返回对局:留在对局中的电脑会发来一份完整的战斗快照,两人从那里继续。
更多人站在每一边
模式也随之而来。一个模式就是一份配方:指定阵营,可以是选定的、随机抽取的、镜像的,或者轮流选择;可以是 N 局胜制,并可叠加 48 项选项,从“没有救援”到金币从天而降,落在你的领地上。每份配方都会生成一段简短的代码,比如 -rr3-nt-cc,可以复制后发给朋友。
接下来是 2×2 和 3×3 的组队对局。每名玩家都有自己的工人、黄金和救援。城堡、领地和场上的部队属于整个队伍。然后有一个看似显而易见的问题:3×3 的城堡,是否应该耐打三倍?
我们测量了一下。
| 形式 | 对局时长 |
|---|---|
| 1×1 | 10.1 分钟 |
| 2×2 | 12.1 分钟 |
| 3×3 | 13.0 分钟 |
把城堡的生命值乘以玩家人数,对局时长只增加了大约 0.3 分钟。对局的胜负取决于防线何时崩溃,而不是城堡的生命值。因此,城堡在每种形式中都是一样的,变化的是每一方的部队上限:90、135 和 180。
八个人,同一场战斗
起初,组队线上对局只有你和一位朋友,每人带着 AI 盟友。后来,每个位置都可以由一个真人占据,从 2×2 到 4×4 皆是如此。
两个人时,两台电脑可以直接交换指令。八个人时,如果每个人都与其他人全部相连,就会有 28 条连接,每条都可能以自己的方式出错。所以组队线上采用星形结构:每位来宾只与房主通信,由房主再把指令转发给其他人。
而在 4×4 中掉线,不能像一对一那样处理。如果为了等一个人而暂停对局,其他六个人就太不公平了。
| 有人掉线时 | 1×1 | 4×4 |
|---|---|---|
| 对局 | 暂停并等待 | 继续进行 |
| 掉线者的位置 | 空着 | AI 立即接管,在所有电脑的同一回合生效 |
| 掉线者回来时 | 收到快照,然后继续 | 收到快照,追上其他人,然后请求回到原来的位置 |
八个窗口教会我们的事
无画面的模拟测试已经覆盖了所有形式的掉线与回归,所有情况都收敛到同一场战斗。但真正打开游戏,2×2 用四个窗口,4×4 用八个窗口,暴露出了四个单靠测试抓不到的问题:
- 永远无法开始的房间。 所有人加入时都使用了默认阵营,而一支队伍不能重复阵营。现在,就绪按钮会立即给出警告。
- 放弃加入的来宾。 八个窗口同时加载时,房主回应很慢,而加入请求只发送了一次。现在它会持续尝试,最长可达 20 秒。
- 所有人都在等一个人。 在第一版中,快照一发出,席位就立即交还给回归的玩家,而其他七个人要等待大约 30 秒才能加载完场景。这就是 AI 一直占着席位,直到玩家追上进度的原因。
- 开局时最慢的电脑。 任何用超过 8 秒才完成对局设置的玩家,都会在第一个回合之前把席位输给 AI。现在,仍在加载的玩家可以获得 45 秒。
在我们关掉又重新打开的那个窗口里,对局继续进行。最后,八个人的战斗结果完全一致。
还没有做到的
如果房主掉线且没有回来,没有人会接替他的位置掌管房间,他的队伍就会输掉。而且,即便是两名盟友之间,指令也始终经由房主转发。这两点我们都已记录在案。
八个人打一场战斗,就会有八种不同的打法。而这正是阵营的用武之地。
— 团队





