ze_r00ms的最后一小时

欢迎,欢迎来到Rooms测试机构,请右转第一间进入我们的测试房间
今天的任务是:跟着灯光的提示进入对应的房间开启仪器,通过传送门,收集能量球再返回
在任务开始前,我们要提醒您以下几点:
第一,注意雨雪天气带来的自然灾害。
第二,我们曾经的实验人员在传送门对面遗失了一些装备,这些都是一次性工具,我们鼓励您使用他们摆脱困境,但有的装备也会对你们有害,请谨慎分辨
第三,我们理解您可能会对未知感到恐惧而拒绝通过传送门,但请准备好面对更为恐怖的未知
第四,我们不反对您用小聪明欺骗传送门,但是,请准备好承担不可预料的结果
当收集到足够的能量球后,任务结束,我们会利用传送门送您安全的离开这里,祝您度过安全愉快的一天。


评论


2022年6月28日,基于对vscript的一定了解,我在Zombieden论坛发表了一篇名为《基于dfs算法在csgo中用vscript制作一个14*14的必定有解的迷宫的文章,其大致内容为用DFS的遍历方法打印二维数组图标,并利用env_entity_maker在地图内将预设好的地图方块打印出来。

我很早以前就意识到了,随机性是游戏乐趣不可分割的一部分,也就是让玩家在每一步决策内,加入赌博的要素,使得玩家面对的结果处于玩家的预想之中,但又不完全在意想之中。这种对于未知的探索是游戏能给人带来刺激与乐趣的重要来源之一。


一、

2023年12月26日,de_nightclub 2 结项,这张图是我实验光影效果的里程碑,让我对起源2的光影使用渐入佳境。

de_nightclub

同时这张图也引入了一个很有趣的要素:镜子与碎玻璃

镜子指的是零粗糙度满金属度的贴图做成的障碍物,能够反射周围的环境。击碎后能够掉落碎玻璃茬在地面,踩上去后会发出“喀啦啦”的响动。

我将镜子与普通透明玻璃组合在一起,在场地中央随机生成一个很大的迷宫供玩家探索,在其中寻求反击与伏击的可能。

但是后来起源2引擎证明我是错的。cubemap的基础反射效果看起来非常好,整个场景都显得耀眼夺目;问题出在动态反射上:起源2的pbr贴图只对动态光有反射效果,而水的反射运用了SSR技术(屏幕空间反射)进行节约成本;而且水的反射仅限于在Z轴高的地方看向Z轴低的地方,反之会不渲染水。这使得我的光影意图被几乎完全破坏掉了,现有的效果也只是个残次品。

第二则是对于起源2脚本的探索利用

在这里感谢Ansimist在创意工坊发布的script范例工程与正编译辅助工具 3,几乎是帮助我从零到有完成了质的飞跃。

首先,起源引擎的脚本系统指的是什么?

一般来说指的是vscript,也就是内嵌于游戏与游戏内容进行互动的虚拟机,它充当Source和Source 2引擎与外部脚本之间的抽象绑定层,能够用外部文件对游戏内容进行修改,他非常有利于地图作者对于地图的开发。这里可以看看一个站内视频讲述了军团要塞2更新vscript的有利项 BV1cD4y1x7As

而不同于起源1的基于squirrel编写的vscript系统,起源2的脚本系统,不,应该说是CS2的脚本系统,经过了一波三折。最开始CS2与DOTA2一样,使用的是lua语言编写脚本。后来某天内测的清晨,lua被突然砍掉了,紧随而来的是后缀为.vts的新的脚本文件。这是基于TypeScript的脚本系统,但是又不完全是,因为其部分语言规范确是JavaScript的,这很令人奇怪。

也就是说,截止发文时间,CS2的脚本系统经历了lua -> PulseV8 -> SourceTS ,两次变化,其中第二次变化要小一些,只是引用库的位置被修改以及几个函数名的修改,但这导致PulseV8的脚本全部炸掉了,连带着地图本体。该死的Valve,害我大年二十九不得不更新地图修复,操。

但是好在SourceTS的使用对于开发地图效率提高了不止一星半点,这让我很顺利写出了nightclub内“随机”放置玻璃板块与镜子这项功能,以及那个帅气的会变色的RGB板子。

RGB板子


二、

那么先开始开发游戏的主要内容吧,也就是随机性的区域。

路径测试

按我22年的想法,是随机打一张0 1的二维数组表,再利用DFS去测试这张表能否跑通,这样不断循环直到推出能够跑通的表。

这种行为是效率及其低下的,是浪费服务器性能的,但是这种方式就像是猴子排序,唯一的优势在于得出的的图表一定是完全随机且意想不到的。

我当时还钻了牛角尖,为了更高的效率想着把DFS换成A*算法,更快的运算,更好的效果。

后来发现其实完全不用,我应该用结果推过程:我想要的只是两点之间有1/2条可行的路线,那么我直接在一个全是0的二维数组里随机方向涂色就好了啊。

所以我给向右和向下加了大权重,为了确保两条路线尽量不重叠,分别赋予了不同的权重,果然效果好多了,又能达成想要的效果,又不卡,而且还随机。


