基地节点这个东西嘛……至少我自己是从刚学做任务时就开始用,但十年以来都是马马虎虎的使用,从未深究过里面的细节。最近终于有了点想法,想要把自己已经知道的各种特性进行系统的整理,出一份比较完善的教程。
以前应该是从来没有过基地节点方面的教程,因此我只能和tslza一起,以大量测试为基础,在不断的摸索与碰壁之中,试图将单人任务中AI作战方造建筑的逻辑整理完全。希望我们的努力能帮到更多人吧。
——竹蜻蜓(主笔),2021.1.28
目录
0 – 基地节点是什么
1 – 基地节点的建造条件
2 – 基地节点的建造顺序
3 – 基地节点的自动移位
4 – 自动建设基地模式
5 – 基地节点的插队
6 – 建筑的生产与摆放
7 – 战术延伸
8 – 局限与滥用
附录:基地节点存储结构解析
附录:与基地节点有关的触发与ini整理
策划:竹蜻蜓,tslza
审核:prry,轻稚,妖妖酱,蜜蜂狼牛
0 – 基地节点是什么
基地节点(Base Node),顾名思义,是基地建筑建设的“节点”。一般来说,它决定了单人任务中AI作战方要在某个特定的位置,建造某座特定的建筑。在地图编辑器FinalAlert中,基地节点被显示为建筑的虚影,表示“应该在这个位置,建造这样的一座建筑”。
正常放置的建筑(左上)与基地节点“建筑的虚影”——基地节点(右下)
一个基地节点有且只有四个属性:所属方,序号,位置坐标,建筑类型。在FinalAlert的绘图窗口上,你可以直观的看到所属方的颜色、建筑类型和位置坐标,但序号是一个隐藏的属性。
在FinalAlert中,我们使用左侧树状图中的“基地节点”(Base nodes)一栏的三个工具来编辑基地节点:
“建立节点不删除建筑”工具(Create node/Keep Building):使用该工具点击一座建筑物,会在该建筑物的位置产生一个基地节点,其建筑类型、所属方、位置坐标均与原建筑一致,并追加一个新的序号。
“建立节点删除建筑”工具(Create node/Delete Building):使用该工具点击一座建筑物,会删除该建筑并产生一个基地节点,其建筑类型、所属方、位置坐标均与原建筑一致,并追加一个新的序号。
“删除节点”工具(Delete node): 使用该工具点击一个基地节点,会删除该基地节点。序号会前移补位。注意,使用树状图最底端的“删除对象”工具(Delete Object)是无法删除基地节点的。
由此我们也可以看到,在FinalAlert中,基地节点无法直接进行移动位置、更改建筑类型、更改所属方、更改序号的操作,只能通过删除,然后重新摆放建筑的方式来重新建立。在更改地图尺寸的时候,由于坐标系统发生了变化,基地节点的位置也会发生漂移——那么就需要删除它们,并重新摆放了。
1 – 基地节点的建造条件
关于基地节点建造的条件,用三个字就可以简短有力的描述:“无条件”。一旦设置了基地节点,那么AI作战方会无条件的尝试按照节点来建造——无视任何科技限制、延伸距离限制、建造数量限制,甚至在这个建筑根本不能造的情况下,把它给造出来!
接下来笔者会用一个例子来展示这个“无条件”有多么暴力(左侧图片为在FinalAlert中的摆位,右侧图片为在实际游戏中经过足够长时间以后的最终效果):
无视建造距离限制:不论多远,只要是平地就能造;
无视科技限制:跳过所有前置科技,直接造出工业工厂;
无视建造数量限制:能造出2个甚至更多工业工厂;
无视这个建筑能不能造:直接造出科技钻油井、油桶、水塔等
(由于这几种正常情况下不可造的建筑没有建造动画,
AI作战方会以“直接凭空出现”的方式把它们造出来。);
AI作战方:我要造建筑!我要造建筑!!我要造建筑!!!没有人能拦着老子造建筑!!!!
事实上,一般只有两件事情能够拦住它:没建造厂,和没钱。钱在原版平台是一件用触发不太好控制的东西。所以,想要阻止AI作战方按照基地节点建造,操作性最强的办法还是拿掉它的建造厂。(另外,对于耗电建筑的基地节点,需要保证AI作战方电力充足,才能较为直接的建造出来。有关这部分的详细讨论,我们会在第5章进行。)
触发结果3 [生产开始] 与基地节点的建造有一点点关系:如果作战方的IQ值低于 [IQ] → Production=<int>(原版为5),那么,不执行触发结果3 [生产开始] ,AI作战方就不会自动开始按照基地节点建造建筑物。但如果作战方的IQ值高于或等于[IQ] → Production=<int>,那么即使没有执行这个触发结果,AI作战方仍然会开始建造。
另外触发结果30 [自动建设基地] 对应的逻辑略微复杂一些,我们会在第4章进行讨论。
一般来说,AI作战方只会在一种情况下认为这个基地节点已经建立成功了:在基地节点的位置上,恰好有一座与之同种类的建筑。这座同种类的建筑可以是任何来源的:可能是自己按照基地节点造出来的,也可能是触发结果125 [将建筑建于…] 造出来的,也可能是地图上早就摆好的,或者甚至是AI作战方拿工程师占来的……都不影响AI作战方认为基地节点建立成功。(不过在第3章我们会介绍此条件的一个反例。)
基地节点与对应建筑的位置必须是完全对齐,有一点偏移都不行,否则不会判定为成功,甚至会把该建筑当作障碍,形成阻挡状态。
2 – 基地节点的建造顺序
基地节点的建造顺序与它的隐藏属性——序号密切相关。我们先聊聊序号的特性。
首先,基地节点的序号是一个3位数字(缺位用0补齐),从“000”开始由小到大排布;其次,基地节点的序号是按照所属方来存储的,每一个所属方都有着从“000”开始的、自己独享的一套序号。当然,这些性质在FinalAlert中都难以直观的看到,所以你也不必去特别的记忆。
真正需要注意的是,FinalAlert中的三个基地节点编辑工具,“建立节点删除建筑”、“建立节点不删除建筑”只能在末尾追加新的序号,而“删除节点”在删除以后会让序号依次前移补位,这意味着在完全使用FinalAlert编辑基地节点时,同一个作战方的基地节点,一定是越后建立的,序号越大。因此,为了重新安排基地节点的序号,你可能不得不删除一个作战方的所有基地节点,重新进行设置。
AI作战方按照基地节点建造建筑的顺序,就是严格的按照序号由小到大而来的,没有任何的例外情况。
种种情况表明,如果某个基地节点对应的建筑造不出来,整个作战方的所有基地节点会整体进入一种阻塞的状态——虽然有建造厂,也有足够的钱,但就因为这一个基地节点造不出来,导致后续的基地节点也全都造不出来。
等等,不是无条件造吗,怎么会造不出来?这里的“造不出来”主要指的是阻挡(blockage)状态。阻挡可能是建造位置被障碍物挡住了,或者因为地形不适宜而放不下去,抑或基地节点本身在地图可视区域外,等等,总之就是EVA所说,“Cannot Deploy Here”。
其实有一部分阻挡状态是可能可以由AI作战方自行解决的,就是基地节点的位置被AI自身或者盟友的单位堵住了的情况,这种情况被称为临时阻挡(temporary blockage)。此时AI会尝试让附近的单位随机移动,看能不能凑巧把需要的建造空间让出来。AI作战方在这样“驱赶”附近的单位以后,会等待[General] → PlacementDelay=<float>(单位:分钟,原版值为0.05,即3秒)以后再尝试下一次放置。但毕竟是随机移动,可能经历了若干次随机移动也没能空出需要的位置。但由于MaximumBuildingPlacementFailures这句代码没有发挥应有的作用(根据原版注释,这条代码本意是让这种尝试进行一定次数就终止,但经测试这条代码在单人任务中没有任何实际作用),这种临时阻挡状态可能会永远持续下去,AI作战方的建筑生产就被卡死在这里,无法执行后续动作。