漫天糖

游戏要闻 - 2021年3月17日

GTA 5祖传“屎山”代码终于修复 R星认可黑客方案还给他发了1万美元奖金

折磨全球无数GTA 5玩家的联机版超长加载时间问题,终于要修复了。什么?R星(游戏开发商RockStar)主动改善玩家游戏体验?不存在的。打开GTA 5联机版,要跑19.8亿次if语句,一支烟的功夫游戏都加载不完。这堪称游戏开发史上最大的“屎山”代码,存在了7年,R星从没想过要修复…

玩家对GTA 5联机版可谓又爱又恨,有人甚至破口大骂:

直到一位黑客大哥路过,实在忍不了恶臭的代码,嘲讽完R星后,随手按了“冲水键”,直接将等待时间压缩70%。

鉴于R星失误实在太低级太离谱,而这位老哥的方法又太有效,以致无数玩家称他“功德无量”。

如果平均给每个玩家节省10秒,全球500万玩家一天就能节约5000万秒,一年中,节约的总时间大概能有数十年。相当于挽救了十多个人的生命!

R星这才坐不住了,赶忙官宣修复bug,不但采用了黑客的方案,还大方的给他奖励了1万美元“赏金”。

(注:所谓“屎山”,是程序员间流传的一个梗,指陈年累月且复杂低效的代码,因为改动成本巨大,所有人避之不及。)

黑客“治病救人”

不久前,量子位曾经介绍过黑客大哥通过逆编译器检查GTA 5,并且重写代码,一下节约70%加载时间的故事。

先来前情回顾一下。

简单地说,就是GTA 5联机版加载时间长得过分,有超过80%的玩家要等3分钟以上,有的人甚至要等15-20分钟。

一位黑客大哥实在忍不了,于是决定开扒GTA 5的代码,看看到底是哪里出了问题。

首先,他用Windows任务管理器,来判断联机版GTA 5在启动时,都调用了哪些计算机资源。

在1分钟的时间分界线上,之前是加载的是单机和联机版通用的基础内容,之后是联机版独有的内容。

可以看到,联机版GTA 5,加载时调用大量CPU资源至少长达4分钟之久,而同时,内存、GPU、硬盘的使用情况几乎没有明显变化。

所以,问题大概率出在代码上。

黑客大哥说:

我闻到一股烂代码的味道…..

为了找出到底那一部分程序卡住了CPU,他使用了工具Luke Stackwalker,对CPU任务堆栈进行采样分析。

沿着调用栈往下走,发现问题出在一个sscanf函数上。

sscanf的功能是读取格式化的字符串中的数据,而在GTA 5中,它正在读取的是一个10M左右,有63000多个条目的JSON文件。

这个文件到底是干什么用的?黑客大哥推测,这可能是游戏内购商店的相关内容。

再看第二个问题,这是一个存储命令,对象是item,具体是什么不得而知。

但是保存前,有一个if语句,逐一比较item内项目的哈希值,检查它们是否出现在某一列表中。

按照他计算,这一步if,要执行(63000^2 63000)/2 = 1984531500次!

没错,等待加载前的十多分钟里,GTA 5用你的CPU,执行了19.8亿次if命令...

如此简单粗暴的编程思路,让这位老哥哭笑不得:

既然对象有唯一哈希值,那为什么不用hash map???

至于R星为什么不修正,有网友推测,最开始,if的循环次数并没有这么多,而是随着开发,条目不断增多,最后到了积重难返的地步。

而之前的代码结构,谁也不愿意去动。

就是这样一个低级的失误,让全球玩家至今每次打开游戏,都要上演一遍19.8亿次的if循环…

这是不是堪称游戏开发史上最意外的“屎山”代码?

如何冲掉“屎山”

第一个问题,黑客大哥采用hook大法,不一一读取字符串,而是:

hook strlen“缓存 “字符串起始和当前长度。如果在字符串范围内函数在此被调用,返回缓存的值

至于if语句问题,就更直接了——完全跳过重复检查,利用hash map插入项目,因为这些值是唯一的。

最后的结果如下:

现在,GTA 5联机版加载,从原来的6分钟,下降到现在的1分50秒!

而且,他用的还是七八年前的硬件配置。CPU,是老而弥坚的AMD FX-8350,2012年上市,采用“推土机”架构,超频潜力惊人。而显卡,还是GTX 1070。

随后他将修改好的代码打包,上传到了Github,免费供玩家下载。

但是,他也提醒玩家,私自改动游戏文件,可能有被封号的风险。他本人也面临潜在的法律风险。

所以,他无论在博客还是GitHub上,都没有留下任何身份信息。

黑客大哥提前拿了一笔“年终奖”

但是现在黑客大哥不用担心了。

因为,这篇揭R星老底的帖子在全网大火,R星不得不出面应对。

在和他联系后,R星认可了他的改进方法,宣布在后续更新中修复相关问题,并且还慷慨的给他付了一笔1万美元的奖金。

