查看: 1002|回复: 7

[原创] ai进行比赛引擎逆向拆解:球员角色与职责到底是不是噱头?以 Modric 踢中场为例

[复制链接]
发表于 2026-11-9 08:49 | 显示全部楼层 |阅读模式
fm2010开始引入了球员角色与职责(Roles & Duties),我们看看到底是不是噱头!后续分析fm2027,先试试水
用ida反编译了fm2010.exe,再用ai分析。

====================================================================
一、 太长不看版(核心结论)
====================================================================

通过对 FM2010 主程序(FM.exe,约 66045 个反编译函数)的底层逆向分析,关于“球员角色与职责”在比赛引擎里的真实作用,结论如下:

1. 角色和职责没有任何属性加成。
在计算球员场上有效属性的底层函数(14ED750)里,没有任何角色或职责的乘数。把 Modric 设成组织核心(DLP),他的传球、视野、技术不会多出哪怕 0.1 的隐藏加成。

2. 角色不是纯噱头,但对中场(CM)来说只是一组“微调开关”,远谈不上质变。
角色通过两条途径影响比赛:
第一,通过战术创建器(Tactics Creator)给出一套默认的个人指令(心态、逼抢、直塞等滑块预设)。
第二,在比赛引擎的少数决策分支里,读取角色标志位(位于球员对象偏移 +4704),用来微调射门门槛、候选动作平局时的优先级,以及是否默认紧盯。

3. 惊人发现:BWM(抢球机器)在比赛引擎里没有任何专属AI代码!
穷尽扫描整个比赛引擎后确认:没有任何决策函数读取 BWM 的角色位(0x10000000)。也就是说,BWM 纯粹就是一个“滑块预设包”。更反直觉的是,标准 CM 在底层有一个“默认紧盯”标记,切换到 BWM 反而把这个标记丢了。

4. “我用标准 CM 改几个个人设置,是不是就和 DLP / BWM 一样了?”
—— 对 BWM 来说:完全一样,甚至用 CM 手改滑块在防守紧盯上还多一个底层加成。
—— 对 DLP / B2B / AP 来说:90% 一样,剩下 10% 是引擎硬编码的微调(主要是远射门槛和动作平局时的让位逻辑),这部分改滑块无法复刻,但影响幅度很小。

5. 真正决定场上表现的大头是什么?
是“球员属性 + 习惯动作(PPM) + 个人指令滑块 + 职责(Support/Attack)”。在引擎代码里,读取 PPM 的地方有 49 处,而读取 DLP 角色的只有 6 处,读取 B2B 的只有 3 处,BWM 是 0 处。而且 PPM 还会直接覆盖你选的角色!


====================================================================
二、 角色在引擎底层是怎么运作的?(三条通道)
====================================================================

当你给一名球员选定角色(比如 DLP)和职责(比如 Support)时,游戏底层发生了三件事:

【通道 A:战术创建器预设(滑块默认值)】
在战术面板里选角色,战术创建器(函数 14686D0 / 14716C0)会根据“角色 + 职责 + 位置 + 球队整体风格”,自动帮你算出心态、创造自由度、传球方式、逼抢、铲球、带球、远射、直塞、传中等个人指令的数值。
注意:如果你不用战术向导,或者你选完角色后自己手动把滑块全改了,那通道 A 的预设就被你覆盖了。比赛进行时,玩家手动控制的球队不会在后台偷偷重跑创建器来覆盖你的滑块(函数 149F780 / 1499810 证实了这一点)。

【通道 B:比赛引擎硬编码的角色判定(真正的专属AI)】
进入比赛后,战术槽位里的角色掩码被复制到比赛球员对象的 +4704 偏移处。引擎在决定“这球该射门、传球还是带球”时,有一小批判定函数会去读 +4704。这就是手动改滑块绝对改不出来的“角色专属效果”。

【通道 C:角色适配度评分(界面上的绿圈/星级)】
函数 14A4110 会根据角色的关键属性表(函数 14676B0)给球员打一个适配分。
重点辟谣:这个分数 100% 只提供给 AI 主帅选人、换人,以及在界面上画星级用。它绝对不会传进比赛引擎的动作结算里!哪怕 Modric 踢 BWM 的角色适配度很低,他在场上抢断、传球的成功率也只看他自己的抢断和传球属性,不会因为“不适配角色”而被引擎扣能力。


====================================================================
三、 引擎里的“角色漂移”:PPM 习惯动作会篡改你选的角色!
====================================================================

