NBA2K11中的一个小小成就
开局一张图
照例宣传一下自己用来记2K11投篮点数据的注入库,以及时不常更新的乔丹生涯模式投篮点全图。到目前为止,已经打到了第二个赛季后半段,积累的投篮点数据也接近两千个了。无论是用作进一步分析,还是单纯作为可视化的数据源,都已经达到可用的级别。原帖的地址见文末。
在NBA2K11中,我有个非常怪的恶趣味:在街球1 VS 1模式中,我总是试图用最强的球员对最弱的球员,看最多能够连续造成多少次投失。NBA2K系列一直以来都有球员能力值的下限,一般是总评40分左右;而联盟中能打的球员基本不会低于60——毕竟这还是2011年的NBA呀!打篮球的人都明白,NBA再差也是真正顶级联赛,不会出现“校队中锋防死小托马斯”这样意淫的结果。同样地,由于整个游戏都是基于概率、随机数发生器而制作出来的,场上任何事情都和概率有关,故任何球员在无限时间内进球得分是必然事件。因此,挑战从头开始,最多连续防下球数,变成了一种检测自己键盘操作防守水平的挑战。
当然,为了保持每次玩的时候条件大致相当,我一般都会在“NBA Stars”球员集合中选择一名球星,如迈克尔-乔丹或者勒布朗-詹姆斯;并另在97-98年爵士名单底部选择机器人John Brown或David Miller——因为它们是由菜单出发,按键次数最少、能够选到的能力值最低的球员。不用修改器,不造特殊情况,就看游戏默认名单中能力最悬殊的球员间能够碰出怎样的火花。
同样,为了省时间,在游戏过程中我还会投机取巧。每次球权给到我方时,直接投超远三分造成长篮板或出界,防止对方直接拿球快攻;每次抢到后场篮板时,选择直接投篮造成没出三秒失误球权转换,以直接重新发球;其他情况尽量让对方机器人捡到篮板继续进攻,从而最大化刷投失个数的效率。
最后,不得不提的是机器人自带的一个特性:在这个模式这个名单中,机器人中锋三分倾向很高。或许是因为其各个区域投篮属性都太低了,其不得不选择了魔球式打法——只投三分和三秒区内内线进攻。三分还好说,三秒区内进攻的防守就比较考验技术了。因此,一个投篮冷图上三分线内的红叉个数,更能反映比赛中打铁的激烈程度。
数学考量
这个挑战的本质还是算概率,尤其是有了注入库的帮助后,我能看到每一次进攻电脑给出的命中概率,从而更好地判断我的防守效果。
2K11中投篮命中的判断大致是这样的:出手时,球离手前电脑会计算一个命中概率,称之为预计命中率。如果没有人干扰,那么是否进球就会根据这个概率判定;如果有人干扰,则会相应生成一个干扰后的命中概率,并判定是否命中。同时,盖帽、板后出手、筐下出手等受物理条件限制的投篮,会优先考虑球的运动轨迹是否与其他物体产生碰撞。有时预计命中率是100%,但途中被人抓帽,结果一样是投失。
2K11的球员动作与对抗模型既包含了续作中所谓“播片引擎”的预置动作回放模式,又包含了类似于NBA Live的即时运算的碰撞模式。因此,在防守一名球员时,比如进入了背打状态,不能完全认为后面将会“播片”shimmy shake翻身跳投,而还需考虑球员突然脱离预置动作,溜进去上篮。所以,最好的防守是尽快造成对手持球,而在单挑中持球后电脑会立即选择出手,此时无论是尝试盖帽,还是紧逼防守,都能最大程度降低对手的预计命中率。
一段时间的观察后,我发现机器人中锋的三分命中率大致符合这样的情况:当手感正常黄色时且无防守时,底角到弧顶的平均值大约在30%上下;当有防守时,大约会下降到25%。当手感冰冷深蓝色无防守时,大约22%,而有防守时最低约为17%。当然,如果逼出三分线一步以外,最低命中率甚至可以下探到10%以下,但这种情况可遇而不可求。
而机器人的中距离和近距离水平就相对较好。中距离无防守正常手感大约有40%,而内线更高60%不在话下。对于中距离的防守策略,一定是逼其持球或形成背打,从而尝试盖帽或严重干扰投篮;而对于篮下的防守,只要放空篮,一定是功亏一篑。因此不惜一切代价也要阻止其形成上篮或扣篮。
以这些数据做粗略的估算。倘若取机器人投失概率为75%(综合所有投篮而论已经很高了),如果想防守使其连续投失10球,概率是75%^10 = 5.63%;连续投失15球的概率是1.34%;连续投失20球的概率是0.32%!如果你不知道这个数字是什么概念,可以与另一个数字进行比较:满能力值乔丹中圈预计命中率为8%左右,后场弧顶约为3%。
当然,光看这一个数据并不科学,而且在游戏中我也逐渐体会到,预计命中率绝非唯一判定条件——受干扰后的投失概率会激增,应该是系统在计算最后概率时,给成功防守加了更多的权重。实际体会而言,连续防住15球的难度大约与中圈前一步出手命中概率相当;连续防住20球难度大于无防守中圈命中,但远小于单挑11投11中结束比赛——尽管二者计算所得的概率数量级相当。
达成
12月20日,在我玩儿2K11大约8年后,我终于在一场酣畅淋漓的防守挑战中“锁死”了对手,使其连续21球不中。截图中只显示了20球,是因为你永远不知道下一秒对手是否会投中,而侥幸心理总会驱使你相信对方在深蓝手感、封到脸上时不可能投进三分,从而采取更激进更大胆的防守策略。而事情就是那么神奇,当我自信地认为对手完全投不进时,他偏偏就来个中锋后仰三分。唰地一声,篮球应声入网。
整个回合中最困难的部分在于一波篮下三连成功防守,也就是图中三秒区右侧的红叉。第一次防守是故意让其背打进内线制造干扰投失,但未曾想到其抢到前场篮板;奋力防下第二波篮下勾手后又被抢到了前场篮板,接近绝望时狂按盖帽键,竟然以45%左右的预计命中率防下了这局最关键的一球!拿到篮板,长吁一口气,赶紧重新洗球来过。
最后上个福利结束这篇毫无价值的博文。在真正的赛季比赛中,一般詹韦波预计命中率过58%都是必进的感觉。图中66%便是一个例子。
原帖地址:https://bbs.eyeuc.com/t/78399
Repo地址 个人数据更新
最新编译版本从TrainerRelease 文件夹中下载,稳定版可使用Release 中新commit次数 < 5次的版本。
需要一定调试基础才能使用。欢迎一切意见建议,也欢迎各种移植到其他较新的2K版本中~
最初是被老大退役纪念图所启发的。当时就想,如果能做一个自己的2K版本的记录器就好了,等通关乔丹模式时候一定也能像这张图一样震撼。
科比-布莱恩特生涯投篮点记录(GFW):https://graphics.latimes.com/kobe-every-shot-ever/
制作过程费了一番周折,目前迭代到1.1.0版本,功能基本稳定了。恰巧看到虎扑上有人讨论2K11来到本论坛,干脆把这个玩具发出来供大家试用,如果有新的需求或bug也好继续提升。
使用方法
下载后的d3d9.dll和court.png放到游戏程序文件所在根目录下。如果之前存在fxaa或其他插件引入的d3d9.dll,请先备份并移除,暂时无法兼容多个插件的注入。
运行前需要确保注册表内有关2K11的两个键值存在且正常,因为数据文件会导出到注册表指定的Saves路径下。
确保游戏程序文件的版本为1.0.1.1,参考校验值为: 大小: 111800320 字节 文件版本: 1.00 修改时间: 2011年2月15日, 1:41:18 MD5: 78F9C12843F12098712378029913F5F0 SHA1: 78BB321C76426AF488F5FCE7C5B1476AB455876C CRC32: 780DA691
原始的1.0版本应该是用不了的,因为程序里地址我都写死了懒得测试,如果真的需要以后可以加入寻址功能。?
如果能成功进入游戏并在左上角显示状态,那么已经成功了一大半。目前设计的模式有全部记录模式和乔丹模式两种。前者会记录任何游戏模式中自己出手的投篮点数据并存为文件(但有时会存在偏差);后者记录乔丹MP模式中比赛对阵、所有比赛数据以及投篮点数据,便于后期分析。
主要通过 F5记录模式 F6记录开关 F7全进开关 和 F8显示开关 四个功能键控制。更多的可以参考Repo内的介绍。
保存后的数据文件可通过Repo内的Python脚本绘制成如上的Plotly网页形式,并保存为PNG等图片格式。
限制
-
只支持1.0.1.1版本程序,也就是第一次官方升级后的源程序
-
由于是个人开发,主要根据乔丹模式设计的,其他模式可能考虑不周,欢迎各种意见
-
需要手动F6控制记录开始和结束
-
目录与注册表可能需要全英文,未曾测试
- Windows7及以下版本的通知中心未兼容
-
把
C:\WINDOWS\system32\d3d9.dll
写死在代码里了,如果这里没有对应文件就无法载入游戏了…… - 还有个最重要的问题忘了……全部记录模式中投篮点的记录以依赖按下Z键(本人的投篮键)进行判定的。后来因为一直在玩乔丹模式就没有继续优化这个逻辑。如果使用F5 Mode All时不能记录数据应该是因为投篮键不一样导致的…如果有需要可以留言一下常用投篮键是哪些,以后更新版本时提供外部设置文件来改进……
Leave a Comment