拼盘感是从哪里漏出来的
先说一个很多玩家都遇到过的场景:你在雪山上滑完一段粉雪坡,打开地图,点一下海岸,黑屏加载,出现在沙滩上换好冲浪板;冲完两道浪,再点一下城市,又是一次黑屏,滑板已经在脚下。每一段单独拿出来都不差,但玩了几个小时就会意识到,这不是一个世界,而是五个关卡共用了一个菜单。
拼盘感通常不是画面造成的,而是几个具体的断点:地图上项目之间没有地理关系;NPC只在自己的项目区里出现;赛事只考自己那一项;玩家在滑雪里练出的东西带不到BMX;一个区域发生了什么,其他区域完全不知道。《Steep》(2016)把雪山做成了开放世界,《Riders Republic》(2021)把骑行、滑雪等多个项目放进同一张大地图,这两次尝试都证明了“多运动同图”是成立的,也让后来者看清了剩下的难题:地图大了以后,怎么让各项目彼此有关。
在im体育里,我们把这个问题拆成五层来处理,顺序就是本文的结构:地图、NPC、赛事、运动本身,最后是把前面四层绑在一起的世界状态。
地图:先回答“这块地为什么能玩这项运动”
我们的世界草图里有雪山、峡谷、山区公路、海岸、港口城市和一座城郊滑板公园,另外还有攀岩岩壁和几条自行车越野路线。画这张图时最先定下的规则是:每一种运动出现的位置,都要能用地理和人的活动解释清楚。
- 雪场在海拔高、背阴的北坡,因为那里积雪维持得久;南坡春季会先融化,裸露出碎石路,正好成为BMX和山地车的季节性路线。
- 冲浪点集中在朝向外海涌浪来向的一段海岸,有礁石底的地方形成稳定破浪点,港湾内侧则风平浪静,只适合划桨和新手练习。
- 城市的滑板Spot不靠随机撒点,而是跟着台阶、广场、河堤、停车楼这些城市功能长出来;峡谷里的废弃水渠是天然的碗池。
这条规则的收益是,地图上的过渡带本身变成了可玩的内容。从雪线往下骑到海边,玩家会穿过融雪泥地、林道、盘山公路、城郊坡道,每一段路面都对应不同的车感和速度。关于为什么不能用快速旅行把这些过渡全部跳过,我们在开放世界里的距离一文里有更细的讨论。这里只强调一点:如果两个项目区之间只有加载画面,那它们在玩家脑中永远是两个游戏。
设施合理性也在这一层解决。一个城市广场能不能办街头篮球赛,要看它有没有篮筐、地面是不是硬质、晚上有没有照明;一条山路能不能办速降,要看坡度、弯道密度和路面。我们给每个地点打上设施标签,后面的赛事生成只能在带标签的地点上发生,避免出现“海滩中央冒出一个跳台”这种凭空生成。
NPC:让运动员在项目之间流动
拼盘式设计里,滑雪NPC住在雪场,冲浪NPC住在海边,彼此不相往来。但现实中的极限运动圈子高度重叠:冬天滑雪的人夏天去冲浪,滑板少年长大后转去BMX,攀岩的人在休息日骑山地车。我们希望NPC的日程也跨项目流动。
以一个设计示例来说:NPC“阿岚”主项是单板滑雪,副项是冲浪。雪季她住在山脚小镇,每天上午训练公园道具,下午跑两趟野雪;四月雪线上移后,她搬到海岸,冲浪能力从一个比较低的水平开始,随着训练慢慢往上走。玩家冬天在雪山上和她比过一次坡面障碍技巧,夏天在海边又碰见她,她会记得那场比赛的结果,也记得玩家喜欢在最后一个跳台做大转体。
这背后需要NPC有持续记忆:比赛结果、对玩家风格的判断、宿敌关系、所属俱乐部、排名和历史。NPC也需要自己的训练计划、比赛日程、旅行和组队决定,而不是永远站在固定坐标等玩家触发对话。完整的NPC设计我们放在NPC运动员的职业生涯里展开,这里关注的是它对“同一个世界”的作用:当同一批人在不同项目间出现,玩家就会自然感到这些项目属于同一个社区。
NPC的强弱也要讲道理。一个在冲浪上刚起步的NPC,不应该因为玩家冲浪水平高就突然变强;她变强的途径是训练时长、选浪判断变好、失误减少,而不是系统偷偷提高她的板速。
赛事:一场比赛可以跨两个项目
项目之间真正的连接点常常是赛事。单项赛事当然要有,但开放世界最能体现“同一世界”的,是那些只有在这张地图上才办得起来的比赛。
- 雪线接力:从山顶单板滑降到雪线,换山地车沿泥地林道冲到山脚。这场比赛只能在春季雪线处于半山腰时出现,雪线太高赛段过短,太低林道仍是冰面。
- 港口双项:上午在防波堤外的破浪点比冲浪,下午在港口广场比滑板,两项分数按排名合并。它要求当天涌浪合格且不下雨,否则广场地面湿滑,滑板部分会延期。
- 峡谷越野:BMX穿越废弃水渠,终点是一面短攀岩墙,需要下车徒手爬上去按铃。
这些赛事都不是完全随机生成的,它们依赖地点设施、季节、天气和参赛人群。暴雪天不会出现户外篮球,大雾时不会在无照明的山路安排夜间速降。赛事生成的具体流程,包括怎样筛选地点、怎样邀请NPC,我们会在另一篇动态赛事的文章里单独写,这里先给出一张参数对照:
| 输入条件 | 影响什么 | 示例 |
|---|---|---|
| 季节与雪线高度 | 哪些跨项目赛段可以连接 | 雪线在半山腰时才生成雪线接力 |
| 当天涌浪与风向 | 冲浪赛是否开赛、赛区选在哪段海岸 | 向岸强风时改到背风的港湾外侧 |
| 地点设施标签 | 赛事能否在此举办 | 没有照明的广场不排夜场 |
| 玩家当前能力 | 赛事难度档位与对手阵容 | 新手看到的是社区赛而不是职业邀请赛 |
| NPC日程与伤病 | 谁能参赛 | 宿敌刚受伤,本周不会出现在报名表上 |
运动本身:每一项都要保留自己的物理
把项目放进同一个世界,最容易犯的错是为了统一而把手感做平。滑雪、冲浪、滑板、BMX的核心变量完全不同,统一的应该是世界和成长,不是物理。
滑雪要处理雪质、温度、冰面、抓地、能见度和风,同一条坡道夜间降温后局部结冰,第二天的路线和风险都会变。冲浪要处理浪高、浪向、破浪点、风、潮汐和海流,潮位一变,同一片礁石上的浪型就不一样。滑板和BMX要处理进入速度、起跳、扶手或道具、落地区和连招,玩家技术不同,能完成的路线也不同。攀岩则关心岩面湿度和体力分配。
我们的设计是让这些物理模型各自独立,但共享同一套环境输入。同一场雨,会让城市的滑板地面变滑、让山区林道变泥泞、让雪山高处变成湿重雪;同一股冷空气,会让雪面变硬、也会改变海岸的风向。玩家不需要知道背后的数据结构,他只会发现:今天一场天气变化,让三个项目同时出现了不同的状况,而它们的原因是同一个。
玩家成长:什么该共享,什么不该共享
成长系统是拼盘感的重灾区。如果每个项目各有一条独立等级,玩家就会把世界当成五个进度条来刷。反过来,如果全部合并成一个总等级,滑雪练到顶就能直接去参加职业冲浪赛,又会破坏每一项的技术门槛。
im体育的做法是把成长分成三类:
- 项目技术:各项独立,只能靠该项目的练习提升。滑雪的刃控制不会让你的冲浪起乘变好。
- 通用身体素质:平衡、体能、恢复速度,会在项目之间小幅共享。经常滑板的人第一次站上冲浪板时,平衡会比完全的新手好一点,但也只是一点。
- 声望与人脉:完全共享。你在雪山上赢过的NPC,会在海边把你介绍给冲浪俱乐部;你在城市滑板圈的名声,会让BMX赛事的组织者给你发邀请。
第三类是把项目连成世界的关键。声望让玩家在一个项目里的经历,变成在另一个项目里的机会,而不需要破坏各项的技术门槛。NPC的成长也遵循同一逻辑:他们在主项上进步得快,在副项上慢,职业声望随比赛结果上下波动,跨项目的名气则通过共同的俱乐部与赛事传播。
世界状态:把前面四层绑在一起
最后一层是世界状态,它决定了地图、NPC、赛事和运动之间能不能互相影响。可以用一个模拟的一周来说明它怎么运作:
周一,一股寒潮进入山区,夜间气温降低,雪场上半段出现冰面;周二,几位主项滑雪的NPC改练公园道具,避开冰面赛道,原定的野雪挑战赛延期;周三,寒潮带来的强风在海岸形成离岸风,浪面变得干净,冲浪俱乐部临时加了一场比赛,刚从雪山下来的阿岚报了名;周四,玩家在那场冲浪赛里输给了她,她的冲浪排名上升,这场比赛被写进她的历史,也被写进玩家和她的宿敌关系;周五,城市滑板公园因为连续晴天举办周末赛,报名名单里出现了阿岚的一位俱乐部队友,他听说了周四的比赛,主动来找玩家约一场。
这一周里没有一件事是写死的剧本,但每一件事都有前因。世界状态记录的就是这些前因:天气、雪况与海况、设施可用性、NPC的位置和状态、赛事结果、排名变化、人际关系。玩家离开一个区域后,那里的状态继续按粗粒度推进,回来时看到的是一个继续过了日子的地方。完整的世界设计思路可以在极限运动开放世界栏目中找到。
检验一个多运动世界的五个问题
我们在内部评审im体育AI开放世界的原型时,会用下面五个问题来判断拼盘感有没有减少:
- 从一个项目区走到另一个项目区,路上有没有可以玩的东西?
- 同一个NPC是否会在两个以上的项目里出现,并且记得和玩家的过往?
- 有没有至少一类赛事,离开这张地图就无法成立?
- 一次天气变化,是否同时在多个项目里产生了可感知且原因一致的后果?
- 玩家在一个项目里取得的成就,能不能在另一个项目里换来机会,而不是换来数值?
这五个问题没有一个是关于地图面积或项目数量的。多加一项运动很容易,难的是让新加的这一项和原有的四项发生关系。对im体育大模型来说,真正要学会的不是某一项运动怎么玩,而是这些运动怎样在同一片山海和城市里共同发生。