这是本次逆向最核心的发现之一。
引擎在通道 B 里判断一个中场是不是 DLP、B2B 或 AP 时,调用的不是“他是不是 DLP”,而是三个“他像不像某角色”的判定函数(14AB680、14AB610、14AB5D0)。

在中场这个维度上,引擎把角色分成低、中、高三档梯度:
低档 = DLP(拖后组织核心,位 0x8000)
中档 = B2B(全能中场,位 0x10000)
高档 = AP(前场组织核心,位 0x20000)

但是,这三个判定函数同时读取了球员的 PPM(习惯动作,位 0x100 代表“喜欢远射 Shoots From Distance”):

1. 引擎判定为“DLP 型”(函数 14AB680)的真实条件:
战术板选了 DLP,并且该球员【没有】“喜欢远射”习惯。
—— 如果你的 DLP 有“喜欢远射”习惯,这个函数直接返回 0!他在引擎眼里就不再是 DLP 了!

2. 引擎判定为“B2B 型”(函数 14AB610,基于最终版补丁数据版本)的真实条件:
如果球员【有】“喜欢远射”习惯,那么只有当你选了 DLP 时,他才被算作 B2B 型!
—— 换句话说:一个带“喜欢远射”的 DLP,在引擎底层会自动升档变成 B2B!

3. 引擎判定为“AP 型”(函数 14AB5D0)的真实条件:
战术板选了 AP;或者战术板选了 B2B,但球员【有】“喜欢远射”习惯。
—— 也就是说:一个带“喜欢远射”的 B2B,在引擎底层会自动升档变成 AP(前场组织核心)!

同样的漂移在前锋和后卫身上也存在:
- 拖后前锋(DLF)如果带“经常盘带”习惯,底层直接当成突前前锋(AF)处理。
- 突前前锋(AF)如果带“极少盘带”习惯,底层直接降档成拖后前锋(DLF)。
- 清道夫(SW)如果带“经常尝试致命直塞”习惯,底层直接当成自由人(Libero)。

结论:习惯动作(PPM)在引擎里的优先级高于角色设定。给球员练错一个习惯,你选的角色在底层逻辑里就直接变味了。


====================================================================
四、 以 Modric 踢 CM 位置为例:五种角色在比赛中到底差在哪?
====================================================================

假设我们把 Modric 放在中前卫 M(C) 位置,且你手动把所有个人滑块(心态、逼抢、直塞、远射等)调成完全一样,那么只切换角色名字,一场比赛下来他在引擎底层究竟有什么区别?

我们把五种中场角色逐个拆开看:

--------------------------------------------------------------------
1. 标准中前卫(CM,位 0x20)—— 隐藏的防守紧盯加成
--------------------------------------------------------------------
- 专属进攻AI:无(既不算 DLP 型,也不算 B2B / AP 型)。
- 专属防守AI:【有,而且很重要!】
在防守盯人判定函数(14A7500)里,除非球员有“紧盯对手”习惯,或者针对性指令设了紧盯,否则引擎默认只有 CM 档(位 0x20)返回 True!
这个紧盯判定被 10 个核心防守评估函数调用(如 15E7320、15F4EE0、15D6A40)。一旦返回 False,某项防守评估权重直接打 75 折(乘以 3/4),且跟防距离阈值变松。
也就是说:选普通 CM,Modric 默认带一个底层“紧盯”开关。一旦你把他改成 DLP、B2B、AP 甚至 BWM,由于角色位替换掉了 0x20,这个默认紧盯开关反而关掉了!(除非你手动给他开紧盯指令,或他有紧盯 PPM)。

--------------------------------------------------------------------
2. 抢球机器(BWM,位 0x10000000)—— 彻底的“滑块预设包”
--------------------------------------------------------------------
- 专属进攻AI:无(0 个函数读取)。
- 专属防守AI:无(0 个函数读取,而且丢掉了普通 CM 的默认紧盯位)。
- 职责限制:只能选防守(Defend)或策应(Support),不能选进攻(Attack)。
- 真相揭秘:
官方说明写得天花乱坠,说 BWM 会疯狗一样逼抢、夺回球权后交给有创造力的队友。但在代码里,BWM 的一切表现 100% 来自战术创建器给它拉满的“逼抢”、“凶狠铲球”和拉低的“创造自由度 / 带球”滑块。
如果你用普通 CM,手动把逼抢拉满、铲球设凶狠、传球设简短,他在场上的表现不仅 100% 涵盖 BWM,甚至还比 BWM 多一个普通 CM 自带的底层紧盯判定!

