☆※冰の引言※☆
前文主要详细介绍了 XS 函数中的随机应用以及随机百分比与 XS 随机函数之间真假随机的辩证分析,深入浅出地把随机这个深邃而抽象的东西讲解明白,着实不是件易事。众所周知,在帝国时代2决定版中,触发里的两个至关重要的支撑是变量和资源,在现有触发条件的体系中,资源和变量并不能很好联动起来,基本还是你打你的,我玩我的这种现状。如何打破这种相对独立的藩篱,成了战役设计思路破局的一方面。但是目前来看常规方法并不能解决问题,触发有个效果"根据变量修改资源"简直鸡肋的不得了,基本等于不能用的亚子。这个时候 XS 函数就有它独到之处可以扭转乾坤,四两拨千斤,用好下面介绍的四个函数,很多意想不到的效果都能轻松实现。
☆※本节の紹介※☆
☆※资源读写函数※☆
帝国2中共有285个资源(截止高加索DLC 96976 版本),一个场景中最多有8个玩家(如果算上盖亚就有9个),那么总共就有 285×8=2280 种资源可供设计者使用。每种资源都是相对独立的,作个生动的类比,它们就犹如一个个独立王国,彼此之间没有什么关联,如何打破它们彼此之间的边界,把它们互相关联起来,可以说是个非常重要的课题。在现有触发体系下,想实现资源间产生一定条件的联系基本是比较困难的,但是 XS 脚本调用函数能轻松实现这一点。
XS 脚本调用函数在资源/变量之间起的是穿针引线的作用,不管是对资源还是对变量而言。其原理本质是数据的读取与写入。首先是对要修改的资源/变量进行读取,以获得其实时的现有值存储在临时变量里面,然后利用XS脚本调用的自定义新建函数体作为堆栈缓冲区,在这个函数体里面对一系列的临时变量做各种的复杂四则运算得到对应的计算结果赋值给临时变量,最后将堆栈缓冲区中修改后的临时变量写入对应的资源/变量之中,完成一个简单流程的修改。
这样讲可能在术语上比较专业一点,考虑到很多创作者不是IT行业的从业人员,未必接触过这些计算机类的名词,故笔者用相对而言比较接地气的方式简明扼要地描述一下对应的过程。用个通俗易懂的形容就是拉抽屉的过程。首先把抽屉拉开,检查一下抽屉里原有的东西(读取数据的过程),然后对抽屉里的东西进行增添、剔除或修改的整理(数据处理的过程),最后把整理后的抽屉关上(写入数据的过程)。下面就先来瞅瞅资源方面的读写函数吧。
☆※变量读写函数※☆
与资源读写类似,变量方面也有对应的读写函数。不过需要提点的事,资源ID的值可以是任意实数(即小数和整数均可),但变量ID的值却只能是整数,这个是需要重点关注的细节点。
任务栏里显示未改名的变量应使用格式 <Variable X>, X代表变量 X (取值范围:0~255)
改名后的变量则应使用格式 <改名后的变量名>
☆※资源&变量的相互修改※☆
上面对资源读写函数以及变量读写函数进行了详细的使用说明,相信大家对于这两类函数有个初步认识与了解了吧。在讲具体阐述资源和变量之间是如何联动之前,先来看看触发器有个效果"根据变量修改资源"这个鸡肋的效果,大家就能体会到什么叫没有对比就没有伤害,这个效果并不能进行任何复杂运算,只能根据变量大小进行非常简单粗浅的设置和加减乘除运算,基本就等于是废了武功,食之无味,弃之可惜。这种超级阉割版的设置对于场景设计者的多样化要求可谓是不孚众望,能起到的实质辅助作用甚微。
千呼万唤始出来,最终,还是要让这"万物互联"粉墨登场。
Ⅰ.根据资源修改资源
Ⅱ.根据资源修改变量
Ⅲ.根据变量修改资源
Ⅳ.根据变量修改变量
☆※应用实例&案例分析※☆
到这里基本的实用函数基本介绍完毕(当然最重要的函数仍未粉墨登场,在后续会出场)。笔者作为研究 XS 调用函数的先行者,恭愍王作为第一部使用 XS 调用函数设计的大型长篇战役,正式拉开了帝国时代2决定版轻编程的序幕,毫不夸张地说,这开启了帝国时代2的设计新时代,毋庸置喙具有划时代里程碑的意义。
在其他后来的优秀战役中,我也充当一定程度的技术顾问的角色,为他们的设计出过谋、划过策,在此之中也贡献过不少经典的 XS 函数使用案例,涌现了一些非常实用的点子思路,分享出来以飨读者。这里大概结合资源&变量联动的主题讲三个基本典例+一个进阶级的案例。
☆※典例一:那些年曾经的勃艮第葡萄园※☆
首先还是来讲讲这个西方霸主DLC中饱受争议的银冠科技,从一开始的将所有食物以2:1的比例兑换成黄金的超强爆发,到中期的将一半的食物以2:1的比例兑换成黄金的扭转战局,再到现版本食物黄金转换的完全消失,不得不说真令人扼腕叹息。
虽然PVP中大家对于这样的一波流的猥琐科技深恶痛绝,但在PVE中这样的资源转换科技推广开来将是颠覆式的创新设计,所以这里针对资源转换科技进行详细解析,下面结合不同时期的勃艮第葡萄园科技作为切入点,从特殊到一般,手把手教你如何举一反三,触类旁通。
从上面两个例子可以看出,如果不利用 XS 函数,在现有触发效果基础上进行构思设计,即使使用穷举法也不可能实现当年勃艮第葡萄园的效果,目前来说使用 XS 函数是这个问题的唯一解,所以说在这里 XS 函数的巨大优势便显露得淋漓尽致了。
从这两个特殊案例入手,我们可以轻松总结出一个通用的模板,以后做资源转换相关主题的时候就可以直接套用了。这就完成了境界的蜕变,从个别到一般,从特例到普遍,达到了举一反三,触类旁通的目的了。
☆※典例二:想当年可萨帝国的动态25000分※☆
不知道读者们玩过可萨汗国这个战役没有?在我参与担任技术顾问的众多作品之中,这个战役里有一关是达到一定分数即获得胜利的,这关的设计很具有资源变量联动的典型性,非常值得拿出来细细品味其设计思路。
这关的设计要求是达到25000积分即获胜,而获得积分有两种途径:
1.打败一个敌人计5000分(总共5个敌人);
2.收集一定量黄金(1黄金=1积分);
这个数要求必须能做到实时动态更新,准确在屏幕上显示玩家的积分进度,而且这个数会随着玩家的黄金消耗而减少,并不是只增不减的。
从字面上看,如果用现有的触发效果来看,这种即使是穷举也无济于事,因为可能性千千万万,根本不可能无遗漏的情况下面面俱到,一一列举出所有对应情况。这里使用 XS 函数可以轻松实现资源与变量之间的万物互联,打通触发思路的任督二脉!
首先明确的是,先写一个触发两个效果:改变变量100、变量101设置为0,改变量101名称为score(用哪个变量全凭玩家喜好,可随意设置,这里仅举例,变量名称可任意设置也可不改,后面会讲),在触发信息那里的简短描述如下图示例所写,如果变量没有改名字则写成 <Variable 101> (数字与你设置的变量有关)
然后写一个循环触发,循环の目的是积分能做到实时更新,效果是 XS 调用函数,程序代码见下:
最后写一个胜利条件判定触发,变量101 的值 ≥25000 就触发胜利即可。
看看吧, XS 函数真的可以化腐朽为神奇,把不可能变成可能落地,许多看上去遥不可及的设计,通过 XS函数 的神奇演绎都能够完美落地,触发设计上的瓶颈基本上触手可破,在系统设计层面上打通了实时多因素融合难题的最后一公里,为触发设计复杂化多样化铺平了道路。
☆※典例三:鎌倉永仁德政令蕴含的数学模型※☆
数学建模与帝国时代2,这两个貌似完全不搭边的事物,如何在场景中联系起来,这个就是北条Beta实验室需要解答和研究的方向了。
在北条中,有一关是描述北条贞时如何实现得宗专制的,里面有个设定就是乱党指数与农民生产效率挂钩。玩家必须想尽办法降低不断攀升的乱党指数,否则农民生产效率将逐趋向于0。该设计由乱党指数下面的两个参数——乱党等级以及乱党指数百分比来决定的,最终目标是通过输入这两个变量的,最终影响玩家的农民生产效率。
从专业的角度来看,这是一个双变量影响模型,用两个不同的相对独立的变量对玩家的某个属性进行修改,最后作用于玩家上。这是一种全新的尝试,把数学建模的思路带入帝国时代2中的触发设计,从双变量影响单因素到多变量影响多结果,这也是挖掘帝国中触发设计方面潜力的有益尝试,也是北条这个Beta实验室所需要达到的目的。
这个触发系统设计的原理是一段时间(比如每15或20分钟)做一次判定,收集读取乱党指数对应的值进行关于农民工作效率方面的计算,从而修改农民的工作效率。在整个过程中,如何对变量妥帖地设置权重系数,是所有数学建模中最重要的也是必然会遇到的最大困难。调试参数的数值除了在纸间的理论计算,还要在游戏中对具体性能进行测试的实践过程,俗话说的好:“实践是检验真理的唯一标准”,诚然,必须把实践与理论相结合,相辅相成,两条腿走路,才能构造一个相对而言比较好的数学模型。
因为场景设定,玩家为了减轻农民工作效率的负面影响,必须要使用永仁德政令或其他方式降低乱党指数百分比, 从而延缓负面效果的快速蔓延。永仁德政令的原理就是给除玩家外的每个玩家派钱从而降低参数的值,虽然可以反复进行研究,但是随着使用次数的增加,使用成本也在水涨船高。玩家如何通过数学模型计算权衡好各种利弊,调整好自己的战略,作出最有力的决策,这份答卷就是玩家需要自行在场景中探索答案了。
☆※进阶案例:按军事人口扣减的军粮消耗☆※
最后的最后,来讲讲如何轻松实现简单的军粮消耗与军事人口相关的实际问题。
在P佬的老作品"垂死的太阳之子(Children of the Dying Sun)"中有一关的设定是:每5分钟玩家的军事人口在超过20的情况下,每个军事人口消耗1点食物,食物量归0就会慢慢扣血而亡。比如说玩家有50军事人口就消耗50食物,玩家有88军事人口就消耗88食物,诸如此类等等。在旧时代,P佬给出的解答方式是把100军事人口的上限划分成0~20, 20~40, 40~60, 60~80, 80~100, 100+,这几个区间然后分别扣除0,20,40,60,80,100点食物。在受限于以前的触发条件下也只能做到这种程度了,当然你从0枚举到100也不是不行,但是这么简单的设计要用这么大的工作量属实是划不来的。
但是时代变了, XS 函数解决这样的问题可以说是得心应手,得来全不费工夫。
最后加上一个循环触发,堆积属性玩家食物量1,反向(≥1 的反向是 <1 也就是 ≤0 的意思),定时器n秒,损坏玩家军事人口多少血,就可以完美实现当玩家没有食物的时候忍饥挨饿(表现为军事单位逐渐扣血)的效果。
在这个案例中,直接规避了传统触发效果必须要枚举的困局,实现了从少量有限到大量无限的飞跃,通过这一个函数,无论玩家有多少军事人口,都能轻松自如一劳永逸地解决所有因枚举而产生的问题,从而另辟蹊径,达成事半功倍,四两拨千斤的效果。
☆※冰の小结※☆
本节从资源变量之间的万物互联作为切入点,带领各位读者遨游这奥妙无穷的互联世界,让相对独立的资源、变量等要素彼此之间产生联系,继而更好的为设计者提供服务与帮助。下期将开启xsEffectAmount函数的大门,开始叙说此函数的点点滴滴;另外继续介绍帝国2中的复杂知识——DPS及其应用。从建筑驻扎的附箭数与DPS的计算原理着手,浅谈DPS对于帝国时代2设计者的思路与启示,如何利用它设计更多更有趣的应用。
欲知后事如何,请听下回分解
Cly0806
06/25/2022
原文链接:https://www.bilibili.com/read/cv17269658/