i started playing minecraft again three weeks ago. i created a new world, i booted up survival, walked around in some caves, and got a few diamonds. diamonds! i won—and that’s where the story-script ends.
i didn’t know what to do next. when i don’t know what to do, i just carry on what i’m doing right now. so i kept on exploring caves deep underground, mining a good amount of gold and lapus lazuli and a couple more diamonds. i saw a lush cave: an oasis deep underground filled with light, vines, grass, flowers, glow squids and glow berries, and the occasional axolotl. lush caves weren’t around when i first started playing; it’s a small reminder of the time that’s gone by since i was a little kid, playing minecraft in utter secret while my mom wasn’t looking.
i walked and walked. and so the idea slowly came to me: what if i just kept on walking? how far could i get? thus, began the journey to the end of the world.
each time you start a new game, minecraft has algorithms that randomly generate a new world. terrain generation is a little problem that i really find quite interesting. this is going to be me nerding out a bit, so get ready. here’s a very basic walkthrough: for starters, imagine trying to come up with a way to automatically generate a pattern of natural-looking terrain or peaks and valleys.
more specifically, say we want to generate a patch of 128 by 128 meters of land. the most naive approach would be to just use a random number generator on each square meter, producing something that looks like this:
this is random, but it looks like goop, not terrain. after all, it’s not like at every meter of terrain the height is chosen completely at random (which is what we’re doing here). instead, maybe we want to pick the heights at only every sixteenth meter, and then fill in the middle with straight lines and planes:
this is more convincing but still looks a little weird. the reason is that the slope of the ground changes suddenly at the grid points; this doesn’t happen in real life. to fix this, we can connect the grid points using cubic-shaped curves, i.e. “bicubic interpolation”, which yields something like this:
however, if you look closely, it’s still not super convincing—imagine if the first astronauts looked down at our blue planet and noticed that the peaks of earth’s mountains and the base of earth’s valleys all laid upon a conspicuous grid. that’s what happens here, as the lowest lows and the highest highs tend to be near each sixteenth meter. the thing minecraft uses is called perlin noise; it’s a bit more sophisticated, so it looks pretty much perfectly natural. but that stuff is unfortunately beyond the scope of this blog post.
in the embryonic versions of minecraft, the generated worlds were finite. the strange, blocky, over-saturated world just ended at some point, beyond which was an endless ocean. this stage of development was mostly called ‘indev’ (in development); indev was the second phase, after classic. after around three months of indev came the next phase: infdev; infinite development. so fundamental was the infinite world to minecraft that it marked a whole new phase of development.
after i decided to walk to the end of the world, i followed the caves back up to the surface, first out of the deepslate zone, and then all the way into the dirt. finally, i surfaced; it was daytime, the sun was out. i had spawned in a pretty generic birch forest and there wasn’t much to see. if i wanted to walk, i should pick a direction. in minecraft the sun and moon rise in the east and set in the west. i looked up at the sun; time to chase the sun, i thought. i will go in the direction the sun sets: i will find out where it goes after the day grows dark.
thus, i ventured out. i sprinted forward, navigating between birch trees, making progress block by block. i came upon rivers; i swam through them, slowly. (swimming is slower than sprinting in minecraft, so i avoided water when i could.) every few minutes i’d leave one biome and go to the next; i saw the spruce biome, swamp biome, mountains biome, plains biome, savannah biome. after a couple days (each day is ten minutes in game) i found myself at the shore of an ocean. i wouldn’t be able to swim across it. so i crafted a boat, hopped on, and started rowing, chasing the setting sun, not knowing how long it would be until i reached the shore again.
i came across broken nether portals, shipwrecks with buried treasure maps, strange, abandoned-looking buildings in the jungle with traps, the new mobs like bees and llamas, wandering traders, and of course, villages. villages always feel a bit hopeful. villagers seem to occupy this weird space in-between the soulless mobs and the souled players; i never know what to feel about them, especially the baby villagers. after a couple villages, i stop gawking at them and i just go straight to the blacksmith to loot the chest for diamonds.
after a while i realized that i should probably save my progress so that if i died, i wouldn’t have to start back out at the origin. thus, i killed each sheep i came across for their wool, and each day as the sun started to set, i built a crafting table, a bed out of 3 wool and 3 wood planks with the crafting table, used the leftover wood plank (logs generate 4 wood planks) as a decorative block next to the crafting table, lit up the side of a wood plank with a torch, and went to sleep. sleeping resets your spawn point, so if you die, you’ll wake up at the bed you last slept in, as if nothing had happened at all… well, minus you losing all your stuff. but i had changed the game rules that you wouldn’t lose your stuff when you died. i don’t like dying.
see, the thing about minecraft is that the world actually isn’t infinite. (i think this is pretty well known among people who play the game; and i really don’t know much about the game, but here it goes.)
to understand why, it comes down to fundamental limits on the numbers your computer can efficiently represent. the 32- or 64-bit number is the computational unit; your computer operates entirely through adding, multiplying, subtracting, ANDing, NOTing, etc. these operations are executed in your computer by running electrons through tiny wires. your computer must be manufactured with a certain fixed number and configuration of these tiny wires; how many wires you need depends on how many binary electrical signals—bits—you need to represent numbers. so you need to cap the amount of physical space a number can take up. and just like how you can’t get numbers bigger than 999 with three digits, restricting the space any number can take up restricts how big the number can be.small caveat: you can use software to chain multiple hardware numbers together and get numbers as big as you like, but this is slow, so we don’t do it all that much.
around the limits of how big numbers can get, computers get weird. for integers, you can add two large positive integers on a computer and get a large negative one. for fractional values, you can get a computer to tell you that 4,000,000.0 + 0.1 = 4,000,000.0; large values are not precise and 4,000,000.1 isn’t a number the computer can record. for minecraft, this causes issues. for example, if i’m at position x=4,000,000.0 and i move 0.1 blocks forward, the computer computes my new position to be 4,000,000.0 + 0.1 equals 4,000,000.0; i.e. you won’t move at all. you’ll need to move faster if you want to be able to move.
the farther you get away from the origin, the stranger the game gets due to these effects. the game itself slowly unravels. most of the effects have been fixed by now, but i noticed more jittery movement on top of boats and of items even in my journey as i got further out. most of these effects were benign; jittery movement; glitching particles; blocks appear flat. as you go further, they get more serious. with each power of two, it gets more jittery and more blocks render wrong and the faster you have to move in order to move at all, and most of all, at around 12 million blocks out, the terrain generation algorithm totally and completely glitches, creating the famed far lands of minecraft:
the far lands are the tell-tale sign of minecraft’s digitality. the world you’ve grown up in has suddenly revealed itself to be of a peculiar nature. the world you see is a bunch of numbers spinning up and down in preprogrammed ways, electrons flowing through prefabricated wires, a giant trick, an illusion. the glitch dispels that illusion of the world, the existence of the world, and reveals the truth—if you look hard enough.
and a part of me is convinced that something isn’t fundamentally real about the real world too; certainly, the world i believe that i live in isn’t real. it is a mere illusion imposed on the world by my consciousness, my experiences. the person i am today is not the person i was a year ago, or two years ago, or five years ago, and as i change, the world around me changes too; places take on different meanings, the success i think that would fulfill does not fulfill, the small moments i never think would fulfill do fulfill, far more than the first. and after a few years of consciousness, it is painfully obvious to me that the world i have come to know is not at all the world that’s truly out there. but what is the world? what is the true nature of our experience? what are the far lands of real life?
a few months after stepping down from developing minecraft, notch (the creator) started working on a new game. it was called 0x10c, blurb:
In a parallel universe where the space race never ended, space travel was gaining popularity amongst corporations and rich individuals.
In 1988, a brand new deep sleep cell was released, compatible with all popular 16 bit computers. Unfortunately, it used big endian, whereas the DCPU-16 specifications called for little endian. This led to a severe bug in the included drivers, causing a requested sleep of 0x0000 0000 0000 0001 years to last for 0x0001 0000 0000 0000 years.
It’s now the year 281 474 976 712 644 AD, and the first lost people are starting to wake up to a universe on the brink of extinction, with all remote galaxies forever lost to red shift, star formation long since ended, and massive black holes dominating the galaxy.
the composer of minecraft’s original music made a track for it too, which is also quite beautiful (i highly encourage you to listen): https://www.youtube.com/watch?v=QIrYK_iZQME
what fascinated me was just how far in the future the game was set. the end—what will happen, when it will happen—is fascinating; there’s even a word for the study of the end, eschatology, which i learned a few months ago in 21L.320. as a kid i loved looking at wikipedia’s timeline of the far future; reading how the world was going to change in a thousand years, ten thousand, a million, a trillion, how the world we know now is going to slowly decay until it becomes unrecognizable, glitch by glitch, and how at some point the last human who ever will live will die, and the last star that ever burns will go dark forever. this kind of future isn’t seriously tackled very much in popular sci-fi—there is The Last Question, maybe—that’s what drew me in.
but 0x10c never got made—the pressure was too high and “it just wasn’t fun anymore”. around a year ago, i stayed up late one night listening to that music track over and over. wondering what could have been, wondering what they saw far away at the end of the universe, this all having raised up an image in my head of a world that no one will ever live to see.
the game was fixed, and the far lands don’t exist anymore. instead, there’s just an artificial world border that you can’t cross at thirty million blocks out. that would be the endpoint of my journey. but i still had just about thirty million blocks left to go.
at around sixty-five thousand blocks, maybe a good fifteen hours spent on this, i was rowing in the ocean with my dog rotisserie (or roti for short) in the boat with me. thankfully, dogs will get into boats, and two entities can ride a boat at a time. i was looking at the horizon and at the setting sun. things had gotten quite monotonous, i was just pressing W and staring at the screen, searching for any sight of land.
then suddenly the rendered border started getting closer. it had never done that before; it stayed a fixed distance away. the void i could see at the end of the ocean grew closer and closer, and in a couple seconds i had run into it—i was in the void. i tried to move, but i could not move. i could see where i had come from; water lay just a few blocks away, but pressing w, a, s, d, space, did nothing. i stared at the sun, which i could now see laying below the horizon for the first time. i could see the red, dimming sky of sunset. i could see the front of the boat. but i was stuck.
the illusion popped.
trying to figure out what to do, i entered a command to teleport myself back into the water. it worked; now i was in the water and roti was in the boat which lay in the void. i stared at roti, floating in the void, in the boat, happy as can be.
there might be a way to fix this glitch, but maybe i shouldn’t spend more time on this anyway. i swam closer, cautious to avoid being pulled into the void again.