--------------------------------------------------------------------
3. 拖后组织核心(DLP,位 0x8000)—— 抑制浪射 + 动作让位
--------------------------------------------------------------------
(前提:Modric 没有“喜欢远射”习惯,否则他底层会变成 B2B)
- 射门决策(函数 15961F0,共约 17 处调用):
引擎在判断“要不要起脚射门”时,对普通中场只需满足【射门采样值 > 距离/10】即可进入下一层射门判定;但对 DLP 型球员,引擎额外加了两道锁:必须同时满足【射门采样值 > 采样值4540】且【采样值4564 为 0】才允许起脚。
大白话:哪怕远射滑块设得一样,DLP 在底层也会被强行捂住枪管,明显更少浪射,把球留下来继续组织。
- 最终动作选择(函数 15B99D0):
当多个候选动作(比如传球、带球、保持球)的AI评分刚好打平时,DLP 会主动放弃其中一个偏个人处理的动作类别,让位给其他动作。
- 职责限制:只能选防守(Defend)或策应(Support)。

--------------------------------------------------------------------
4. 全能中场(B2B,位 0x10000)—— 锁定策应职责 + 轻度动作让位
--------------------------------------------------------------------
- 射门决策:和普通 CM 完全一样,没有 DLP 的禁射锁,也没有 AP 的浪射加成。
- 最终动作选择(函数 15B99D0):
同样有候选动作打平时的让位逻辑,但触发门槛比 DLP 严格得多(需要满足【采样值4540 > 采样值4580】才让位)。
- 职责限制:强制锁定为策应(Support)。
- 真相揭秘:
B2B 在底层代码里的专属触点极少(仅 3 个函数调用)。它之所以在场上表现出“禁区到禁区”的跑动,95% 是因为创建器给它的预设滑块(高心态、高前插、高远射、高逼抢、允许游走)以及它强制绑定了 Support 职责。另外,B2B 的关键属性表高达 18 项(全游戏最全面),这影响了 AI 选谁来踢 B2B,但不影响比赛计算。

--------------------------------------------------------------------
5. 前场组织核心(AP,位 0x20000)—— 明显的开火权与进攻倾向
--------------------------------------------------------------------
- 射门决策(函数 15961F0):
第一,在计算是否考虑射门的距离窗口 v18(基础值约 200)时,AP 型球员直接白嫖【+ 射门采样值 + 25】的额外窗口(代码 331-333 行)!窗口越大,越容易跨过“放弃射门”的门槛。
第二,在前面提到的 612 行射门子条件里,DLP 要过三道锁,普通 CM 要过一道锁(射门值 > 距离/10),而 AP 型是【无条件直接放行】!
- 动作阈值(函数 158D810):
在某项进攻动作的阈值计算中,Support 职责基础为 1,其他职责为 10,而 AP 型会额外 +5。
- 职责限制:只能选策应(Support)或进攻(Attack)。
- 真相揭秘:
AP 是中场角色里硬编码进攻加成最明显的。把 Modric 设成 AP,哪怕你把远射滑块调低,他在禁区前沿找机会起脚和尝试威胁动作的底层欲望也明显高于 CM 和 DLP。


====================================================================
五、 职责(Defend / Support / Attack)又是怎么影响比赛的?
====================================================================

职责不光改创建器滑块,在引擎里也有两个独立的判定函数:14A2130(是否策应 Support)和 14A2140(是否进攻 Attack),各自被 7 个核心决策函数调用。

举两个直接读到的代码例子:
1. 函数 15927B0(对动作类型 9、10、19 的评分修正):
只要球员是 Support 职责,这类动作评分直接 +1000(如果同时是全能前锋 CF 则 +3000)。Attack 和 Defend 职责在这里不加分。
2. 函数 15A68C0(某类接应/跑位动作评分):
如果球员不是 Support 职责且不满足条件 A,或者球员是 Attack 职责且不满足条件 B,动作得分直接清零。

所以,“职责”也是一层硬编码开关。CM(策应)和 DLP(策应)共享这套 Support 的底层加成;但 B2B 只能选策应,AP 不能选防守,DLP/BWM 不能选进攻——角色通过“限制可选职责”,间接锁死了这一层的AI倾向。


====================================================================
六、 彩蛋:AI 电脑球队根本不用战术板上的角色!
====================================================================

逆向函数 1499C50(长达 3911 行)时发现了一个有趣的机制:
电脑 AI 控制的球队在比赛里,根本不看战术槽位里预设是什么角色,而是根据场上球员的【当前属性】实时重新给每个人算角色档位!

