开发者日记:Lords of Discord 的开发历程 (#2)
加里宁格勒的公司 HeroCraft 继续与 App2Top 分享关于他们如何在失去著名品牌 Disciples 的许可证后,仍然致力于游戏 Lords of Discord(混乱之王)的故事。
正如我们在 上一篇文章 中所述,基于 Disciples 品牌的游戏开发始于五年前。游戏经过漫长的过程,终于在 App Store 中上线(现在已在 Google Play 上开放测试中)。本文将讨论该项目的软件组成部分。
引擎
为了在 iOS 和 Android 上开发游戏,我们选择了跨平台的 SDK Marmalade。作为图形引擎,我们采用了 Ogre 3D——它负责构建三维场景。
Lords of Discord 游戏中的 3D 场景示例
Lords of Discord 游戏中的 3D 场景示例
为什么选择这两个引擎,而不是说 Unity 呢?
首先,与 Unity 不同,Ogre 是开源的,这使得程序员可以自由发挥。我们在 Ogre 中扩展了对纹理压缩格式的支持,这提高了性能。
其次,Ogre 提供了底层功能:可以在所有阶段控制绘制过程——从摆放 3D 模型到处理输出的三角形,并编写顶点和片段着色器(顺便提一下,观察到在某些显卡上,着色器的表现怪异,甚至可能动摇物质主义的世界观)。
Ogre 拥有相当活跃的社区:许多开发者在使用它,论坛上也容易找到问题的答案。而且它是免费的。更重要的是,这一切发生在五年前。
游戏的服务器部分是在公司内部开发的:游戏使用与其他 HeroCraft 游戏相同的游戏服务器。
大量的时间花在为游戏开发资源编辑器上,而并非游戏本身。虽然最初考虑使用现有的某些 3D 编辑器,以便扩展其功能(例如 3D Max 或 Blender),但很快就发现其提供的灵活性不足。由于任务主要是专业性的,我们意识到自己编写编辑器将更加高效。
现在我们的自定义编辑器允许绘制关卡的地形,安置角色,设置动画,编辑高度图和可通过性地图。
Lords of Discord 编辑器的屏幕截图
Lords of Discord 编辑器的屏幕截图
Lords of Discord 编辑器的屏幕截图
在任何大型项目中,我们都会引入第三方库来补充缺失的功能:GUI、声音系统或粒子系统。尽管这大大加快了开发速度,但对于部分选择我们至今仍感到后悔,然而已无退路。
放弃了什么
回顾一下:在 Disciples 中,玩家拥有城堡和军队,可以在地图上移动,解锁新领土。敌方建筑可以并且需要被占领并变为己有。也会遇到孤立的敌人,玩家与其进行战斗。敌人也同样在行动:在地图上移动,攻击玩家的建筑和军队,占领土地。
当我们失去对 Disciples 的许可证时,除了其他方面,我们还决定改变游戏的概念,因此也不得不去掉一部分代码。很多内容被重新审视,很多想法被推翻。由此,产生了我们的一个地方玩笑:当项目的程序员与游戏设计师沟通时,三个人的脸上都洋溢着一种被称为“混乱面孔”的表情。
例如,我们放弃了漂亮的地形变形,即将被占领的地形重新涂成占领种族的颜色。
地形变形的示例
地形变形的示例
我们还不得不放弃对敌军队的 AI 控制,因为这也违背了新的概念。对敌方建筑的占领方式也进行了修改——这些也被决定去掉。
复杂而有趣的任务
在开发地形和树木绘制系统时,程序员们尝试了很多不同的方案。在思考如何绘制地形的过程中,我们在选择预先制作的 3D 模型和具有特定拼接机制的瓷砖地形之间犹豫。最终选定了一种混合方法,包括具有可变细节的多边形网格、通用颜色地图、可混合的细节纹理和附加的 3D 对象。
在绘制树木方面,程序员和 3D 建模师尝试了超过十种不同的算法,以寻找最美观和高效的方案。最终选择的方法能够绘制灌木和树木,并描绘它们在风中的摇曳。顺便提一下,在研究树木的过程中,我们得出结论,制作松树更为理想:它们结构简单,绘制速度更快。这段代码的一部分是在“加里宁格勒-莫斯科”列车的硬卧车厢中编写的,当时一名程序员正看着无尽的白俄罗斯雪林。
Lords of Discord 游戏中的松树
Lords of Discord 游戏中的松树
大量时间用于连接各种广告和分析 SDK,最终选择由我们的经理和分析师决定。由于我们使用的是 Marmalade,因此有些还需特别适配。
结论。
尽管 Marmalade SDK 的开发者计划停止支持它,我们仍然准备自己进行必要的更改。团队对游戏的未来发展有很多规划:引入公会系统、新种族,以及同步在线战斗。
在撰写本文期间,区域内的电力两次中断,且 Skype 服务器也曾掉线,但没有一棵树木受到伤害。