开发者们最喜欢的故障
Minecraft is a notoriously stable and precision-crafted game. Everyone knows this. However, on the rarest of rare occasions, a tired developer’s finger slips on their keyboard, or someone drops their cinnamon bun into the Central Flux Capacitor, or we forget to make the timely sacrifice to Omak’katheth, and the game wigs out completely. Sorry about that.
众所周知,Minecraft 是一款运行稳定、制作精良的游戏。然而在极为偶然的偶然发生的偶然情况下,一个劳累过度的开发者不小心手滑了,或者不知道谁把他的肉桂包打翻进了机房中央电源,或者我们忘记了献祭 Omak’katheth (?),然后游戏就出错了。我们对此深感抱歉。
But it doesn’t always turn out badly: many of Minecraft’s most infamous errors were, in hindsight, happy accidents, that led the way to new features and even new mobs.
但,塞翁失马,焉知非福:许多 Minecraft 内知名的错误,在事后看来其实是令人愉快的意外,并且引出了新特性甚至新生物。
And so, in memory of those fleeting moments of instability and/or serendipity, we asked the developers to recall their favourite bugs and glitches from across Minecraft’s history and its many platforms.
因此,为纪念那些转瞬即逝的不稳定或发生意外的时刻,我们邀请了一些开发人员,从 Minecraft 的历史版本和众多平台所特有的版本内回忆自己最喜欢的错误和故障。
1. AN EMBARRASSMENT OF RICHES
1. 意外之财
Turns out you can have too much of a good thing, when that good thing messes with a carefully balanced progression system. Jens remembers a time when this routinely happened with nearly every release, due to simple, repeated oversight.
你突然发现自己身上多了一堆好东西,有些甚至打破了我们精心设计的游戏平衡。Jens 想起有一段时间由于简单但重复的疏忽,这种问题在几乎所有正式版都出现过。
我们当时并没有游戏内命令可以召唤事物,所以当我们想要测试刚刚加入的新物品时,例如测试一个新物品,一组新方块甚至新生物时,我们就会直接编辑生成玩家的代码,这样玩家进入世界时就会直接携带一堆这样的物品。但我们总是忘记在正式版上线前移除这些代码。所以几乎每一周我们发布新版本时,人们都会惊异于物品栏内凭空多出的奇怪物品,接着我们就会发出“哦,糟了”的声音,加班移除这个代码,然后发布一个新的版本。最终我们创建了一个新版本文档,这样我们就必须要遵守上面的内容,特别是“别忘了移除所有测试用物品!”
2. FLYING SQUID MILK
2. 飞行产奶鱿鱼
This humble passive mob is the source of several bug-based Minecraft memes. It’s also the very first mob that Jens created for the game. These facts may be related.
这个不起眼的被动生物是很多 Minecraft 的 bug 梗图的来源。它也是由 Jens 为游戏创造的。似乎一下子所有事实都连上了。
我不太懂游戏系统是怎么工作的,因此我只是简单的复制了牛,并且随便整了下。自然我忘记把不需要的部分给删除了,因此有一段时间你可以用桶给鱿鱼挤奶。当我一年后移除了这个特性时,还有一条留言和我说这太遗憾了,因为这已经成为很多笑话的快乐之源了。
Squid can also fly. In fact, they “fly” all the time – it’s just that they normally do so underwater. Normally.
鱿鱼当然也会飞。事实上,它们一直在“飞” —— 这就是它们通常情况下在水里做的事情。没错,通常情况下。
“Essentially, the squid was moved by a velocity vector,” explains Jens. “When it hit the surface of the water, it stopped.”
“本质上,鱿鱼是在一个速度矢量的牵引下运动的,”Jens 解释说,“而当它触碰到水面时,这个牵引作用就停止了。”
At least, that’s what’s meant to happen – and it did on the server side.
至少,原本就是这样设计的 —— 在服务端上是这样。
“Unfortunately, the game didn’t update the velocity on the client side, so the client thought that the squid would just continue at that speed up into the air.”
“而不幸的是,游戏不会在客户端更新速度矢量,所以客户端会认为鱿鱼应该继续以这个速度向空气里运动。”
Majestic!
真是绝了!
3. “JUST PISTONS IN GENERAL”
3. “只是普通的活塞而已”
“Pistons have always been extremely buggy,” says Jens. “There are just so many corner cases, they can be activated in so many different ways.”
“活塞总是容易出问题,”Jens说,“有很多奇怪的问题,因此它们能以非常多的方式被激活。”
But in at least one way, the bugs turned into a benefit – one which was embraced by the community to create clever redstone trigger mechanisms.
但至少有一种情况下,bug 给人带来了便利 —— 这个 bug 被社区用来制作灵敏红石触发电路。
“The community calls it quasi-connectivity,” says Jens, referring to a bug which allows pistons (along with dispensers and droppers) to be activated when blocks directly or diagonally above them receive a redstone signal, even when they don’t get one directly. That’d be weird enough by itself – but weirder still: the pistons sometimes don’t even know they’ve been activated.
“社区把它叫做半连接性(QC)。”Jens 这样说道,并展示了一个 bug ,活塞(发射器和投掷器同理)在它上方或斜上方一格方块接收到红石信号时也会被激活,尽管它们自己并没有直接接收到红石信号。这个现象本身就已经很奇怪了 —— 但更奇怪的是:活塞有时甚至不知道自己已经被激活了。
如左图所示即为半连接性(QC)现象,半连接性指任何可以激活图中红石灯的信号都可以激活活塞,并且即使移除红石灯也会有一样的结果。 (图源:MCW:教程/半连接性#半连接激活,下同) |
|
而左图所示的电路中,拉杆也可以通过半连接激活活塞,却由于距离太远而无法在拉杆拉下时立即更新并激活活塞,当活塞接收到更新时才会被激活。 |
当你拉动拉杆时,它会检查周围的方块是否需要被激活,然后给予它们方块更新。但它检查的范围有限:也就是信号源两格以内的方块。正因为有了半连接性,活塞可能恰好处于了方块更新的检测范围之外,即使它正上方的方块接收到了红石信号 。
The result is that the piston should be activated, but the block hasn’t been updated to be told that yet. But in Minecraft, lots of events can cause nearby blocks to update: blocks being placed or destroyed, water or lava levels changing, sand falling, plants growing, fires igniting, tripwires tripping and even cake being eaten. So what you get is a trigger mechanism – aka a Block Update Detector – that can be activated by all kinds of other interactions.
这产生了这样一个结果,活塞本来应该被激活,但活塞本身没有接收到方块更新。而在 Minecraft 里,很多的游戏事件都能导致周围的方块被更新:有方块的放置和破坏、水和熔岩的流动、沙子的掉落、作物的生长、火的点燃、绊线的触发甚至是蛋糕被吃都能触发。所以你只需要一个触发电路 —— 或者说方块更新感应器(BUD), —— 它可以被任意形式的交互触发。
And so, from bug to BUD. A heartwarming story of redemption. (Until it was superseded by the introduction of the Observer Block, that is.)
就这样,从“bug”到“BUD”。一个让人暖心的蜕变的故事。(直到观察者方块的引入,确信。)
4. DISCO DRAGON
4. 跳舞的龙
Who knew that Minecraft’s most menacing boss mob could throw such sweet shapes? Nathan did!
谁又能想到 Minecraft 里最可怕的 Boss 生物也可以凹出这么可爱的造型?让 Nathan 告诉你!
我那次偶然让末影龙跳舞的经历实在是太有趣了!我让她变得优柔寡断:她会反复改变主意,时而想干掉末影人,时而想蹲坐在传送门上,时而想飞走。我实在不忍心修复这个问题,因此让她跳舞了一天。
You can witness the Enderdragon’s devastating dancefloor moves in this gif .
你可以在这个动图里欣赏到末影龙迷人的舞姿。
5. CREEPERS
5. 苦力怕
Minecraft’s most iconic mob was once a bug! Before they got their bright green makeover, before they were packed with an explosive payload, they were no more than terrifyingly deformed pigs. Notch simply mixed up a couple of coordinates, giving the pig a weird vertical torso which looked so uncanny and, well, creepy that he couldn’t help but make it an official part of Minecraft’s bestiary.
Minecraft 里最具标志性的生物曾经也是一个 bug!在它们被涂上亮绿的颜色前,在它们被装载满满的爆炸物前,它们只是一群可怕的畸形的猪。Notch 搞错了一系列坐标,给了猪一个奇怪的垂直的躯干,看上去诡异而又蠕变 ,结果他情不自禁地就让苦力怕成为了 Minecraft 的吉祥物。
6. X/Z
6. X轴/Z轴
Some bugs are stealthy, remaining hidden for years. Given that this one involved flipping the entire world around, you’d think it’d be more noticeable, but not only did Michael “Searge” Stoyke create the bug in a haze of exhaustion, but he accidentally fixed it too (at least superficially).
有些 bug 藏得很深,甚至几年都没有人发现。如果说这个bug让整个世界都“翻转”了的话,你可能还觉得它还更加引人注目些,但 Michael “Searge” Stoyke 不仅在极度疲惫的情况下写出了这个 bug ,还偶然间把它修复了(至少表面上如此)。
在世界生成器的某处,我混淆了坐标方位,让“右”指向了前,而“后”指向了左,结果快三年了没有人注意到有任何奇怪的地方!(或许这样会更明显,但)我还是在世界生成阶段后把坐标轴调整回去了。不太清楚这个问题是合适、并且是如何产生的,但我一定是当时工作的时候太累了!
7. ATTACK OF THE CLONES
7. “克隆”大战
Searge’s other favourite bug is one that’s still in the game. But is it really a bug, or just an extremely inadvisable performance-shattering feature? Hard to say!
Searge 还有一个最喜欢且 bug 目前仍存在于游戏里。但它确为一个bug, 还是说仅仅一个不推荐尝试的破坏性能的特性?这很难说!
你可以使用命令方块做一个无限克隆并延伸的结构。只要你把一个命令方块放在红石块下,并且让命令方块将自己和红石块复制一份放在旁边,这样复制的命令方块就会再将自己复制一份并放在旁边,依次类推,于是这样的结构就会无限复制,直到遇上世界加载范围的尽头。但甚至在你走近那片区域并让它加载的话,复制的过程仍会继续下去。
8. THE SPOOKY WITHER BUG
8. 骇人凋灵 BUG
“When we added the Wither, suddenly our game would start crashing in really weird and impossible ways,” recalls Nathan Adams. “It made no sense.”
“当我们添加了凋灵时,我们的游戏突然就开始以各种奇怪而近乎不可能的方式崩溃,” Nathan Adams 回忆道。“这毫无道理可言。”
A lot of the crashes were affecting Java – the thirdparty program that runs Minecraft’s code in the aptly named Java Edition of the game. Think of it as running Minecraft on a virtual computer within your own computer – because that virtual computer is always the same wherever its installed, it provides a static set of specifications, making it quick to develop for and (in theory) ensuring that the game runs more or less the same way on any machine.
相当多的崩溃都影响到了 Java —— 一个用来运行 Java 版本 Minecraft游戏代码的第三方程序。你可以把它想象成从自己电脑上运行的一台虚拟机内打开 Minecraft —— 因为这台虚拟机无论安装在哪里都会是一样的,它提供了一组静态规范,使其能够被快速地开发,并(从理论上)确保游戏在任何机器上运行都是以一种几乎相同的方式。
使用 Java 旨在保证我们所做的任何事都不会导致真正的崩溃。如果出现了问题,Java 只会抛出问题,从而让我们能尽可能自己设法解决,并能够尝试恢复或向用户展示相对好一些的消息。但当骇人凋灵 Bug 发生时,一切就像是你好端端和家人玩棋类游戏,但一旦你移动特定的棋子,你的房子就会塌掉。
Sometimes they were more subtle than that.
但有时这些 bug 还更加的微妙。
“A variable that existed on one line didn’t on the next,” says Nathan. “Things started to corrupt and the game would really freak out. It mostly caused crashes but sometimes it’d make the game just act odd. If we were working on something new, it might not always do what we wanted it to do.
“一个变量在一行里出现,但下一行又不出现了,”Nathan。“于是事情开始变糟,游戏开始出错。大多数时候这会直接导致崩溃,但偶尔也只会让游戏以一种奇怪的方式运行。假如我们正开发新东西的话,那它就有可能不按照预期的想法去做。
“So we reverted the Wither and… it still kept happening. We had no idea what was going on but it only affected someone after they’d seen the Wither once. We tried everything to fix it and just came up empty, so we kinda just lived with it for a while.
“所以我们删除了凋灵…但一切仍在继续。我们不知道发生了什么,但似乎这个 bug 只会影响到所有看到过凋灵的人。我们尝试很多方法去修复,但收效甚微,因此我们只能暂时和这个 bug 和平共处。
“Eventually, we tweaked the Wither so that the skulls he shoots were no longer on fire. Then – for whatever reason – he was finally happy.”
“最终,我们调整了凋灵,让它发射的凋灵之首不再处于引燃的状态。然后 —— 不管处于什么原因 —— 凋灵终于高兴了。”
Mysterious!
真是神秘!
9. WATERWORLD
9. 水世界
Why fix a bug when you can make it a feature? Pocket Edition dev, Tommaso Checchi suggests a fine example. While optimising the Pocket Edition of the game, the devs removed a stage of terrain generation which checked whether terrain underlying villages was suitable. Suddenly it was possible for villages to generate over water. Oops! But instead of reverting the change, Tommaso switched the roads for walkways made of wooden planks – which look just as good spanning rivers as they do tracing paths over dirt.
如果可以把它变成特性的话,那为什么要修复 bug 呢?携带版开发者,Tommaso Checchi 为我们提供了一个很好的例子。在对携带版游戏进行优化时,开发人员移除了地形生成的某个阶段,即检查村庄下方的地形是否合适。突然间,村庄可以建在水上了。我的天!然而 Tommaso 没有回退这次更改,而是把村庄的道路换成了木质 —— 用它渡河看起来挺合适的,就像用土径在泥土上行走一样。
10. SAND TRAPS
10. 落沙陷阱
Tommaso is also responsible for the bug which was to become the falling sand trap. Sand and gravel are two of a relatively small number of blocks that are affected by gravity: without support by another block, they will fall straight to the ground. However, sometimes you will find naturally generated terrain which lacks any support, but will remain in place until the block receives an update, triggering a collapse.
Tommaso 还让一个 bug 在未来成为了落沙陷阱。沙子和沙砾是相对少见的受重力影响的两种方块:当自身没有其他方块支撑时,它们直直落到地面。然而,你有时能发现一片自然生成的地形均缺乏任何支撑,但它们会保持在原地,直到方块接收更新后垮塌。
早先我们想让沙子和沙砾在生成到天花板时“直接”落到地上,但这太难做到了,因此我只是把它放在那里,并添加了一些尘土例子,用来预警你可能接下来会遇到的一次可怕的塌方!
Luckily for Minecraft players, these ten bugs are literally the only ones we’ve ever introduced to the game! We definitely haven’t, say, shipped a beta where you couldn’t mine or jump. Or put out an update which made the grass random rainbow colors. Or misaligned the moon. Definitely didn’t happen. Nooope. However, if you wanted to fully prevent the frankly infinitesimally small chance of a bug sneaking into Minecraft, you could join our beta program, and help us squish them before they get too large!
当然对 Minecraft 玩家来说是幸运的,这些是我们引入游戏内的唯一的 10 个 bug (大嘘)!我们从来没有发布过一次 beta 版本,让你无法挖矿或跳跃。我们也从来也没有推出一次更新,让草方块有随机的彩虹颜色,我们更没有让月亮脱离自己的轨道过。这从来没有发生过。绝对没有发生过。同时你如果你想要完全阻止 bug 们偷偷进入 Minecraft 的话,你还可以加入测试体验计划,在 bug 们没有过于严重前就消灭它们!