“事了拂衣去,不留功与名”,这位黑客大哥被无数玩家膜拜。当然大家也不忘再把R星拖出来“鞭尸”。

有人吐槽,GTA 5仅2020年就买了2000万份,累计销量更是达到1.4亿份,R星每年都能从这个项目上赚数亿美元,但是却不肯花几分钟去解决这么一个低级错误,实在可耻。

还有人抨击R星几乎从不与玩家社区互动,玩家提的意见也从来充耳不闻,直到这次被被黑客嘲讽打脸,才不得不出来表态。

事后,黑客大哥还透露了一丝身份信息,原来他人在拉脱维亚。

拉脱维亚是波罗的海国家,原来是前苏联加盟国之一。在网上搜索相关信息,可以发现“拉脱维亚黑客”,几乎是和俄罗斯黑客一样传奇神秘的存在。

有网友爆料,在拉脱维亚,普通程序员工资平均3-4K欧元(23000-31000人民币)。

而他领到的这1万美元奖金,相当于三四个月工资了。

提前领了一笔“年终奖”,黑客大哥表示很开心。同时他也说,将密切关注GTA 5未来更新,一丝不苟的检查修复情况。

不知道他还能不能从R星领走更多奖金。

 

稿源:量子位

推荐内容

受欢迎的

最新

Related

顶级国漫强烈推荐《影子猫》

2021年4月16日

《蜡笔小新》全新动画电影正式海报 追加角色公开

2021年3月10日

国产游戏掌机AYA Neo海外火爆众筹:超额认购2606%

2021年3月10日

超级任天堂世界主题公园将于3月18日正式开园

2021年3月10日

《EVA新剧场版:终》主题歌“One Last Kiss”MV公布

2021年3月10日

现实版“Plash Speed”?越南玩家为骗过妻子买PS5上演好戏

2021年3月11日

新款Switch主机的开发机已送至开发者手中

2021年3月11日

《新世纪福音战士新剧场版:终》“本预告·改”影像公开

2021年3月11日

《新世纪福音战士 新剧场版:终》开场动画公布

2021年3月11日

顶级国漫强烈推荐《影子猫》

2021年4月16日

漫画「古见同学有交流障碍症。」宣布动画化

2021年5月9日

舞台剧「忧国的莫里亚蒂」case2角色定妆照公布

2021年5月9日

漫画「赛马娘 芦毛灰姑娘」开通官推 公开最新宣传贺图

2021年5月9日

「机动战士高达 闪光的哈萨维」含OP正片影像公开

2021年5月9日

剧场版动画「普罗米亚」公开中文预告及海报

2021年5月9日

「天宝伏妖录」第二季ED正式PV上线

2021年5月9日

动画「轰天高校生」开放官网和推特

2021年5月9日

「86-不存在的战区-」弗拉迪蕾娜·米丽洁1/7手办登场

2021年5月9日

广东打掉游戏机走私团伙 查扣游戏机价值七千多万

2021年4月4日

NS格斗游戏《Arms》同名漫画取消 作者不愿多谈

2021年3月13日

月度更新

相关推荐

最近更新

漫画资讯 - 2021年4月16日

顶级国漫强烈推荐《影子猫》

B站阅读地址: https://manga.bilibili.com/detail/mc25706 影子猫——...

阅读更多...

0分享

漫画资讯 - 2021年5月9日

漫画「古见同学有交流障碍症。」宣布动画化

阅读更多...

0分享

业界快讯 - 2021年5月9日

舞台剧「忧国的莫里亚蒂」case2角色定妆照公布

阅读更多...

0分享

漫画资讯 - 2021年5月9日

漫画「赛马娘 芦毛灰姑娘」开通官推 公开最新宣传贺图

阅读更多...

0分享

动漫电影 - 2021年5月9日

「机动战士高达 闪光的哈萨维」含OP正片影像公开

阅读更多...

0分享

动漫电影 - 2021年5月9日

剧场版动画「普罗米亚」公开中文预告及海报

剧场版动画「普罗米亚」(PROMARE)公开了中文预告片和最新海报,并宣布引进内地,档期暂未确定。STAFF导演:今石洋之编剧:中岛一树音乐:泽野弘之美术:垣田由…

阅读更多...

0分享

业界快讯 - 2021年5月9日

「天宝伏妖录」第二季ED正式PV上线

昨日(5月7日),动画「天宝伏妖录」发布了第二季ED「余烬」正式PV。该作已于4月25日播出,目前更新至第三话。动画「天宝伏妖录」第二季ED「余烬」 演唱:李洪威…

阅读更多...

0分享

动画资讯 - 2021年5月9日

动画「轰天高校生」开放官网和推特

昨日(5月7日),由Netflix出品的动画「轰天高校生(Spriggan)」开放了官方网站和推特。该动画改编自1989年高树宙原创,皆川亮二负责作画的同名漫画。该作计划于202…

阅读更多...

0分享