《伊万博士: 进化》利用三角剖分算法复刻《超越光速》地图机制

作者:OMStuido indienova 2021-09-07 72k
前言

市面上将随机地图高度抽象表达的一般有 3 种:

1.第一种是最常见的类《杀戮尖塔》爬塔类地图。优点:地图流程容易把控,玩家能较为直观地体验游戏推进过程,同时实现难度不大;缺点:同类型游戏大部分都采用了这一种机制,从卡牌玩法到地图机制都很难跳出《杀戮尖塔》的影子,难以做出差异化。

2.第二种是类似《月圆之夜》的翻牌子机制。优点:流程相对好把控,实现难度不大,同时翻牌子式推进能在翻牌子这点上做出不少微创新;缺点:翻牌子高度抽象化了地图,玩家难以直观地感受到空间推荐的过程。

3.第三种是《超越光速》类的随机点线网络地图。优点:地图形式随机性较大,玩家能较为直观地体验游戏推进过程与地点上的变化;作为三种类型种较早出现的一种,采取类似的地图机制的作品少之又少,能很好地做出差异化;缺点:地图流程较难把控,需要额外机制来控制流程。实现难度较前两种复杂一点。


在游戏开发早期曾希望采用上诉第三种《超越光速》类的随机地图机制。但鉴于一年多前作者才刚接触编程与游戏开发数月个人独立开发萌新,抱着先把游戏的所有基础功能做出来,做好一个完整的游戏的心态,决定采用最好实现的第一种类《杀戮尖塔》机制,而且还是高度阉割版(QAQ)。

随着游戏已经开发了一年多,游戏内所有模块都已经接近完成并且作者也从一个萌新进化成了有点经验的菜狗。距离游戏 EA 阶段还有三个月时间,决定抽出一点时间挑战一下,将最初的想法制作出来。

实现

第一步:背景底层

游戏设定是主角困于峡谷之中,因此绘画了一张上下带有崖壁的底图作为地图背景


第二步:划分区域并生成地点 site

首先将地图划分六个区域,区域会在后面有其他作用。


在每个区域随机生成 3~5 个地点 site,总点数在 18~30 个之间,同时保证点与点之间有一定距离。


下一步:以地点 site 为基础形成三角形网络。

当初不采用这种地图机制最主要原因就是觉得这一步太困难了无从入手,后来有一天想起自己本职工作建筑设计做参数化设计时常用 grasshopper 里常用的一个功能,点云生成 mesh 网格。利用三角形剖分法(Delaunay)组织点阵。


既然思路有了,只要用代码复现就好。(不知道大佬们知不知 UNITY 或者 C#有没能处理大量几何图形问题的库,类似 GRASSHOPPER 这样的方便工具,有的话麻烦评论或者私信告诉一下我,万分感谢 QAQ)。


最后我们做得比《FTL》稍微复杂一点,抽取部分线路让地图更复杂化。


重复上述随机步骤,确保最短重点到起始点之间最短路径少于或等于 7(方便把控流程)




第三步:场地 site 赋予属性

场地内包含地形的概念,不同地形会遇到不同的怪物,同时亦会遭遇事件,有合成实验室(商店),有危险的怪物聚集点等等丰富游戏性。

只显示初始点及其连接的 site、实验室(商店)、和终点的位置,其余地点隐藏。并在每个 site 下留下一个暗示位置和地形的图案。



隐藏的点在探索到与之相连的地点时会显。


第四步:追兵系统

《超越光速》中有一套追兵系统,当进入新地图后经过一段时间,追兵就会从左往右追击,与追兵战斗只会得不偿失。这个机制能有效抑制玩家 full clear 地图刷刷刷提升能力,把控地图的整体流程。

在我的游戏设计中,每个深度的地图会有 4~6 天的安全期(每前进一个 site 消耗一天),安全期后就会有 Turmoil 由左往右追击玩家。而 Turmoil 的推进方式就是前面定的区域,每天往右侵入一个区域。最终每个玩家逗留在地图的时间限制在 10~12 天。


小可爱 Turmoil 的立绘(很多近期有趣元素的缝合怪 QAQ)


最后一步:添加场地信息提示,优化玩家体验


搞了这么久,我觉得我的 UI 设计总算像个样子了。

结语

算是完了之前一个遗憾,地图的事件和一些小功能还在编辑中,但是总体上是完成了,对比构思、前始,中期,到最后四个时期的地图算是质变。


过段时间 Steam 的商店页面要重新审核(当初为了快速通过参加新品节,没有做 EA 审核),会有一段时间商店页面消失,同时 demo 也会关闭,所以要体验 demo 和加愿望单的朋友还不赶快行动 OwO。

最后,为了改地图我把 BOOOOM 的 gamjame 鸽了,我有罪。


来源:indienova
原文:https://indienova.com/indie-game-development/replicate-ftl-map-algorithm-with-delaunay/

相关推荐

最新评论
暂无评论
参与评论

Facebook游戏出海峰会
推广
商务合作 查看更多

编辑推荐 查看更多