
有组织的战线模组
将混乱的原版步兵战斗转变为有组织的前线战斗。士兵保持阵型位置,面对面战斗,并采用战术侧翼包抄。类似于 RBM AI 的功能,但作为一个独立且轻量的模组,无需配置。在野战中的冲锋命令期间自动生效。
查看大图[center][size=6][b]组织化前线[/b][/size]
[size=4][i]坚守阵线的步兵,而不是一窝蜂涌上去的乌合之众。[/i][/size][/center]
[line]
[size=5][b]问题所在[/b][/size]
原版《霸主》的步兵不会列阵作战。他们打仗就像丧尸潮。
仔细观察一下。每个士兵都会挑最近的敌人,然后径直朝他走去。不是朝他所在的方向,而是[i]直冲[/i]他本人,一条直线,穿过自己的阵型,越过身旁的战友,扎进敌阵中央,手臂已经开始挥舞。没有自我保护意识,不理会身边的人,也不觉得面前那东西可能先把他捅死。就是往前冲,直到接敌。要是他们会发出低吼,你根本分不清有什么区别。
冲锋命令下达二十秒后,就没有前线、没有后排、没有侧翼了。只剩下一团围成一圈的混战,你一半的军队在对着空气挥砍,因为有三个友军挡在他们和任何可攻击目标之间。
问题的另一半在于,这才是电影里战斗的样子。两支军队从战场两端朝对方狂奔,在中间撞上,瞬间变成五百场单挑,搅在一大锅泥浆色的奶昔里。镜头很棒。但也完全是无稽之谈,而且几乎从未发生过。
[line]
[size=5][b]这个模组适合谁(以及不适合谁)[/b][/size]
如果你喜欢街机式战斗、一个英雄砍翻四十个人、军队一接触就混作一团、士兵只有飞蛾般的求生本能,那这个模组会让你很烦。它的设计目的就是把这些拿走。去装别的吧。
这个模组围绕一个无聊、不起眼的历史事实构建:[b]士兵不想死。[/b]
列阵的士兵不会冲向一群拿着利器的陌生人。他们一起推进,因为你左边的人是你左侧唯一的掩护。他们会停在武器允许的最大距离上从那里作战,长矛的全部意义就在于不必靠近。他们会犹豫。他们在寡不敌众时退让,在敌人开始崩溃时推进。伤兵从队列中往后撤,而不是就地等死。阵线来回挪动、互相试探,长时间僵持,之后才发生决定性的事情,而大部分杀戮发生在之后,当一方转身逃跑、从背后被砍倒的时候。
这就是这个模组试图再现的东西:更接近一次严谨的历史还原,而不是好莱坞式的场面调度。
[i]诚实的说明:[/i]这仍然是一款运行在自有想法的引擎上的游戏。模组会朝这个方向使劲推,但做不到纪录片级别。不过屏幕上的差别可不微妙。
[line]
[size=5][b]它实际做了什么[/b][/size]
[b]阵线定位。[/b]模组覆盖了每个步兵认为自己该站的位置。士兵不会越过身旁的人推进,不会挤进已经站满的一排,也不会穿过自己的阵线去够目标。如果前方的阵线是实的,他会去侧翼找缺口,而不是硬挤。
[b]横向凝聚力优先。[/b]做任何事之前,士兵会先检查自己左右有没有人。如果两边都空着,他就朝最近的友军靠拢,而不是独自推进。这一条规则承担了大部分工作,正是它把冲锋变成阵线,而不是箭头。
[b]间距取决于武器长度,而不是固定数值。[/b]交战距离来自所持武器的实际攻击范围。拿双手长矛的人会停得更远,拿斧头的人停得更近,两人都会停在真正能够到对手的位置。没有任何硬编码,所以模组武器和大型改版模组都能自动获得合理的间距。
[b]三个接敌阶段。[/b]超过约 6 米时,模组完全不管,让原版去完成接近,你不需要谨慎的 AI 在走路的时候瞎操心。在 4.5 米到 6 米之间,士兵会小心接近,先判断目标受到多少保护再决定是否投入。低于 4.5 米时,他们保持与武器相称的距离并作战。
[b]后排停止对空气挥砍。[/b]如果士兵和敌人之间正好隔着一名友军,他的攻击决策会被压制,前进输入会按周期被限流,这样他们就不会再试图穿过前面那个人去攻击。他们仍会定期前推去填补缺口,如果敌人真的进入攻击范围,他们也会抓住机会挥一刀。
[b]侧翼恢复。[/b]阵线边缘的士兵经常会对着空气猛砸,因为面前没人。模组会追踪这种情况,持续整整一秒,而不是单帧,只有到那时才把他们从阵型锚点释放,让他们去补上最后那一米。这个延迟很重要:更激进的检查版本会把阵线撕碎。
[b]伤员轮换后撤。[/b]前排士兵生命值低于 35% 时会后退,而不是原地等死。他不是在溃逃;他是在腾出位置。
[b]会读战场的士气。[/b]进攻性会随步兵对步兵的兵力比例以及敌军已经崩溃的比例而缩放。寡不敌众的士兵会犹豫并退让。看着敌人崩溃的士兵会更猛烈地压迫。盾牌、武器长度和角色实力都会影响同一次判定,所以一个拿盾的老兵能守住的地方,征召兵会崩溃。
[b]盾墙和方阵受到区别对待。[/b]在非冲锋命令下的防御性阵型中,近战进攻性会被大幅削减,这样士兵就不会离开盾墙去寻找攻击角度。站在墙里就是要这样。
[b]朝向。[/b]接敌时,士兵会转向自己实际正在交战的敌人,而不是阵型名义上的方向。
[b]玩家优先。[/b]处于你攻击距离内的 AI 会以[i]你[/i]为目标,而不是礼貌地无视你去打两米外的友军。只影响目标选择,绝不会把阵型拖向你。
[b]投掷仍然有效。[/b]标枪和投掷斧被明确保留。早期版本的战斗调整曾完全压制它们;那是个 bug,已经修好了。
[b]崩溃防护。[/b]针对 LineFormation 的两个空值安全补丁,用于捕获原版中战斗中途单位从阵型移除的边缘情况。
[line]
[size=5][b]它什么时候会自动关闭[/b][/size]
值得一读,因为“模组什么都没做”通常是下面这些情况之一,而且是故意的。
[list]
[][b]小规模交战。[/b]任一方少于约 20 人,或步兵少于 20 人时,一切恢复原版。强迫六个追劫匪的士兵保持阵线纪律看起来很荒唐,而且以前会导致卡顿。[/]
[][b]移动、撤退和后撤命令。[/b]始终使用原版,没有例外。如果你让他们去某处,他们就会去。[/]
[][b]超过 6 米。[/b]几乎所有检查都以距离为门槛。行军和机动不受影响。[/]
[][b]落单的敌人。[/b]如果目标附近没有友军,模组会让开,让你的手下直接解决他。[/]
[][b]溃逃的士兵。[/b]一旦一个人崩溃,他就是原版。逃跑不该有组织。[/]
[][b]骑兵。[/b]从不触碰。下马骑兵按步兵处理。[/]
[][b]弓箭手[/b],除非他们已经拔出近战武器,或者有敌人进入 4 米内,此时他们算步兵,受到同样处理。[/]
[][b]攻城和藏身处任务。[/b]仅限野战和海战。[/]
[][b]休息中的士兵[/b],如果你运行我的体力系统模组。见兼容性。[/]
[/list]
[line]
[size=5][b]诚实的局限[/b][/size]
[b]后排挥空被减少,但未被消除。[/b]挥砍时机由引擎决定,低于 Harmony 能干净触及的层级,而能彻底消灭它的检查,正是会破坏前线的检查。你会明显看到更少,而不是完全看不到。我宁愿在这里说出来,也不想让你装完之后期待一个彻底修复。
[b]它不是 RBM AI。[/b]RBM 是一次完整的战斗大修,有自己的伤害模型、护甲系统等等。这个模组只是很窄的一片,阵线组织,作为独立模组。两者同时运行是可行的,但它们会修改若干相同的 AI 方法,所以近战中偶尔会出现奇怪行为。RBM 的前线纪律版本也比这个更宽松,所以你某种程度上是在让两种理念互相较劲。
[b]命令执行是刻意字面的。[/b]模组对你的命令尊重到近乎死板。如果你冲进糟糕的地形,它会把士兵组织成一条非常整齐的阵线,然后让他们死在那里。
[line]
[size=5][b]兼容性[/b][/size]
[b]兼容:[/b]
[list]
[][b]体力系统模组[/b],通过反射主动检测。休息中的士兵会被完全放过,而不是被硬推回他们太累而守不住的阵线。[/]
[][b]AI 踢击和盾击[/b](我的另一个模组)。踢击和盾击在那里,阵线纪律在这里。设计上不重叠。[/]
[]入伍、RTS Camera 以及大多数 UI/战役模组。[/]
[]不会修改相同 AI 方法的战斗大修。由于间距由武器长度推导,模组武器无需配置即可正确工作。[/]
[/list]
[b]有重叠(可用,但会出现奇怪行为):[/b]
[list]
[]RBM AI 以及任何其他修改 Formation.GetOrderPositionOfUnit、Formation.GetDirectionOfUnit、HumanAIComponent.GetFormationFrame、HumanAIComponent.SetBehaviorValueSet 或 HumanAIComponent.ParallelUpdateFormationMovement 的模组。两个模组都会运行,但在共享方法上你会得到两者的混合,而哪个获胜不是任一作者能控制的。[/]
[/list]
[b]确实会破坏东西:[/b]
[list]
[]在 agent 上禁用 OnAIInputSet 引擎回调的模组。这个模组每秒两次重新设置该标志,正是因为其他模组会把它关掉,但如果有什么东西关得比这更频繁,后排行为就会停止工作。[/]
[/list]
[line]
[size=5][b]性能(请阅读)[/b][/size]
[b]这个模组会消耗你的帧数。[/b]这一段没有哪个版本能说它不会。
逻辑在每名士兵、每一帧、多个线程上运行。这不是设计缺陷,这就是这个模组[i]本身[/i],一个士兵不检查左边有谁,就没法判断自己左侧有没有支援,而五百名士兵每秒检查六十次,不管你怎么写都很昂贵。
第一个能用的版本在两军开始冲锋的瞬间,大型战斗中会掉到[b]大约 15 FPS[/b],而那正是你最想看的时刻。当前版本在同样情况下为[b]25 到 40 FPS[/b]。做到这一点,靠的是按线程池化空间查询而不是每次重新分配,仅这一项每秒就消除了超过十万次分配;把军队规模和步兵比例这类昂贵计数缓存到一个半秒窗口上,供每个提出相同问题的 agent 共享;锁定所有共享状态,因为竞态条件只在大量并发模组负载下才出现,而且找起来极其难受;以及在任何昂贵操作运行之前,先通过一次廉价的近距离检查提前退出所有热路径。
这就是上限了。再压榨更多就意味着砍掉决策本身,那就违背了安装它的意义。所以:如果你在一般硬件上跑 1000 单位战斗,先降低战场规模,而不是删掉这个模组。如果你在原版下已经处于可玩边缘,这个模组会把你推过去。
这是 AI 真正在思考的代价。我宁愿你在下载前就知道,而不是下载后。
[line]
[size=5][b]安装[/b][/size]
[list=1]
[]从文件标签页下载。[/]
[]解压到 ...\Mount & Blade II Bannerlord\Modules[/]
[]在启动器中启用 [b]Frontline Mod[/b]。[/]
[]加载顺序无关紧要,没有依赖。[/]
[/list]
没有 MCM,没有配置文件,没什么可调的。它会自行激活。
[line]
[size=5][b]常见问题[/b][/size]
[b]战斗中我需要做什么吗?[/b]
不需要。像平常一样给步兵下达冲锋或前进命令。当阵线相距约 6 米时,模组就会介入。
[b]攻城呢?[/b]
目前不支持。逻辑假设是开阔地形和两条面对面的阵线;梯子和瓶颈会打破其中大部分假设。
[b]对敌方 AI 也有效吗?[/b]
是的,双方受到同样处理。这很大程度上正是重点,你可以看着敌人列阵对抗你。
[b]战斗会变长吗?[/b]
会,而且是故意的。两条阵线互相试探,直到一方让开,这才是战斗真正的样子。如果你想四十秒结束,那这个模组不适合你。
[b]它能修复 AI 走下悬崖 / 无视地形吗?[/b]
不能。那是引擎的导航网格,远远超出了这个模组触及的范围。
[b]能和 RBM AI 一起用吗?[/b]
能运行,也不会崩溃,但两者修改了若干相同的方法,你会得到两者的混合,而不是任一者按设计工作。如果你想要这个模组描述的行为,就别开 RBM AI。
[line]
[size=5][b]报告 Bug[/b][/size]
具体的报告会被修复。“AI 很奇怪”不会。有用的细节:双方大致的军队规模、你下达了什么命令、地形,以及你的完整模组列表。截图和视频帮助极大,这个模组里很多调整之所以存在,就是因为有人贴了一段士兵做蠢事的视频,让我能立刻理解。
感谢 [b]miniBrownie[/b] 和 [b]v0ry4[/b] 一贯优秀的 bug 报告。
[line]
[center][i]使用 Harmony 构建。针对反编译的游戏内部实现进行验证,而不是靠猜测,所以它往往不会在游戏更新时失效。[/i][/center]
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。