长沙市雨花区锐得信息技术工作室 Win11的更新,给20年前的GTA带来了新BUG

Silent是一位小知名气的游戏MOD作家长沙市雨花区锐得信息技术工作室,同期亦然专攻逆向工程的游戏开发者。他平日里最大的乐趣即是为那些旧世代的经典游戏制作各式MOD和开荒补丁,这已经过中,当然也包括匡助玩家们不停各种罕有乖癖的BUG。
比如最近,Silent就收到了一份令他颇感浑沌的BUG叙述——有位使用了他制作的原版《GTA:圣安地列斯》开荒补丁的玩家响应,在系统更新至Windows11 24H2版块后,游戏内的水上飞机Skimmer离奇消失。

早在昨年Windows11推出了24H2版纪律后,Silent时往往就会收到水上飞机消失的BUG叙述。
他正本以为可能是我方的开荒补丁与新的系统版块无法兼容,但在邀请了其他玩家测试事后,他发现未安设任何MOD的白嫩版游戏在更新到了24H2版块后也可能碰到相通的问题。
为了考证访佛的问题是否会在我方的电脑上复现,Silent搭建了Windows11 24H2 诬捏机,并使用剧本生成了水上飞机Skimmer。成果在他试验完号令的斯须,主角CJ顿然原地腾飞至10.3千万亿米的高度,游戏画面径直卡死。

经过一番排查,Silent发现问题的根源在于水上飞机Skimmer模子的范围框Z轴坐标被设定为了一个极其拒抗常的数字,而这个罪行源于游戏竖立文献短少了界说轮子尺寸的参数,导致在开动化吊挂系统时,罪行地更新了Z轴的上限。

至于为何会出现这么的问题,Silent合计可能是在前作《侠盗猎车手:罪责齐市》里并不存在“飞机”这一类别,Skimmer是游戏中唯二能被玩家操控的飞机,因此在磋磨上并莫得界说这些值。
到了《圣安地列斯》中,Skimmer的载具类型被改为飞机 ,但开发东说念主员却健忘了添加极端的参数。
在旧版操作系统中,内存堆栈的分拨和不停相貌与新版系统不同。游戏代码在处理完一辆载具的轮子尺寸后,存储这些尺寸的栈内存并莫得被立即掩盖。简便来说就是,水上飞机的数据短少轮子尺寸信息,代码罪行地沿用了上一辆载具的轮子尺寸,随机地让Skimmer得以拼集平常运行。
Windows 11 24H2 更新转变了内存堆栈使用相貌,使用了更多的栈空间,从而掩盖了残留值,最终导致Skimmer的Z轴数值出错,并由此激勉了后续的一系列 BUG。

诚然,水上飞机消失的BUG与Windows 11的24H2版块更新无关,因为WinAPI 函数使用堆栈的相貌之类的本色不受敛迹,随时可能修改。果然的问题在于游戏代码自己存在编写不实,以及官方对游戏后续更新的救助力度不及。
借此契机,Silent还查验了《GTA:圣安地列斯》其他版块的二进制文献。他发现,早在率先的Xbox版中,官方其实就已经开荒了这个BUG,况且这一开荒沿用到了其后发布的Android、Xbox 360、PS3乃至最终版等多个版块。

不外,在2005年发售的PC原版当中,官方恒久莫得推送开荒补丁不停这一问题,这个BUG便也消失了近20年之久。
淌若换作念是别的游戏,这类离奇的BUG能够永恒不会取得不停,并就此成为玩家们以心传心的齐市神话。值得侥幸的是,哪怕是20年前的GTA,时于本日仍有渊博MOD作家在致力优化游戏体验,排查各式潜在的BUG。
这个案例关于那些可爱钻研老游戏的玩家们来说,也算是又提了个醒:升级Windows系统,如故严慎为妙。