字: 大 中 小
关灯 护眼
零三小说 > 美利坚:游戏制作教父 > 第701章 时空幽灵,能够穿越现实时间的BUG(中秋快乐!!!)

第701章 时空幽灵,能够穿越现实时间的BUG(中秋快乐!!!)

    你相信这个世界上有幽灵存在吗?

    一个能够穿越时间,穿越空间,甚至穿梭在半导体的数字世界里的幽灵。

    它能悄无声息地破坏那些原本正常的代码。

    即便这个代码从头到尾都没有任何人动过。

    在代码仓库里,近一年都没有任何提交。

    连字节码哈希值都完全一致。

    但它就是坏了。

    因为开发组在一个完全无关的新版本里加入了物理引擎。

    这……

    简直就是一个存在於数码世界的鬼故事。

    不过任何一个科学无法解释的现象,或许都只是水平暂时达不到罢了。

    有的时候,真相或许并不会满足大家的期待。或许……真相其实非常简单,也非常蠢。

    「是……是开着的!」

    几人围在电脑前,看着那扇成功打开了的门,啧啧称奇。

    「原来是这样……」

    林立新坐在跟前,面露异色。

    作为一名现代人,其实在上手代码的第一时间,他的脑海中就已经有了大致的猜测。

    游戏圈有这样一个潜规则。

    如果说游戏里最容易踩坑的是哪两样东西。

    那莫过於门和浮点数了。

    qake2时期,这扇门是完全可以正常打开的。

    即便是门後有npc站着。

    这扇门在打开时,碰撞箱会恰好挤到npc的脚,制造一个非常微小的偏移,恰好容纳门正常通过。但在完全没有修改源码里任何一点东西的时候,为什麽这个门突然打不开了?

    即便是把硬体回退到nx而不是nf上,仍然是打不开?

    其实答案非常简单。

    源码一样跟机器码一样完全是两个概念。

    amenva上下全体工程师,在开发过程中的主要语言往往就两样。

    一个是完全自举,从始至终都是amenva坚实地基的n语言。

    一个彻头彻尾的高级语言,大量易用的、现代化的语法,将它武装成了一个专为游戏而生的超级语言。

    另一个则是nvascript,为网络世界而生的jit即时编译语言。

    而问题就出在n语言这家伙身上。

    从《雷神之锤2》到现在这段时间,除了源码外,到底还发生了哪些事呢?

    n语言的编译器更新了。

    为了适应越来越现代化的硬体,和更多更新鲜的语法糖以及高级语法。n语言几乎每隔一段时间都会推送一次更新。

    一台计算机(不管是游戏机还是pc还是掌机),想要运行代码,是不可能直接跑n语言这种高级语言的。

    它必须要被编译成机器码,编译成电脑能理解的版本才行。

    编译器在处理编译的过程中,本身就会对代码进行一次初步的优化。

    把一些不必要的循环解除,不必要的变量改成常量,降低性能的写法改成更高效的写法……

    也就是说,最终交给电脑运行的,其实跟程式设计师编写的根本不是同一个东西。

    《雷神之锤2》的源码的确从来没有动过。

    但编译器更新了。

    而这,连锁引发了一个极度不起眼,甚至根本没有人当回事的问题。

    浮点数精度变化。

    简单来说,就是现在的数字比以前更精确了。

    计算机为了性能,或者是为了实现某些必要的数学计算,往往在数字的处理上其实非常鬼畜。就像典中典之《我的世界minecraft》里的边境之地,其实就是一个典型的浮点数误差。

    由於整个世界坐标都是用的浮点数的问题,java在这个数字极大的时候,细微的误差会被不断积累放大。

    最终便导致了出现各种诡异的扭曲偏移。

    在这儿也是同理。

    小数点後的几位发生了变化。

    所以门打不开了,此案告破。

    当众人终於是把这个『穿越时空的幽灵』抓到时,直接被气笑了。

    就这样?

    真相就这样吗?

    人群之中,被临时喊来加班的前地球头号黑客,现役amenva首席安全顾问凯文·米特尼克脑门直冒黑线。

    他本期待着展开一场紧张刺激的黑客攻防战。

    他们本以为是有一位比林立新还要恐怖的世外高人侵入到了amenva伺服器内,神不知鬼不觉地破坏了源码。「呃……好吧,不管怎麽说,把这次的经验记在员工手册里,不然浮点数的坑以後还不知道要踩多少次。」

    哪怕是林立新,此刻也有些无语。

    起码还算是一场颇具奇幻色彩的eb之旅。

    随着以後物理引擎越来越发达,3化越来越先进,不可避免地一定会频繁跟这些问题打交道。

    提前踩踩坑也算是好事。

    「欸?说起浮点数误差,我们之前测试的时候还发现了一个问题。」

    卡马克一拍脑门,赶快来到工作站前,

    「我们做了完整的刚体物理和重力拟真,现在玩家可以拿起场景里的一些物品了,就比如这些桶子,或者这几块板子……」

    他说着,将地图里的瓶瓶罐罐捡起,然後丢出去。

    尽管整个物理系统的流畅度还有待提升,精度和细节程度也还不算完美。

    但对比过去来说,简直就是惊为天人。

    一个可以交互的物理世界,那可真的太夸张了。「然後我发现了一个好玩的,你看,我把板子先放在这儿……完事我跳上来,再举起板子,卡好一个视角……」

    卡马克操作着角色踩在木板上,按下交互键,将镜头略微微调了一番。

    随後……

    他狂按跳跃键,整个人居然是左脚踩右脚,直接御板飞上了天。

    整个场景的真相顿时便尽收眼底。

    除了中间的小房子,其他地方清一色的都是什麽都没有的一片空白。

    卡马克倒是玩得很开心。

    一旁的项目主管克里斯多福脸上可就挂不住了。

    当着林立新的面跟他爆了这麽多b出来,简直就是丢人丢到姥姥家了。

    「还没完呢,你看好,我在这个位置把板子和桶稍微堆一下,我试试……上次我直接挤到了地图外面……」

    卡马克倒是没心没肺,那叫一个欢腾。

    克里斯多福眼瞧卡马克没有停下的意思,继续下去还不知道要整出啥事儿呢,赶忙主动开口道:「目前还是个测试阶段的em,这几天我们的主要目标就是提升精度,这些问题後面肯定都能得到改善的,b很快就能修好。」

    「修?你说这个板子飞天啥的吗?为什麽要修?」

    林立新不解地偏过头来看向他。

    「啊?b不修吗?」

    这反问反倒是给克里斯多福整不会了。

    不修那不成屎山了?

    到时候发出去玩家要骂娘的好吗?

    「恶性的b当然要修,但这个……我觉得其实无所谓。」

    林立新耸了耸肩,望着玩得正开心的卡马克,

    「不要把玩家有趣的举动当做是作弊,如果大家都觉得有意思,那就鼓励他们去胡闹就好了。」

    有的设计师,技术不咋地,代码也写得一塌糊涂。

    花了大量时间打磨出来了一个堪堪过及格线的作品。然後玩家找到了很多他没有发现的有趣套路,迅速找到了破局之法,把原本艰难的挑战攻克了。

    於是他便急了眼。

    我这麽用心的设计,你们也必须用心地去玩,不允许逃课。

    为了不让玩家玩得这麽开心,浪费了他的艺术才华,他便迅速推出热补丁修复了这个捷径。

    本以为这样玩家们就会去体验他那些『精妙的设计』了。

    但没想到,玩家们迅速找到了新的套路。

    於是他又补,玩家又攻克。

    更好用的模组从民间长了出来,修改器成了人手一份的工具。

    直到最後,他也会觉得是自己没堵好所有的缝隙,让这些该死的虫子钻了过去。

    但他似乎从来都没有意识到一点。

    会不会……他所引以为傲的那些东西,本来就不好玩呢?

    「如果你对内容有足够的信心,你就没有必要担心玩家们会逃课,因为他们一定会回来的。」「即便他们真的靠着物理引擎的特性逃了课,那也是玩家们自己的自由。」

    「永远都不要教玩家玩游戏。」

    这也算是林立新的肺腑之言了。

    当初《像素战》的时候,就是因为他急於求成,指望引进率土like玩法快速破圈,搞得最後不好收场。

    也就是玩家们愿意支持amenva,不然指不定要被骂成啥样呢。

    这件事也算是amenva发展史上少有的黑历史了。

    事实证明,设计师最大的原罪就是傲慢。

    「我们应该做个封闭测试,找一些玩家来体验,如果他们觉得这不影响体验,反而很有意思,那它就不是b,而是……『特性』。」

    你说是吧,bjmp?

    不管是基於《半条命(半衰期)》、《传送门》、《m》诞生的围绕起源引擎的整个社区。

    还是日後《minecraft我的世界》那种真正完全自由的超级沙盒世界。

    它们都保留了大量的b。这其中,不得不承认或许的确有不少是因为技术问题没有来得及修复。

    但也有很大一部分,的的确确就是为了游戏体验而刻意保留的。

    就像mc里,如果修复了tnt复制,那一大票红石生电机械就会原地报废,大量的生电玩家都会放弃更新版本,成为一代遗老。

    《m》也会失去它那种肆意妄为的畅快感。
『加入书签,方便阅读』