没什么需要攻克的技术。自打minecraft提供服务器脚本之后,任何有服务器的人都可以在自己的服务器上部署一个客制化的minecraft。
(补充一句,就算不是像素或体素游戏,根据 projectile 的角度和威力计算弹坑和环境破坏也早就在七八年前的RTS游戏中实现了)
仔细查看一下服务器的目录,能看到世界的所有数据都储存在world文件夹内,大量的二进制和纯文本文件保存了这个世界每一个chunk,每一个block,每一个entity的状态和信息。
技术上没有难度,那为什么很多网游不采用这种设计呢?
很多网游虽然是多人在线游戏,但也有完整的叙事环节和剧情。倘若允许玩家对游戏世界造成影响,那么可能导致发布任务的NPC被杀死,NPC和老婆的房子被玩家霸占,甚至整个村子被玩家拆平。陈星汉第一次为《风之旅人》添加了两名玩家的物理互动后,他发现玩家们不会利用这个机制互相帮助(例如把伙伴拉上墙壁),而是利用这个机制将队友推下悬崖,推到仙人掌上,想方设法“杀死”对方。陈星汉为此一度抑郁,暂停开发。赋予玩家以破坏的能力是很多游戏最基础的机制,但玩家倾向于在不该破坏的时候行使自己的权利。简而言之,为了防止其他玩家的游戏体验被破坏,设计师只能禁止一个多人在线游戏中玩家对世界的公有的、永久的、不可逆的破坏能力。
回头看minecraft也是一样的,没有哪个服务器的管理者不会在多人游戏中设置规则的,例如不允许玩家使用控制台,不允许破坏某些砖块,犯了罪之后会被传送至“黑曜石监狱”等等,这些都是为了防止在一个主题为“破坏”的游戏中,玩家恣意使用自己的权利破坏他人的体验。
目前比较常见的做法是“异步”的,什么意思呢?就是假设玩家A与NPC甲交流后,甲让玩家A跟自己走到下一张地图。而未触发此段剧情的其他玩家在与服务器同步数据时,仍然能看到NPC甲站在原处。但玩家A与服务器同步数据后,NPC甲已经被移动到了下一张地图,在当前地图上也许能看到玩家BCDEF在原来npc甲所在的位置围着一团空气说话。在这个例子中,游戏世界为每一个玩家创建了一个游戏的数据副本。玩家依然可以发生交互,但玩家对游戏世界造成的影响只停留在自己的数据副本中,并在需要时与服务器同步。