顾凡继续解释道:“那么计算机具体是怎么储存小数的呢?
“这就是我之前所说的‘浮点数’,浮点的意思是,小数点是可以浮动的。
“就比如1000.101这个二进制数,就可以表示为1.000101x23,这有点类似于数学上的科学计数法。
“在程序中,为了让二进制用到科学计数法,并且规范化,就要保证小数点左侧只有1位,并且必须为1,我们目前绝大多数计算机所使用的浮点数,都是IEEE制定的国际标准,采用符号位+指数位+尾数的格式。
“总之,由于存在十进制到二进制之间的转化,所以按照这种方式来计算,0.1+0.2并不等于完整的0.3,因为在计算机中,很多小数都无法用完整的二进制来表示,所以只能用近似数的方式来储存,那么两个近似数相加,也只能是一个新的近似数。
“十进制转二进制计算,然后再转十进制输出,这就导致了前后两个数不相等的情况。”
莉莉丝眉头紧皱:“那为什么不能用十进制精确计算呢!”
顾凡轻咳两声:“这个……如果要从头解释『计算机为什么要使用二进制』的话,就太复杂了,一时半会说不清。
“但针对这个问题,我可以从另一个角度来说明为什么大家会容忍这种误差,因为这种误差本身就是不可消除的。
“即便是十进制,也会出现许多无法除尽的情况。十进制只是能够精确表达2和5能够除尽的数字,但对于1/3、1/7这样的数字,十进制也就无能为力了,同样也会产生误差。
“所以不管采用什么样的进制,误差都是必然存在的。”
莉莉丝感到大脑冒烟:“好吧,我知道了,在计算机里面0.1+0.2≠0.3,那么这个bug又是怎么回事?”
顾凡长出了一口气:“莉总你能理解这一点的话,这个bug解释起来就稍微容易一些了。
“简单来说就是,程序员在写动态难度的代码时,没有考虑到这种999后面还带小数的极端特殊情况,没有为这种特例专门写一个判定,因此在数值互相转化的过程中,程序无法判定这个数字具体处于哪一个难度区间中,就直接降为了最低难度。
“站在人的角度上来看,4999.99当然还是处于5000以内的区间,但对于程序来说却并不是如此。也就是说,0.1+0.2=0.30000000000000004,它溢出了0.3的正常区间。”
莉莉丝简直是瞠目结舌,虽然她仍旧无法接受,但从程序的角度来看,这个bug的出现还真就是合情合理。
而且,这并非顾凡信口开河,其他游戏也出现过类似的bug。
莉莉丝很快又意识到了新的问题:“但假设真的如你所说,这个特例应该很难触发才对吧?只有在进入boss房的时候难度数值刚好卡在999带小数的情况,才会触发。可是为什么到了游戏里,人人都能触发了!!”
顾凡轻咳两声:“这个……我看一下。”
他还是打开了《谎言之血》的程序,仔细查看了『狂信者』的相关代码。
“莉总,这是因为狂信者这个怪物投技的特殊设定。
“这个投技,是需要玩家手动挣脱的。按照动态难度的设定,越慢挣脱的玩家就越菜,因此动态难度会随着投技时间的增长而增长,这很合理吧?”
莉莉丝想了想:“嗯……合理。”
动态难度是《谎言之血》最基础的设定,简单来说就是,越菜的玩家难度越高。
那么从投技的角度来考虑,中了投技的玩家肯定是菜的,中了投技还挣脱很慢的玩家就更菜。因此,投技持续期间持续增长动态难度,这是个非常合理的设计。
顾凡继续说道:“但是,如果一直持续增加动态难度,似乎也不太合理。
“对于一个投技来说,这种惩罚措施未免太严厉了一些。
“所以,为了符合动态难度原本的设计意图,也为了避免一些莫名其妙的bug,程序上对这个投技的动态难度数值进行了限制,让它最多只能增长到当前难度等级下的4999.99,不能增长到下一个难度等级。
“只有当玩家再被其他怪物打一下的时候,才能突破这个数值,来到下一个动态难度等级。
“这也算是个比较合理的设定。”
莉莉丝微微点头:“嗯……似乎……”
顾凡继续说道:“但是这两个问题叠加在一起的时候,就出现了一个全新的问题。
“那就是当玩家保持着这个数值直接进入boss战的时候,系统会对当前的动态难度进行一次重新的判定,然后……就没有然后了。”
莉莉丝不由得目瞪口呆,暂时失去了语言。
从原理上,她已经勉强接受了这个bug。
但是从结果上却完全无法接受!
因为这个bug的出现,实际上让玩家打出成神结局的难度大幅降低了!
try{ggauto();} catch(ex){}
原本玩家想要把动态难度降到最低,是一个很漫长的过程,不仅要小心翼翼地收集道具、不能被打到,还要尽可能地给怪物造成大量伤害。期间只要有任何的小失误,都很有可能前功尽弃。
而被连续打中好几下导致动态难度涨上去之后,再想要降下来简直是难如登天。
很多玩家就只能重开。
在这个过程中,自然就会产生大量的负面情绪。
可现在呢?玩家根本不需要那么麻烦,只需要在进boss房之前找个狂信者抱一下,把动态难度卡成4999.99,再进boss房,动态难度直接就变成最低了!
从网上玩家们对于『狂信者』这个怪物的风评,也能看出这个bug有多么重大的意义。
在此之前,狂信者几乎已经成为《谎言之血》这游戏的粪怪TOP1,也可以说是出生榜的第一名。
那时候玩家们简直对它恨得牙痒痒,甚至想要打车来到逆天堂的总部,直接把刀架在开发人员的脖子上,让他们把这个小怪给删了。
因为这玩意的投技范围大、判定广,一旦中了不仅是游戏内的角色受到精神暴击,游戏外的玩家也会受到严重的视觉冲击。
尤其是那些速通玩家,更是恨得牙痒痒。
因为就算以最快的速度点按键挣脱,也仍旧需要花费大约三四秒的时间。对速通玩家来说分秒必争,这三四秒简直让人想死。
但是现在呢?
普通玩家和速通玩家都爱上这个怪了!
对于普通玩家来说,如果觉得游戏太难,进boss房找它抱一下,直接难度降到最低,打boss的难度大幅下降。
而对于速通玩家来说就更爽了,他们可以靠着这个方法全程保持低难度,打一些boss翻车的情况更是大大减少!
对于想要打成神结局的玩家来说,就更是一个巨大的福音。
动态难度本来就是想要恶心玩家的,可在阴差阳错之下,却成了某种官方逃课的工具。
玩家们甚至恨不得把狂信者当成自己的亲爹供起来。
“狂信者!大头娃娃!狂热粉丝!简直就是《谎言之血》的第一好人!”
“狂信哥帮你把游戏难度降到最低了,还不说谢谢狂信哥!”
“《谎言之血》缺了谁都行,就是不能缺少狂信哥,没有狂信哥的查尔顿市是不完整的!”
“官方能不能把狂信哥的投技改得范围再大一点?我想让他更快抱到我,谢谢!”
“逆天啊!”
“有没有大佬能给狂信哥开发一个美少女mod?没别的意思,完全是出于实用的考虑。”
莉莉丝愤怒地挠头:“可恶啊!!”
虽然生气,但很显然这次她有力使不出,顾凡明明都没有参加游戏的开发工作,把锅甩到顾凡身上显然不太合适吧?
可要说还存在其他的内鬼……
这抓起来可就麻烦了。
顾凡赶忙劝解:“莉总,其实乐观一点想,至少目前玩家们对于这个成神结局的骂声,又更大了一些。”
莉莉丝愣了一下:“哦?是吗?”
她随便打开了一个论坛看了看,发现还真是。
骂成神结局的玩家还是和之前一样多,甚至隐约变得更多了。
这是为什么呢?
因为这个bug虽然改善了玩家的体验,但因为bug才改善了体验,那不是更加证明成神结局一开始就是在故意恶心玩家吗?
一款游戏的某个结局,如果用了bug才勉强达到正常的游戏体验,那只能说明官方从一开始就是故意的吧?
对于这一点,bug派和机制派罕见地达成了一致。
这次没什么人说这是机制了,明显就是纯纯的bug!
毕竟浮点运算bug也算是游戏领域的经典bug了,但凡是稍微了解一下计算机知识的人,都能看出来。
那么这对于莉莉丝收集负面情绪有什么好处吗?
当然也是有的。
如果玩家们觉得这是某种特殊机制,那么他们在游玩过程中被坑,产生的负面情绪会相对较少,因为他们更容易接受类似的设定。
但如果是bug,即便使用bug之后游戏的体验变得正常了一些,玩家们也仍旧会产生大量的负面情绪。
因为bug一般并不被认为是游戏正常体验的一部分。
莉莉丝叹了口气:“好吧,这也算是不幸中的万幸了……”
然而她正在感慨着,突然又刷到了一条视频。
“重磅!《谎言之血》竟然也存在卡大师剑的办法?手把手教你如何将GP的判定帧提升一倍!”
看到这个标题,莉莉丝瞬间瞪大双眼,差点一口老血喷出来。
“什么东西!!”
还有高手?