Dev Watercolors 是暴雪开发团队的博客. 主要发布一些内部开发运作情况和深层次游戏设计取舍上的背景和思考.
P.S. 自翻, 有疏漏请指出(尤其是编程相关词汇), 共勉
大家好. 魔兽世界经典怀旧服正在进行有条不紊地开发. 我们很高兴能分享我们开发时面临的一些挑战和解决方案. 正如我们在上次暴雪嘉年华里提到过的, 恢复经典旧世的过程并不简单. 我们需要花费很多精力和时间去做好, 而这一点很重要 这其中涵盖了无数的游戏版本、数据以及代码;以及仔细审视过去多年我们所做的改变. 请放心: 怀旧服团队正在努力实现这个目标. 现在的开发阶段使我们可以展示部分开发成果.
经典旧世: 第一个原型
我们面临的第一个, 也是最重要的决定就是要选择哪一个游戏版本. 正如你们许多人所指出的, 经典旧世延续的两年, 而这其中又充满了变化. 一些核心游戏内容, 例如战场, 是在后续的补丁里引入的. 职业的设计也随时间的推移而改动.
经过深思熟虑后, 我们决定以1.12版 - 战鼓震天为基准,因为这个版本代表了最完整的经典旧世体验.
一旦有了出发点, 我们开始评估源代码,以及我们能从中呈现的内容, 而其中又包括从备份中恢复原始开发数据库. 在把各个关键部分整合后, 我们在内部重建了一个本地的1.12版原型. 在这个原型里, 团队可以建立人物并进行简单的做任务、练级以及死亡. 处于测试目的, 显然我们已经进行了很多次.
在我们的初次测试中, 游戏暴露了一些(预期中的)问题: 游戏会时不时的崩溃、无法识别现在的显卡, 不兼容现在的登陆系统. 同时, 这个版本也不支持现在所用的安全和反作弊系统. 自然,我们有很多工作才能使怀旧服达到暴雪游戏的质量标准并提供玩家所期待的游戏体验.
前进的道路: 第二个原型
说到游戏工程, 魔兽世界是一个十分依赖于数据驱动的游戏. 即游戏代码十分的灵活, 而其展现形式却由数据库里的信息内容所控制. 譬如任务、怪物、物品道具和互动规则都是由设计师在数据里定义的.
所以我们扪心自问, 如果用现在的代码改进游戏的所有后端并处理1.12版的原始游戏数据, 我们是否依旧可以提供最真实怀旧体验? 虽然看上去有违直觉, 本质上是要继承所有的经典旧世系统, 如技能等级、旧的任务和地形以及天赋等等, 而后来新加入的内容, 如幻化和天赋将不存在, 因为它们并不存在于原始数据中. 经过数周的研发、实验和原型开发, 我们认为我们有信心在不牺牲过去13年里数以百万小时的后端开发的前提下, 提供经典的游戏世界内容以及玩法.
我们最初的努力帮助我们确立了我们想提供的游戏体验. 第二个原型指明了我们如何达到目标. 基于现代的代码构筑 包括所有的安全和稳定性的改动 意味着, 团队可以更加专注于实现真实的经典游戏体验. 在开发中的任何与原版1.12的差异都可以系统的归类和修正, 同时又不会影响系统的安全和稳定.
深入
那么我们要怎样以现代的游戏工程技术来重现纯粹的经典游戏体验? 让我们以对构建魔兽世界的各种类型数据分类展开这个话题:
表格数据: 这类信息几乎总以数字来表达. 怪物的生命值、道具提供的力量值以及怪物刷新地点和时间都是数据库中众多数值数据的几个典型例子. 我们也可以存储和执行各个数据片段的关联.
文件数据: 这类数据通常是一些非常密集的数据, 例如3D模型、皮肤纹理、动画和地形等. 我们的交互界面是由XML和Lua构建而成. 许多艺术文件都不能用商业软件直接提取的. 因为这些原始艺术文件被转换成更易于游戏的读取和处理的格式.
Lua脚本: 一些由设计师编写的基于Lua脚本的游戏内容使得它们易于服务器端的逻辑自定义处理, 而不需要十分深入的工程知识.
游戏工程的改变
我们面临的一个挑战, 就是所有经典旧世的数据是以游戏发布时的原始格式存储的, 而这种格式已经有了很大的变化. 这块内容需要大量的工作使经典旧世的游戏数据兼容于现在的客户端.
例如, 法术在最初只能在目标上执行3个动作. 在表格中, 法术是这样的:
如你所见, 表格中有很多冗余的空位. 在魔兽世界的一生中, 我们对改进并规范了大部分的数据. 如今, 同样的数据将以如下格式分离
在这种格式下, 浪费的数据空间少得多. 法术也不再局限于三种特效. 在调用数据库中任一数据之前, 所有的数据格式都需要转制进新的格式. 这种转制不限于法术, 几乎游戏中的任何系统(包括装备道具、怪物、玩家人物、刷新、AI等等)的数据格式多年来都有所改变.
展望未来
我们的终极目标是以一个更优化高效稳定的平台重现经典旧世的游戏体验, 并同时减少延迟和稳定性问题. 其他现代化的改进将包括当前反作弊挂机检测、客户服务和战网集成以及不影响核心游戏体验的一些便利改动.
我们期待未来的挑战, 共享您对经典旧世的热忱; 每一段代码数据转换都让怀旧服更接近于为您 以及我们 提供原汁原味的经典旧世体验. 感谢您加入我们的旅程.