以中场 DLP / B2B / AP 三档为例,AI 的自动分档公式(代码 2598-2638 行)核心看的是:
【基础分 = 2 × 球员有效远射属性(Long Shots)】
然后再根据场上比分(落后时 +10)、球员位置和部分隐藏项做加减:
- 算出来的分 < 0:AI 直接把这个中场当成 DLP 用。
- 算出来的分在 0 到阈值之间:当成 B2B 用。
- 算出来的分 > 阈值:当成 AP 用。

只有人类玩家控制的球队(通过 team+2224 标志位区分),引擎才老老实实按你在战术板上选的角色来跑。


====================================================================
七、 实战总结:给玩家的调教建议
====================================================================

1. 不用迷信 BWM(抢球机器)。
在 FM2010 里,BWM 没有半行专属引擎代码。如果你想让一名中场专职扫荡,直接选标准 CM(防守或策应),然后手动把逼抢、铲球、盯人调好,反而比选 BWM 多白嫖一个底层默认紧盯加成。

2. Modric 这种技术流中场怎么选角色?
- 如果你讨厌他浪射、希望他老老实实梳理球权:选 DLP(拖后组织核心),并且千万别让他练出“喜欢远射”习惯(如果已经有了这个习惯,选 DLP 也没用,底层会变 B2B)。
- 如果你希望他在禁区前沿多起脚、多威胁球门:选 AP(前场组织核心),引擎会给他放宽射门窗口并豁免射门限制条件。
- 如果你用传统滑块微调流:用标准 CM 手调滑块完全可行,能复刻出其他角色 90% 的效果。

3. 角色绿圈/星级(适配度)看看就好。
只要位置是绿的(自然位置 MC),角色适配度哪怕不满,也绝对不扣场上能力。一切以球员的实际属性、习惯动作(PPM)和个人指令滑块为准。

--------------------------------------------------------------------
【附:关键反编译函数索引(供技术考证)】
- 有效属性计算(证实无角色加成):sub_14ED750
- 角色适配度评分与关键属性表:sub_14A4110 / sub_14676B0
- 战术创建器主生成函数:sub_14686D0 / sub_14716C0
- 战术槽位复制到比赛球员(+4704):sub_14B2D50
- 习惯动作 PPM 表与判定函数:sub_D61180 / sub_14A7030
- 中场三档角色判定(含 PPM 漂移):sub_14AB680 (DLP) / sub_14AB610 (B2B) / sub_14AB5D0 (AP)
- 默认紧盯判定(CM 档专属):sub_14A7500
- 职责判定(Support / Attack):sub_14A2130 / sub_14A2140
- 射门决策函数(含 AP/DLP 分支):sub_15961F0
- 最终动作选择函数(含 DLP/B2B 平局让位):sub_15B99D0
- AI 球队自动按属性分档角色:sub_1499C50
发表于 2026-11-9 10:53 | 显示全部楼层
之前也有说个人习惯优先级最高,这次是把影响程度都列示出来了,好评。ai不按战术角色走这个之前我也隐约发现了,我都是按球员强度去针对的,这次也更清晰了。
发表于 2026-11-9 09:01 | 显示全部楼层
好贴,不得不感叹,Ai正在革命性重塑玩家对足球游戏的认识,实况足球最近也被Ai解出来底层代码了
发表于 2026-11-9 10:08 | 显示全部楼层
写得很好,我以后再也不设置抢球机器了,还有以后重点关注一下球员习惯,尽量位置和习惯适配。这是我的心得,大家补充看看还有什么
发表于 2026-11-9 10:21 | 显示全部楼层
意思是全部设置成CM,剩下根据战术需求手动设置更佳。当然,整体其实没太大区别
 楼主| 发表于 2026-11-9 11:01 | 显示全部楼层
lijinhui 发表于 2026-11-9 10:21
意思是全部设置成CM,剩下根据战术需求手动设置更佳。当然,整体其实没太大区别

只是fm2010,后面的版本没搞 不敢保证啊 说不定精进更新了
发表于 2026-11-9 14:02 | 显示全部楼层
darbra 发表于 2026-11-9 11:01
只是fm2010,后面的版本没搞 不敢保证啊 说不定精进更新了

再早几代感觉职责区别确实不大,这两三代还是有区别的,特别是接应逻辑,dlp跟普通dm主动要球跑位的逻辑完全不一样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|爆棚小组 PlayGM论坛

GMT+8, 2026-11-13 05:40 , Processed in 0.024397 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表