接下来的问题在于区域的衔接部分。

最开始我是想设想collective的衔接方式,也就是在末尾生成新的房间区块进行衔接,但这就意味到另一个问题,maker的生成也需要找到判断位置。现在的脚本接口非常匮乏,几乎只有EntFire可以使用(截止于地图第一次发布的时间),这些复杂的操作会更需要与地图实体进行衔接操作,也就意味着地图的制作难度更上一层。

所以我退而求其次,将整个房间作为一个衔接游玩区域进行处理,那么整体的游玩过程应该是准备大厅 -> 随机区域 -> 准备大厅 -> 随机区域 -> 准备大厅 这样循环往复的,这样既节省了开发难度,又减少了对于地图渲染的时间成本。

所以我开始着手编写地图背景故事:

这是一个未知区域的测试机构,人类被僵尸追杀至此,希望借助机构的力量摆脱僵尸,但是代价是协助实验室完成一系列的实验,例如,这个测试机构目前需要大量野外收集的矿石/机械/能量球,那么玩家就得通过传送门,进入随机区域进行收集,当完成任务后,测试机构将会把玩家安全送往逃亡区域。

这就是一个很经典的“僵尸逃跑”故事了,起因 -> 发展 -> 转折 -> 解决 -> 逃亡,五个要素都齐了,现在的难点在于完善等待大厅了。

三、CHAOS

混乱的起源

现在框架已经打好,现在我想要丰富游戏内容,那就剩下横向发展了。

首先是场地的环境,背景故事中已经说过了,每一次收集的区域都不一致,那么需要随机的天气,随机的可见度,随机的黑夜或者白天。

于是我预制了十五种天空盒,与十五种天空光照,并在每一次生成场地时随机选取其中的一种(后来被我压缩到了两种白天两种黑夜)。

15种天空盒与light_env


既然区域天然分为了高低两层,那么就应该把纵深效果运用得当,我需要让玩家能够上到第二层,将迷宫变成一个具有垂直结构的角斗场。

但是玩家是自由的,他们不愿意被游戏制作者教导去做,应当将选择的权利给予他们,同时制作范例稍微教导,再构想出至少一种可能的“隐藏”正确选项,并鼓励玩家自由发掘,这可以给玩家很强的正面鼓励,让玩家更有成就感。

那么我应该把这个权利交给玩家。

所以最开始,我制作了一个梯子item放置于地图内部,玩家可以通过使用这个物品爬到迷宫的第二层,拓展场地维度。

既然有了第一个item,为什么不做第二个呢?

于是我制作了吸、推、回复、补给等等多种item,在游戏区域内随机生成。

在制作item时,由于CS2的filter机制不成熟,于是我干脆放弃了替代的想法,反而选择了滥用这个bug,并且制作成了彩蛋。

所以说有的bug真不一定是bug,也有可能是开发者给你留下的陷坑也说不定哦。

我们不反对您用小聪明欺骗传送门,但是,请准备好承担不可预料的结果。

四、

这是一个测试中的白模初始传送,可以看出距离最终的成品几乎毫无区别。

12天,我做到了。

我认为mapper应当保持地图的发布频率,而非每次都十年磨一剑了,毕竟剑的锻造工艺一直在进步,如果你一直对你的作品有着更高的要求,那你的作品甚至有可能完全无法问世了,多少好的作品就是在这个不断追求更高层次的状态下被拖垮了。

所以制定好的规划很重要,其次要有端出屎给别人品鉴的决心,也不要太屎,你得有自己的闪光点才行。这样的结果,大概率比什么都做不出来好得多。

1月5日早上立项,1月17日早上完成打包发布。我在两周之内完成了这张地图的初次发布。

但是在后来的Valve对于实体的屡次调整中,地图屡次出现bug,每一次的修复都像是煎熬。在项目被间隔了很久之后,对于地图的热情更是会屡次消磨。



在最开始的规划中,这张地图会更新很久很久,因为CS2的模型编辑器skin组不再有16的上限,而是可以无限添加材质组。这意味着只要我想,我可以去各地图请求他们的贴图并复刻到我的地图里,甚至是BOSS战复刻,玩家进入房间后在收集完成后,将有几率面临BOSS的威胁,战斗一触即发!

现在一切都是梦幻,这是最好的时代,也是最坏的时代。一切都在发展,一切欣欣向荣,但生长的东西同样需要死去的东西作为养料。

我不在乎,我只是想做我想做的东西,一切对未知的探索都让我感到着迷,虽然这也是我出图的绊脚石,我花费太多的时候在于试验新的构想或者制作一些可有可无,但是我觉得很酷的小玩意儿上了。

我将永远保持玩家之心。


感谢您看到了这里,相信你也许也是对制作CS2地图感兴趣的玩家,如果你是想在起源引擎制图上有所建树的玩家,欢迎入群 274662238。如果你想了解更多与ZombieEscape地图制作有关的内容,欢迎入群 653909785。


链接

  1. https://bbs.zombieden.cn/thread-88659-1-1.html

  2. https://steamcommunity.com/sharedfiles/filedetails/?id=3122240150

  3. https://steamcommunity.com/sharedfiles/filedetails/?id=3090081856