Experienced Points

Undertale and Curly Braces


Some reader questions this week. First off, Undertale:

Hey Shamus,

[…] Why in particular was Undertale so popular? What factors in 2015 caused it to have such a response from the community?


I’m not complaining about the game or it’s success (or at least not seeking to), or trying to change anyone’s opinion, just curious why and how everything came together to cause the response it did. I can see the story, the characters (eventually), and the exploration/surprise/problem solving values being strong factors (and nostalgia for a specific audience), but it still doesn’t add up for me.



I’m in the same boat as Karl. I was caught completely off-guard by the wave of Undertale fandom, and when I played the game for myself I couldn’t understand what the fuss was about. It’s not a bad game. I certainly didn’t hate it. But my own tepid appreciation seemed really strange when contrasted with the sheer intensity of the public response.

It was a strange phenomenon. Here was a game with deliberately simplistic gameplay, garish retro graphics, little or no marketing, and which was a PC-only release. And yet it became one of the most culturally significant games of the year. In terms of memes, jokes, and sheer fan enthusiasm, it rocketed past the hype monsters like Fallout 4, Metal Gear, and even my personal 2015 favorite Witcher 3.

Anecdotally, Undertale fans seem to love the game for the characters. The characters resonated with people and stuck with them long after the game was over. For whatever reason, that didn’t happen with me. I liked them well enough, but I didn’t fall in love. I thought Sans was cool, but not more cool than (say) Urdnot Wrex, Faridah Malik, Isaac Kleiner, or Killian Darkwater.

But given how many people loved the characters and how few people ended up in the same boat as Karl and me, maybe the question isn’t, “Why did people love Undertale so much?” Maybe the question should be, “Why didn’t I?”

I don’t know. I’m actually really jealous of the die-hard Undertale fans. I don’t know why the game connected with them, but they sure did seem to be having fun with it.

Hey Shamus,

[…] I’m wondering about textures. As I understand “2k textures” mean that every texture file has 2048×2048 pixels. So, assuming I’m playing on a 1080p screen, I would always see such textures downsampled (unless it’s a FPS and I’m staring and some wall from close distance).
Considering the above am I right thinking that having textures in resolutions higher than my screen resolution is not noticeable? Or am I missing something?

Take care and have fun,

You’re right on all counts, except the assumption that “standing close to a wall” is something rare outside of an FPS. 2K is indeed a lot of texture data, but that data might be spread out over a large area. If a 2K texture covers an entire wall of a room, then the moment that wall is larger than the screen (like, if the camera is inside the room) then you’re effectively zoomed in on it, and one pixel of texture data will end up stretched across many pixels of your screen. A single non-repeating 2K texture on something the size of (say) a book is probably massive overkill, while having a 2K texture on something the size of a barn is actually really stingy and the game will probably look very blurry and low-detail. (Assuming the player would stand close to the barn during the normal course of play.)

So it’s not really important how big those source textures are, what’s important is how much texture data you see per square meter. When a game says it has “2K textures”, it’s like learning someone’s weight without knowing their height. They might be very fat or very skinny, and you can’t make use of the first number without the second.

Languages like C use braces for defining code blocks, languages like Python just use indentation. My question is: what is the purpose of braces? Is it just historical? If you were designing a language from the ground up would you use them? Same question applies when it comes to semi colons. I really don’t see why this…

[pre]if(thing > 10) {
print(“Thing is bigger than 10.”);

…would be better than this:

[pre]if thing > 10:
print(“Thing is bigger than 10.”)


For the non-coders: The C family of programming languages are probably the most common and influential in the world. Most of the software you use in your day-to-day life is written in some variant or descendant of C.


In C, you put an open curly brace { to begin a block of code and the close brace } to end it. Some modern languages have abandoned this convention. In a curly-brace language, the braces are for the compiler, because it doesn’t care about the spaces. The spacing is entirely for the benefit of the programmer: We indent things so they’re easier to read. So it kind of makes sense to do away with this system: Why have one convention for the computer and another for the human? Why don’t they both use the same information?

Second thing non-coders need to know: There’s an ever-lasting debate on the use of tabs versus spaces. If you need one block of code to be indented a bit, then you can hit the spacebar a few times, or you can press the tab key. Then you save your source code (which is just a text file) and another programer opens it. But they are from the other side of the tabs vs. spaces war, and so the code is super-annoying to navigate. Your cursor goes through spaces one at a time, but “jumps” through tabs. If you’re editing code using the “wrong” system, you’ll constantly be making typos and navigation errors.

First, the historical reasons for this mess: The C language is a descendant of the now-dead B programming language, which descended from BCPL, which was the first language to use curly braces. I imagine braces were simply convenient for the person who invented the language and wrote the compiler. These languages can all ignore “whitespace.” Tabs, spaces, line breaks, and all other non-printing characters can be treated the same. Having one space between two words is the same as having a hundred spaces, five tabs, and two line breaks. As long as there’s something there, we know we’re dealing with two words and not one.

I know we think of “coding” as something we do in one of these sexy modern editors with moveable windows, autocomplete, code highlighting, auto-indent, auto-format, code lookup, and a dozen other conveniences. But back when BCPL was invented in 1966, our text editors were abominable. Without auto-indent, the only way to make sure the code lines up is to count as you smack the spacebar over and over. Or you could use tabs, which brings in all sorts of terrifying questions about how tabs will look and behave on different systems (an important point when every company used a different operating system) and how the compiler will interpret them.

And I think this ambiguity is a big reason the convention is still with us. What if one line of code begins with a two tabs, the next with four spaces and a tab, and the next with eight spaces? One text editor will show that as a block of perfectly aligned code, while another will show the lines as “ragged.” What if the compiler interprets things differently than your text editor of choice? It will claim there’s an error that you literally can’t see with your fleshy human eyeballs.

You could say to the programmers “don’t use tabs” or “only use tabs” or “only use this text editor,” but then your language is going to have a very hard time gaining users. Coders will gladly learn a whole new language, but they’d sooner sell their children than give up their text editor of choice. And no matter where you stand on the spaces-vs-tabs debate, once you’ve been doing it for a couple of decades, you’re going to have a very hard time teaching your fingers to do something different.

(Have a question for the column? Ask me!)

Shamus Young is a programmer, critic, comic, and survivor of the dot-com bubble.

About the author