Experienced Points: Undertale and Curly Braces

By Shamus
on Feb 29, 2016
Filed under:
Column

My column this week answers some reader questions about the public reaction to Undertale, the use of 2K textures in games, and to the use of curly braces in programming.

There’s a lot more that could be said about curly braces vs. indentation for denoting blocks of code. I wouldn’t be surprised if someone’s written a whole book on the subject. This is because code formatting isn’t a decision tree between “right” and “wrong” but instead a series of trade-offs to be managed.

A coder will spend more time reading code than writing code, so making readable code is more important than than making code convenient to write. Sometimes reading code involves analyzing each line and figuring out exactly what it does, and sometimes it means skimming quickly through pages of the stuff, looking for one particular thing. Ideally code should facilitate both types of reading.

But what makes something “readable”?

Maybe you want blank lines between code blocks, which serve roughly the same purpose as the blank space between the paragraphs in this post. It divides the thoughts on a conceptual level, while also giving you visual markers so you can keep track of your position. Or maybe you want to minimize the number of blank lines, because you want to fit as much code onto a single page as possible.

Once again, it comes down to domain. Some kinds of coding have huge blocks of dense math and you want to give the complexity some breathing room. Other code has lots of short, obvious actions and you want to pack as much of it together as you can. So you end up with a coder who writes simulations getting in an argument with someone who writes user interfaces, and a networking programmer will be sniping at both of them. All three people have very different code. When the simulation guy advocates giving code more room to breathe, the woman writing user interface code imagines the impact this policy would have on her already-sprawling code. They end up in a flame war, because they picture using the other person’s formatting on their own code.

This isn’t helped by our need to standardize. You want one set of rules for everyone to follow so your project isn’t a mishmash of different formatting styles. But that One Set of Rules will work better in some areas than others. And of course, once you’re used to a particular set of rules then it starts to look more “correct” out of simple familiarity.

It’s a tough problem to solve, and it doesn’t help that our projects keep getting bigger. More code, more different kinds of code, and more different programmers working on the same code. It could be that obsessing over spacing is just an awkward phase we’re going through, and what we really need are more tools for easing the burden of reading code. Maybe some sort of visual cues for code flow, or new ways of coloring code, or something else outlandish that hasn’t even been imagined yet. Maybe we need to write more robust comments not for ourselves, but for the benefit of some Google-esque code search engine. In the meantime, we’re going to be left haggling over stuff like spacing, because right now that’s all we’ve got.

Enjoyed this post? Please share!



A Hundred!202020202I bet you won't even read all 182 comments before leaving your own.

From the Archives:

  1. Hector says:

    There’s a Cave Story reference in there somewhere.

    More seriously, your Megatextures video explained so much of graphics technology in a very simple, easy-to-follow format. I particularly liked the brief discussion of texture information and why it scales so poorly.

  2. Orillion says:

    In my experience, curley braces are mostly used for brute-force pathos, because OF COURSE you want to save the cute girl robot from drowning!

  3. Ninety-Three says:

    Re: Undertale, I’m in your boat Shamus, I’ve been baffled as to what makes Undertale special. Unfortunately, you’ve shot down my leading theory which was that Undertale shares DNA with The Witcher in that there’s something about the characters people like (Witcher also failed to click for me).

    I can at least pinpoint a major factor that made Undertale fail for me, and I’ll raise it here in case it clicks for anyone else. Everything in that game is trying to murder you (even Toriel decides to solve her problems by setting a child on fire). The game clearly wants you to be empathetic, and I find it very difficult to do that under the circumstances.

    You know how in old Bioware games (KOTOR, for instance), the Evil option is usually “Stupid Evil” where you burn down an orphanage and kick a puppy? The sort of option where there’s no reason for your character to do it, it’s just there in case you the player make the out-of-character decision “I’m going to do a darkside run”. Undertale’s pacifist route felt like the “Stupid Good” option, where a monster repeatedly tries to murder you and instead of running away or fighting it, you keep trying to talk to it because you decided to play a pacifist, damnit.

    • sheer_falacy says:

      But you’re never in any danger of actually dying. Sure, they’re trying to murder you, and in a normal game that would be pretty bad. But you’re immortal. You always have the option not to kill them, and they can’t actually kill you. So do you have a moral imperative to take the high ground? That’s a question the game asks.

      Also, there are several characters who appear to be trying to kill you but (even if you weren’t immortal) can’t. And Toriel specifically puts rather a lot of effort into not killing you.

      Also it’s implied that quite a few of them aren’t trying to kill you at all – this is just how they interact with each other and it happens to be unhealthy for humans. “Bullet pattern birthday cards” and all that.

      • Ninety-Three says:

        What do you mean you’re never in danger of dying? The monsters will reduce your HP to zero which will send you to a game over screen.

        • sheer_falacy says:

          A game over screen, followed by you staying determined and returning to an earlier time. No danger of dying.

          • Ninety-Three says:

            That’s like saying you’re not in danger of dying in Half-Life because the game over screen just leads to returning to an earlier time. You ran out of health, the game said “Game Over” and you were returned to a previous save/checkpoint, does a game need to be Dark Souls and outright say “You died”?

            • Moddington says:

              Except in this case the game is explicitly about the power over the narrative you wield by being able to reload a save and try again.

            • sheer_falacy says:

              When Gordon Freeman dies, he’s dead. You can reload, but that’s separate. When your character in Undertale dies, they reload. It’s a big difference.

            • galacticplumber says:

              Yeah, and in Undertale that is CANON. You literally cannot die within the narrative so long as you continue to play. Some characters are even actively aware of this.

            • Wide And Nerdy says:

              How far did you get? And I’m wondering also how far did Shamus get?

              **Minor Spoilers here**

              1) Your ability to reload at earlier save points is not a gaming abstraction in this game. Its a power you possess. A few other characters are even aware of this.


              2) Toriel is not trying to kill you, she’s trying to scare you from going out into the world partly to protect you and partly because shes lonely. If your hp drops low enough, she loses her resolve and her attacks actively avoid you. You have to try in order to be killed by her.


              3) Everyone is scared. They’re either scared of you or of what will happen when you confront the King or of what the King might do to you. At the end of the day they all just want to be friends. Normally I’d be with you on the “But they’re trying to kill me.” But in this game they really sold the idea that these people are just scared and they’re in a weird situation.

              And when I ask how far you’ve gotten. Have you experienced the True Pacifist ending? Have you done the Genocide run?

              Here’s how you know. ****MAJOR SPOILERS****

              True Pacifist ending: Everyone makes it to the surface.

              Genocide Ending: Your final boss fight is Sans. Which incidentally makes me wonder if Shamus saw that fight and if not, would it change his ranking of how cool Sans is. I thought he was amazing in that battle.

              True Pacifist is the most feel good experience I’ve ever seen in a video game. Not the happy chirpiness of, say, a Mario game, but a more genuine feel good experience of people overcoming their fears to find new friends and love truly conquering all barriers. Over and over again just when it seems like love will finally fail.

              I don’t know that everybody will like it as much as I did or the real fans did, but I don’t think anybody who has actually experienced the True Pacifist ending would be left mystified by its appeal. And if you experience the Genocide run, it goes fully the other way. And its not just the feels. The game plays on a lot of levels, which seems obvious as you’re playing but you really don’t see near the extent of it unless you’ve played those endings.

              • Ninety-Three says:

                Re: Toriel: She decides to burn a child with DRAGONFIRE! What kind of bizarro world have I stumbled into where everyone is okay with using third degree burns as a disciplinary measure as long as the kid survives?

                That’s not a rhetorical question, I’m thoroughly baffled as to why people give your justification as thought that makes it okay, and I’d like an explanation if you can give one.

                I haven’t done the pacifist or genocide endings, though I read up on all the endings (including that detailed ending flowchart). I hate the True Pacifist ending. Almost all of those characters try to murder a child! I’m not usually the Morality Judge who automatically hates all the dark-side characters, but Jesus Christ, how can you have empathy for a bunch of attempted child murderers? I am actively bothered by the notion that these objectively monstrous individuals would or should get a happy ending.

                And that reaction is the exact opposite of what the game was trying to do. The game clearly expected me to like its characters, and I did not. There were no feels to be had because the game failed to connect on a basic level.

                • Moddington says:

                  Perhaps the same sort of bizarro world where roast turkeys heal stab wounds.

                • Wide And Nerdy says:

                  She wasn’t attacking your body. That heart in the middle of the screen was your soul, and human souls in this game are very powerful and resilient against monster magic per the game’s lore. Several people have explained this to you. Your character is immortal. You can’t actually be hurt.

                  This is also a game that is heavy on the side of mercy and forgiveness. You can even forgive Flowey. If he becomes Asriel again, you can hug him.

                  Nobody is beyond redemption, forgiveness or mercy. An attitude that a frightening number of people these days don’t seem to share.

                  • Ninety-Three says:

                    You can’t actually be hurt.

                    So what happens when your health is reduced to zero? Your character refuses to continue the current timeline and is forced to load a save, because they haven’t been hurt?

                  • ehlijen says:

                    Not being able to be killed and not being able to be hurt are two different things.

                    Being able to travel back in time to choose a different path after ‘defeat’ (how I’d read reloading in character), does seem to imply that pain and death are very much applicable to the player character, just not permanent.
                    And you said one of the opponents is trying to scare you. How? What’s to fear if pain and death don’t apply to you? The very attempt of scaring implies that at least pain exists. And inflicting pain is not a nice thing to do, and a lot of people are grugdy about that.

                    Is there an in-between route where you can walk past the futilely attacking enemies and not care about them? Or do you have to overcome them by combat or peace? Because my natural reaction to someone trying to kill me when I’m immortal would be to walk away.

                    I’m all in favour of making a game about the virtues of redemption, but I’m not about to say others are wrong if they don’t feel they want to forgive hostile entities that deliberately inflicted pain on them.
                    To want to forgive usually requires more connection then ‘they attacked me but I’m immortal’.

                    Disclaimer, I haven’t played the game, I’m just going by the arguments put forth here.

                    • Daemian Lucifer says:

                      Ok,heres how it goes:
                      The game established pretty early on that the key difference between monsters and humans is the soul.Humans have it,monsters dont.Thats why you attack monsters by simply smashing them,and once they die they disappear,while monsters attack your soul(the heart thingy).

                      Now monsters cant really harm your soul,but they are rather trying to absorb it.And with other humans,they actually can do it(and have done it),but you are different.You are a really special thing in this world,and all the “deaths” you experience are simply paths that your soul refuses to take.

                      This is why you cant just walk past the boss encounters,because they are trying to get your soul and use it to gain their freedom.You can either convince them that they are wrong(this does include avoiding their attacks),simply smashing them into a pulp(it gets easier the more you do it),or just burning the whole world to the ground.

                    • ehlijen says:

                      So the monsters are trying to kill you, and they can successfully block your intentions through hostile behaviour, forcing you to reload.

                      If ‘actively make peace with the being showing only hostility’ and ‘kill the thing that’s trying to kill you’ are the only two options, and you are forced to reload if ‘defeated’, then I’m with ninety-three and AR+ on this one.

                      If the game was truly supposed to be about what morality is when you’re immortal in a hostile world, it doesn’t sound like it succeeded to me. Sure, the game doesn’t call it dying and reloading, but if it looks like a duck and quacks like a duck etc

                      The ‘ignore’ option would be required, in my opinion, to fully explore that theme.

                    • Daemian Lucifer says:

                      First,its only the few bosses that are intentionally hostile to you.In fact,many regular monsters dont even know they can harm humans,and some actually heal you with their attacks.

                      Second,even then,most of the bosses dont even want to harm you,but are rather compelled to do it because their leader ordered it,but you can make them disobey that order.

                      Third,you can avoid and escape all the battles against regulars,and its only the bosses that you have to fight.And even then,you are just avoiding their attacks most of the time,not striking back when they are trying to strike you,which is enough to change their minds.Ok,technically you are changing their minds with your actions before the showdown with them,but thats just going into details.

                      Also,the game does call it dying and reloading.And in fact,some characters even recognize this and comment on it.So yes,you most definitely are an immortal,an aberration in this world,recognized by the main character,the game itself,and by a few npcs.

                  • Deoxy says:

                    Nobody is beyond redemption, forgiveness or mercy. An attitude that a frightening number of people these days don’t seem to share.

                    In a world of immortals, sure. In the real world, a frightening number of people don’t seem to mind the cost (to other people) of them trying repeatedly to “redeem” terrible people, many of whom disagree with their definition of “redemption” in the first place.

                    Example: Satanist Stan murders people. He thinks this is a good thing. Ned the Nice Guy keeps forgiving Stan and trying to “redeem” him, but Stan is ALREADY doing the stuff he believes necessary for his own redemption. The end result is that Ned gives Stan lots of extra chances to kill people.

                    Even if, magically, at the end of the day, Ned manages to “save” Stan, saving that one person had a cost of dozens of other people being murdered.

                    This is not a good thing. Put Stan down to begin with. THAT is the thing that brings mercy and redemption to the most people. Heck, you can even forgive Stan (and that’s probably a really good thing!), but he still needs to be put down.

                • Daemian Lucifer says:

                  Then kill them all.Go ahead and spare no one.You will still get a satisfying ending,and an explanation of everything.Then you can go even further and REALLY kill everyone,for a true genocide run.Then you will really experience those characters,see what they really were afraid of.

                  Or watch someone go through at least two of the endings,because it will be different.But one thing you should definitely not do is read about it.Watch it,or play it,dont read it.Its far too shallow to experience the game like that.

                • Merlin says:

                  I think it’s pretty clear at this point that we’re never going to be on the same wavelength, but I think you’re kind of misunderstanding the consensus take on Toriel. Namely, her attacking you is not a good action, and I don’t think anybody thinks so. It just becomes understandable and forgivable under the circumstances.

                  You’ve drawn comparisons to Kathy Bates’s character in Misery before, and I think you’re on the right track, initially. Flowey’s appearance in the intro makes clear that the underground isn’t all sunshine and rainbows. And while Toriel appears helpful and concerned, she’s undeniably controlling and her house is at least a tiny bit creepy. The confrontation with her as you leave the ruins is meant to address, clarify, and untangle that tension. It’s also where the Misery comparisons end, though.

                  You tend to present Toriel as if she were flying off the handle in violent rage, but lets look at her dialogue before the fight.

                  You wish to know how to return “home,” do you not? | Ahead of us lies the end of the RUINS. | A one-way exit to the rest of the underground. | I am going to destroy it. | No one will ever be able to leave again. | Now be a good child and go upstairs.

                  Controlling. Tense. Villainous.

                  Every human that falls down here meets the same fate. | I have seen it again and again. | They come. | They leave. | They die. | You naive child… If you leave the RUINS… | They… ASGORE… Will kill you. | I am only protecting you, do you understand? | … go to your room.

                  Still ordering you around, but she’s articulating a specific concern for your well-being that we don’t really have reason to doubt, especially in light of the game’s intro video.

                  Do not try to stop me. | This is your final warning.

                  This is now the third time the player has initiated action. Yes, she presents a roadblock, but she’s not escalating action and is showing a pretty reasonable amount of patience for a parent and tremendous amount for a video game character.

                  You want to leave so badly? | Hmph. | You are just like the others. | There is only one solution to this. | Prove yourself… | Prove to me you are strong enough to survive.

                  Fourth dialogue, finally getting into the fight. Note the implications here: other children came and were allowed to leave. Those other children were killed by Asgore (or more likely, Undyne), legitimizing her concern that got you to the point of confrontation. Also, the stakes of the fight are clearly to prove yourself, which given how the other kids made it through explicitly means it’s not a fight to the death. All this after such a long build-up paints a pretty clear picture that she’s not Annie Wilkes (finally looked up the character’s name) even if there’s room for a few lingering doubts.

                  Then you have the battle itself. Her patterns are much more complex than anything prior, so you’re likely to eat some damage and learn through the gameplay that she’s not really trying to win. That combined with all the groundwork laid in the earlier dialogue means that for most players, neither party actually wants to kill or significantly hurt the other. Then, if you do kill her, let’s check her dying words.

                  Urgh… You are stronger than I thought… Listen to me, small one… If you go beyond this door, Keep walking as far as you can. Eventually, you will reach an exit. … …. ASGORE… Do not let ASGORE take your soul. His plan cannot be allowed to succeed. ……. Be good, won’t you? My child.

                  So with her dying breath, she warns you again about somebody who’s going to be trying to kill you and implores you to be good and safe, even reneging on her idea of destroying the door out of the underground in favor of wishing you get there safe. No groveling, no insulting, no threatening, nothing. She’s concerned for your well-being even as you’re beating her to death with a stick, which pretty sharply reframes her motivations as being on the up and up even if her actions aren’t always. And this is confirmed further as you advance into the game and learn her backstory, or even just see her own up to her loneliness and self-loathing being harmful in her mercy dialogue.

                  • Ninety-Three says:

                    You made a request to leave and she attacked you. No matter what her dialogue says, there’s no getting around the fact that she is using lethal force to prevent the player from leaving. If you were her spouse that would be horrifying domestic abuse, and even worse, you’re a child. She’s clearly capable of preventing you from leaving in a less lethal manner: you’re a child with a stick and she’s a twelve-foot-tall goat woman with magic that easily chased off an apparently unbeatable monster (Flowey).

                    If she knocks you down to one health, her attacks start missing, but she doesn’t end the fight despite the fact that you’ve clearly failed whatever test this was supposed to be and continuing simply exposes you to lethal danger she supposedly doesn’t want. If you knock her down to ten percent health, while staying at 100% health yourself, she doesn’t surrender despite the fight clearly having proven whatever it was meant to prove.

                    Her actions are contradictory: the fight as a test makes no sense because she tries not to let you fail, it also makes no sense because she doesn’t surrender as she’s facing certain death. That’s why I went with Annie Wilkes, it’s not just that she’s trying to trap you in her house for all time, she has this psychotic internal logic that fits perfectly onto an obsessive stalker. “I can’t let the kid get away! I’ll give them a test! But I can’t let them fail the test because they’d die! But I can’t surrender even to save my own life, then the kid would get away!”

                    I suppose you could argue that she’s pitiably insane rather than contemptibly violent, but whether she belongs in a prison or an asylum, she’s the kind of psycho who should be locked away.

                    • Syal says:

                      Humans are superpowered in this world; imagine instead of trying to stop a human, you’re trying to stop a bear. And this bear is intent on going out and finding other bears, where it will be unceremoniously killed by… Dire Bears, or something. So to try to discourage it from shoving past you, which it is currently doing, you punch it in the nose. Is that considered using lethal force?

                      Also she never gets to 10% health, you get a critical and kill her from half.

                    • Ninety-Three says:

                      @Syal: If the force you’re using on someone is capable of killing them, then YES! Of course it’s lethal force! That’s what words mean!

                      Even putting aside your bizarre suggestion her ability to kill you does not represent lethal force, “lethal force” does not care for mitigating circumstances. Circumstances make the difference between robbery and burglary, between manslaughter and murder, but whether or not force is lethal is an objective fact, and so bringing up the circumstances as though they’re relevant is a misdirection tactic.

                      Re: Health, I sure got her below half, so I’m not sure what that’s about.

                    • Syal says:

                      Humans can reset time in this world. Therefore nothing can be considered lethal force against them because nothing will actually stick. The only way the monsters win, in-universe, is if the human stops fighting.

                      The health thing is there’s a health ratio where monsters are willing to run away and the fight is set up to end before she hits it. 50%, 40%, wherever the critical is, it’s purposely above the 20% or 25% where monsters are normally willing to give up.

                    • Ninety-Three says:

                      @Syal: So humans can’t die because they can reload a previous save, therefore what Toriel is doing to us isn’t a threat. But then Toriel’s goals make no sense because there’s no danger we couldn’t saveload out of, what is she protecting us from?

                    • Syal says:

                      “Can” isn’t “will”. The threat is you giving up and letting fate take its course. If she can get you to give up in the ruins you can stay with Toriel safely, if you leave and later give up outside the ruins Asgore and the others seek you out and kill you afterward.

                    • Ninety-Three says:

                      @Syal: But if you give up, fate doesn’t take its course, the world just stops, frozen forever, because that’s how save states work. It doesn’t make any sense to say something special happens when you put the game down and don’t pick it up again. If the idea is that time continues to pass and so bad things happen in the gameworld, well that’s provably false because if you put the game down for a month then load your save, you’re right back where you are with nothing changed.

                    • Merlin says:

                      You made a request to leave and she attacked you.

                      This is factually untrue. The fight is triggered when you, the player initiate it. This stands in contrast to battles that are actually initiated by monsters, like random encounters or Undyne. Toriel says no, you disagree, and after repeated badgering since you the player want the game to continue, you escalate the situation into a combat encounter. Even the opening text of the battle screen is non-violent: “Toriel blocks the way!”

                      Her actions are contradictory: the fight as a test makes no sense because she tries not to let you fail, it also makes no sense because she doesn’t surrender as she’s facing certain death.

                      All of this is baked in to the pre-combat text. She wants you to go back upstairs. All it takes is for you to press the flee button of your own accord, at which point the combat ends immediately with no further consequence. She wants you to make the call, for your little-d determination to run out and make the choice of your own accord.

                      Look, this is a lot of logical twisting to characterize someone who is explicitly trying to prevent the slaughter of another child as hopelessly violent… so that it’s 100% a-ok to beat her to death. She is wrong to hurl fireballs at you. We can agree on that. But at least she has the decency to stop, which at the very least seems less “contemptibly violent” than killing her after that’s been made clear. Especially since convincing her to stop basically consists of standing there going “Come onnnnnn.”

                    • Syal says:

                      @Ninety-Three: There’s a lot of branches to follow with that idea, so I’ll just go with “Toriel doesn’t think that”. She knows human SOULs have Determination, she’s seen humans die, she hasn’t seen time freeze and isn’t planning for it.

                      There is one time-based change, the optional boss.

                    • Ninety-Three says:

                      This is factually untrue. The fight is triggered when you, the player initiate it. …Even the opening text of the battle screen is non-violent: “Toriel blocks the way!”

                      No, you don’t. You talk to her. She says “Prove you’re strong enough”. The fight screen pops up. No matter what you do, she will throw fire at you. If Alice and Bob are having a conversation, and Alice stops talking to throw fire at Bob, Bob did not start that fight!

                      You’re accusing me of logical twisting while characterizing the person who will shoot first as non-violent. This argument is stupid and I quit.

                    • Geebs says:

                      I got the point of Toriel’s character (I think using her to mock overly-controlling RPG tutorials is the main cause of the apparent clash in her personality, and was a mistake).

                      There’s still a bit of a logical flaw here: if humans “canonically” cannot die in the game (and hence it’s ok to attack humans because no consequences), why does Toriel think leaving is dangerous? More to the point, if humans canonically can’t be killed, how did all of the other humans who “came before”…….die?

                    • Syal says:

                      Effectively, suicide; they die because they stop trying not to.

                      Or maybe it’s malnutrition because monster food has no nutritional value for humans. The game’s very vague about what happened to the others.

                  • Merlin says:

                    More to the point, if humans canonically can’t be killed, how did all of the other humans who “came before”…….die?

                    Immortality is a defining attribute of the PC, not of the other children. Humans canonically can be killed, but players cannot.

                • Cybron says:

                  Light spoilers.
                  A human child is still extremely threatenin by monster standards. You see a child, they see a murder bot not yet fully matured. Do you think it’d be weird to kill a facehugger? Those are kids too, you know. Killing you is also the key to freeing the monsters – whether or not it’s justified, so you think it’s completely ridiculous for someone to feel justified in killing a child if it means you, your loved ones, and everyone you know will finally be freed from a dark overcrowded prison you were unjustly shoved into – a child of your oppressors, no less?

                  The entire history of humans and monsters is “invincible warriors massacred us with no provocation and sealed the rest of us in a prison after we retreated.” And one of the endings has you finish the job and kill everyone so it’s not like you’re any less dangerous.

                  Your human centric outlook is understandable, but I can’t say it’s very justified.

              • Daemian Lucifer says:

                Yo,right here.I dont like the pacifist ending at all.In fact,I consider the genocide ending to be the actual ending,while pacifist is just some sort of a silly dream or something like that.

                But experiencing genocide without first experiencing pacifist does leave you with a loss.Because the most Ive gotten from the game is in the contrast between states.Just doing one thing,or interacting with one person is fine,nothing much.But seeing how they react to different things when you interact with them in different ways,thats where the true brilliance of the game lies.

      • AR+ says:

        The pacifist run is an allegory for being an abuse victim.

        It is always you’re responsibility to “fix” whatever it is that’s making the people who are hurting you stop, and never their responsibility to have not started in the first place. Like an abuser, the monster’s alleged reasons run the full gamut from “not knowing” how much they’re hurting you, like the volcano guys, to your own dirtyness, with the washbucket guys, or even just because they’re just straight-up murdering you for money, and if you take exception to this after they’ve said, “opps, my bad. Good thing you survived me this long!” you get a sad cutscene with a spider planting a flower.

        There is simply nobody who has any good justification for hurting you. Not even Toriel, whose first reaction to your trying to leave her is to make that impossible, then attack you when you press the issue. Typical abuser. (Some people say, “but oh, she’s trying not to kill you.” Uh, how about, if she doesn’t want to kill you, she doesn’t shoot your soul with lethal magic?! That would also have worked!)

        Which is all even ignoring some of the in-world motivations of the monsters, such as stealing you soul in order to destroy humanity.

        And then you have Asgore, who is known to have killed 6 humans before you, and, again, for the goal of destroying humanity. In the Neutral path, he is the only one you actually have to kill, since, after all, some abuser’s can’t be “fixed.” (double spoiler: ie all of them.) The True Pacifist ending, on the other hand, vindicates the abuse narrative completely! You succeed at fixing everyone’s problems and, as a reward for your trouble, they no longer blast your soul to pieces with magic. How nice. Also, Asgore never stands trial for the death of the humans that came before you.

        Also also, the fact that apparently any of the individual monsters who are let free would become god-like if they can just manage to kill 7 people, a plan many of them are known to have been completely on board with, is completely ignored.

        Some people will say, “but oh, the evil humans started the war and trapped the monsters underground in the first place! Which we know… from the monsters, who are your only source of in-game information. Gas-lighting, anyone?

        On the other hand, a less dark interpretation is that the game is about making your character see enemies as you, the player, see them. As in, “wow, this enemy has an interesting character design, a cool fight, with a great theme song! I like him!” instead of, “oh God, this robot is trying to murder me for ratings!”

        • Moddington says:

          Seems like a pretty poor allegory, given that, unlike a victim of abuse, you are never placed in a position of weakness. Thanks to your Determination, you always have the upper hand.

          Plus that whole everything-works-out-in-the-end bit, which would make for a horrifyingly irresponsible message if it was actually about abuse.

          • AR+ says:

            Persuading abuse victims that they themselves are the real abuser is also a known abuse tactic. Remember also that we don’t know how painful it is to get hit in the soul by hostile magic.

            Or how painful it is to be killed by soul obliteration, or to recover from that.

            • Moddington says:

              Given that the damage is completely healed by simply consuming food, I’d say “not much”.

              • AR+ says:

                Counter-point: it is fatal to humans.

              • Ninety-Three says:

                And in Castlevania you can heal stab wounds by eating a turkey, that means videogames are weird and silly, not that the stab wounds were trivial. Getting defeated in combat hurts badly enough that you literally cannot go on and are forced to reload a save. At best you’ve either been crippled or put in unendurable pain, and at worst, the game over screen means what it does in every videogame: you died, your heart stopped, you have shuffled off this mortal coil.

          • Felblood says:

            See stuff like this is why I like reading people’s thoughts on Undertale, even though it is so far from being anything I would enjoy playing. (The last thing I want is for my Touhou to turn into Epic Battle Fantasy 3. )

            It’s really interesting how stripping off the mask, of realistic art direction and a setting that takes all this stuff super seriously, can make the idea of the WRPG protagonist who is the only person who actually has free will super, super creepy. Everyone has a slightly different reaction based on their own relationship with WRPGs and every comment just drips with all this strange subtext that each individual brings to the table.

            For an aspiring game designer, this is a valuable window into the minds of the audience. So much of the internet is gaming culture’s Id laid naked that it’s nice the get to see what it’s Ego and superego have going on inside.

            Personally, I’ve been slightly squicked out by “Bioware Romances,” as it feels like they’re playing to the fantasies of a narcissistic megalomaniac, who’s secretly convinced that they are the only “real person” in the universe and everyone else occupies a point between “soulless sexbot” and “figment of my own lucid dream.” (Seriously, this is where skeezy PUA seminars find rubes skeezy and gormless enough to pay for their lessons. Also, if you need a particularly amoral enforcer for your new, evil cult, this attitude is a good indicator of a valued employee in need of a promotion and some kind of poisoned anthame.)

            It’s not a completely new device. Sands of Time explored the idea of rewinding time to escape unwanted outcome and thereby becoming immortal, and Soul Reaver paid lip service to the idea that only player characters had free will, and everyone else was just a puppet dancing on the strings of their assorted time shenanigans. It’s good to see those ideas get explored further, in a way that the Tumblr generation can engage with and digest them.

            • Ninety-Three says:

              To go on a complete tangent, I’d like to suggest you check out the romances in Sunless Sea. They’re pretty brief, but they make for an interesting digression from the standard model of “Pick who you like best, fill up their affection bar then you get to bang them”.

              Sunless Sea’s romances focus on the idea of compatibility instead of accumlating affection. Your First Officer “has no interest in tediously sincere lovers”, to romance them you must have a Veils stat (the stat of stealth and skullduggery) higher than your Hearts stat (the stat of leadership, charisma and morale).

              • Felblood says:

                The trouble with Sunless Sea is, by the time my stats get high enough to get anywhere romancing the officers, the sister’s mansion has burnt down and I’m probably going to die just trying to keep the crew from eating me.

                It is nice to have different skills important to different characters, but if you’ve ever played any of the assorted Sim Date clones (I’ve studied this genre a lot, partly becasue I don’t seem to enjoy it like others do), this is not exactly relavatory technology. It still does not alleviate the fact that each of my many many captains can romance any of the officers, so long as I choose the right build, and the same dialogues as last time. The player can always woo the target of their choice, with no risk, and I can’t see any way to improve that. Making it random would not make the illusion better, but only make the game more frustrating.

                I guess it feels slightly more genuine in games where the cast is randomly generated, e.g. The Sims or Dwarf Fortress, as each player character must navigate the sea of random noise searching for a compatible personality matched with a physique they find attractive. That seems a little more reasonable for my disbelief suspending mechanisms. However, there are some technological limits to what you can do with that.

                –at least until Toady One completes his oft threatened procedural love poem generator.

                • Ninety-Three says:

                  It feels different from the Sim Date ideas because in those games, everything is centered around dating, so your stats exist for dating, whereas in Sunless Sea your stats exist primarily for combat and skill checks, and their ability to determine romance options is secondary. It’s an awfully crude approach but I saw it as trying to capture the idea of “You’re a violent lout, so the doctor won’t like you no matter how nice you are to her”.

                  Sure you can warp your build so the doctor will like you, but when I play I tend to make build choices based on what combat stats or skillchecks I value, so the romance stuff ends up feeling like it’s reacting to my personality and restricting options, rather than just being another system to game or bar to fill up.

                  I guess it feels slightly more genuine in games where the cast is randomly generated, e.g. The Sims or Dwarf Fortress, as each player character must navigate the sea of random noise searching for a compatible personality matched with a physique they find attractive.

                  Does The Sims actually have a notion of compatibility? I always got the impression that conversations had a fixed chance of ending positively or negatively (plus or minus Relationship Points or whatever the metric was called, with positive interactions being more likely), independent of factors like personality. That said, I think the last Sims game I played was 2, so maybe things have changed since then.

                  • Felblood says:

                    Sunless Sea is a weird example becasue it’s basically the biggest budget game I’ve ever seen so dependent on the format of short looping gameplay where the player chooses different strategies each loop and observes the consequences on the endgame.

                    Big budget games tend to encourage one or two longer playthroughs, and thus give greater weight to the choices you make.

                    In a VN, Point and Click Adventure, Incremental game glossed as a business sim or short indie RPG (All of which I have seen bolted to systems for gating the dispensation of obscene .JPGs, so don’t act like adding an actual game to the other side of your stats in a dating sim is new technology), the player is expected to play through all the different story paths to see how they are different, so it becomes a game in itself to plan your build around how many new things you can see, in a single run. So that skill-set naturally led me to plan around an endgame, a grinding strategy and a romance when planning each new captain.

                    Regarding the Sims?

                    Yes. Yes it does have compatibility mechanics. It started out with personality based compatibility, based on simple stats and a birth sign mechanic. Then Sims 3 added a system of physical attraction, where each sim has like 2 traits that appeal to them, and one trait that is a turn off. All you have to do is imply that this is an abstraction of something more complex in-universe, and let the player’s imagination fill in the blanks.

                    One of my favorite things to do in Sims 2 was to create a married couple with fundamentally incompatible personalities, and see how long it took for them to reach the murder zone. She’s lazy, doesn’t care about cleanliness and gets depressed without constant attention, he’s a hard-working, asocal, neat-freak who comes home from a long day at work and cleans up her mess from being home all day, before collapsing from exhaustion. One day she buys a new sound system to cheer herself up, and that night she starts blasting tunes that he hates, while he’s trying to sleep. Once the first punch gets thrown, it’s only a matter of time.

                    There’s something about these emergent narratives that feel more realistic than anything a your average game writer could write. There’s a sense of risk an vulnerability that humanizes the characters.

                    • Ninety-Three says:

                      Sunless Sea is a weird example becasue it’s basically the biggest budget game I’ve ever seen so dependent on the format of short looping gameplay

                      You play Sunless Sea very differently than I do. My first playthrough was a sprawling fifteen hour playthroughs, thoroughly exploring everything I found. My second and third playthroughs were similar (one time I became a merchant worth 100,000 echoes, another time I set out to do every companion quest then finish off with the zeppelin East…)

                    • Felblood says:

                      You must be a lot better at this game than me.

                      I think my top survival time was about 8 hours, and most characters don’t live more than 3.

                      –but even 15 would be super short for something like FF7 or KOTOR where players are expected to take 30+ hours to reach the final cutscene, even if they ignore most sidequests and optional romance dialogues.

                      You invest a lot more in a single life, so there’s less of a sense that you’ll just restart and do something different next time.

                    • Ninety-Three says:

                      I’m curious, what tends to kill you? Taking a bunch of combat damage, a bunch of terror, or just running out of money and being unable to top up whatever survival bar needs filling?

            • Friend of Dragons says:

              Heh, after playing a chunk of Undertale, I actually went and found a Touhou game I hadn’t yet played because I was getting annoyed at the little snippets of bullet hell that always ended before they got interesting.

        • Ninety-Three says:

          That is a fantastic and almost certainly unintended interpretation of the game. I love it.

          The Toriel defenders always aggravate me because they say “But she wasn’t trying to kill you!” as thought it’s okay to burn a child with DRAGONFIRE as long you don’t kill them. Most people frown on so much as spanking children but apparently Toriel just gets a free pass because she’s endearing when she’s not being abusive.

          • Merlin says:

            This is a totally unimportant derail, but out of curiosity: where are you getting dragonfire from? (1) Toriel is a goat and there are no dragons in the game, and (2) in what way do you consider dragonfire different from regular fire? You’ve mentioned it a few times here and in prior threads, and obviously hurling regular fire at children is far from admirable on its own. It’s just struck me a little oddly when I’ve read it.

            • Ninety-Three says:

              I just assumed she was a dragon. Limitations of pixel art I guess, it did not even occur to me that the twelve-foot-tall biped with fire attacks was a goat.

        • Tewi says:

          “Some people will say, “but oh, the evil humans started the war and trapped the monsters underground in the first place! Which we know… from the monsters, who are your only source of in-game information. Gas-lighting, anyone?”

          As soon as you start the game, there’s an intro that explicitly spells these events out(with the exception of the humans starting the war, in fact I’m not even sure that they did), and none of that intro is subverted besides the identity of the kid that fell down the hole. It’s as close to a reliable narrator as you’re gonna get in a game as meta as Undertale.

        • Daemian Lucifer says:

          There is simply nobody who has any good justification for hurting you. Not even Toriel,

          Except when you go through the genocide route,you find out that absolutely everyone has an extremely good justification for trying to hurt you.

    • nm says:

      Is it weird that this is the first I’ve heard of Undertale ever? I talk to people who play games sometimes. What’s going on here?

      • Falterfire says:

        Do you read anything video game on the internet? Because if you mostly interact with people in real life it’s not that surprising you missed it – even insanely popular indie games tend to have a very limited visibility outside of internet gaming circles.

        If you read a bunch of digital games media though, all I can think is that you heard of it and then forgot – everybody who talks about games on the internet said their piece on it over the past few months since release, and it was on a LOT of game of the year lists in December.

        • Noumenon72 says:

          I read r/games, Rock Paper Shotgun, occasional Eurogamer, Onion A/V Club, and Rampant Coyote who links to indies, and never heard of this game.

          • Merlin says:

            For what it’s worth: RPS made it their game of the month last October and featured it on their end of year Bestest Best. I was really surprised that the AV Club largely ignored it, but it netted a (spoiler-laden) For Our Consideration article back in December. Also got high marks from a swath of reviewers from across the spectrum: Yahtzee Croshaw, Jim Sterling, and even apparently Total Biscuit. (Tom Chick unfortunately seems to have not covered it, which would’ve nicely completed the game reviewer variety pack.)

      • Limeaide says:

        It’s pretty good, you should play it.

    • Limeaide says:

      If you thought the pacifist run was stupid, you should just kill everyone who is attacking you. Seriously. If there’s one thing that Undertale’s good at, it’s making the consequences for your actions make sense. It won’t pull a Bioshock on you and say “you killed too many kids so now you go crazy” or a Dishonored with its “Since you killed 20% of the guards, everyone dies” stuff. Instead, the world reacts to characters dying in an entirely believable manner. It doesn’t transparently try to “punish” you for being a “bad guy”, either, it’s pretty even-handed about the whole thing.

      Unless, that is, you go out of your way to kill everything in the game that can die, including a few characters that are not aggressive at all, but that’s a whole different story altogether.

      • Ninety-Three says:

        It won’t pull a Bioshock on you and say “you killed too many kids so now you go crazy” or a Dishonored with its “Since you killed 20% of the guards, everyone dies” stuff. It doesn’t transparently try to “punish” you for being a “bad guy”

        What are you talking about? The more people you kill, and the nicer they’re supposed to be, the worse of an ending you get, ranging from “Everyone is happy all the time forever and you can hang out with your cool monster friends” to “The monsters are super angry, they’re going to make war on the Earth and they hate you specifically”. It doesn’t have the clunky binary endings of Dishonored, but there is a perfect correlation between your murders and the darkness of the ending. It is absolutely punishing you for being a bad guy.

        • sheer_falacy says:

          It’s in a more realistic way. It’s not “you killed 20 people so this unrelated bad thing happens”. It’s “you killed 20 people so their friends, family, and neighbors hate and fear you”. Like makes sense.

          • Felblood says:

            So the polar opposite of Mass Effect 3 then?

            Maybe that’s why this game is hitting so hard. It’s fulfilling the promised that ME couldn’t make good on, just as soon as the majority of the scars have started to fade.

            You-know-who excluded of course.

            • galacticplumber says:

              Undertale is a much shorter experience, with no voice acting that can therefor fill every facet of its world with detail and account for far more player actions. How much more? If you mess around in the game’s files and change Flowey’s theme he immediately notices when you first meet in game and asks if you’re making fun of him. It also remembers things from past saves and considers them canon. So much detail, so well written. Wow.

              • Merlin says:

                It’s far from the game’s only strength, but I think it benefited tremendously from the state of AAA gaming. When the market is getting flooded with sprawling open-world games that are built as much around poking the lizard-brain compulsion to clear icons off of a minimap as anything else, a tightly focused, highly reactive, emotionally engaging game is going to shine like a diamond. It’s funny given the budgetary & marketing differences, but it launching and picking up steam through Fallout 4’s blitz was kind of a perfect counterpoint.

        • Wide And Nerdy ™ says:

          Its down to this. If you want to be nitpicky and cynical and you’re determined not to be drawn in, Undertale has its limits. It was created mostly by one guy.

          But if you embrace the idea of being persistent, of looking past the hostility of those you encounter to see the fear and insecurity driving it, and you offer love and mercy, this game rewards you like no other. And to me that is important.

          This isn’t a judgment on people who, when wounded, aren’t in a position to reach out and offer forgiveness (there are people like that in this game and they’re treated sympathetically), its a celebration of those who can when they are able to. Because some people can do that and we’re all better off when they do.

        • Cybron says:

          Why does it surprise you that if you killed a bunch of people the survivors are unhappy?

          • galacticplumber says:

            Think about how few video games actually account for that and ask yourself again.

            • Wide And Nerdy ™ says:

              Thats the point. And its not like the game doesn’t give you plenty of hints early on.

              And unlike Spec Ops, you’re at least only judged based on instances where you can actually make a choice and even then the game is quick to forgive if you do kill some. There are characters who will understand that you felt it necessary. They won’t be angry at you, just sad about the results (for the most part.)

          • Ninety-Three says:

            Why do you think it surprised me? I was simply disagreeing with Limeaide’s statement that it doesn’t punish you for being a bad guy.

            • Wide And Nerdy ™ says:

              The game doesn’t punish you needlessly though. The only way you’re ever truly punished is if you completely commit to a total genocide run*. And even then:

              MAJOR SPOILER:
              Your punishment for destroying the world is that, you know, the world is destroyed. You can even undo it, its just that the person who can fix things for you will demand your soul, and its your choice to sacrifice it. Which imposes the only lasting consequence of any kind on you. You’re soulless for all subsequent playthroughs.

              * Which involves killing everything you can possibly fight, including killing random encounters until each area in the game is empty.

              Other than that, any killing you do might make some people upset but many if not most will understand and you’ll be offered multiple chances to stop.

              • Ninety-Three says:

                The more monsters you kill, the darker the ending is. If you kill enough you end up with the mosnters plotting to break free of the underground and make war upon the Earth, and have the monsters hate you. How warlike and angry the monsters are in the ending is directly proportional to how many you kill.

                How is “You started a war and also they’re going to be coming after you specifically” not truly punishing? How is “Killing Toriel destabilized the underworld destroying the best hope for a peaceful rule” not a lasting consequence?

                • Cybron says:

                  This is all sorts of wrong

                  There are essentially only two categories for neutral endings as far as killing monsters is concerned: less than 10 and more than 10. Everything else is determined by which bosses you kill don’t kill – in other words, who’s left in charge. The only endings where anything warlike happens is ones where you leave Undyne alive, which I can’t imagine you doing if you feel killing people who attack you is justified, since Undyne is the character who most actively advocates killing you. There are some other minor endings that complicate matters, but none of them contradict what I said about how dangerous to you personally the ending is.

                  And I can’t help but feel your complaints about lasting consequences are extremely silly. I thought you didn’t care about these child murderers? Why are you so bothered by what happens to them? It’s certainly a reasonable consequence of what you done – it’s not like the game is going gotcha, it’s quite upfront about the situation. You’ve previously advocates killing them for attacking you – now you’re not okay with leaving them alive but unhappy? This is some pretty twisted logic.

                  • Ninety-Three says:

                    You have misunderstood: Everything in Undertale is a monster, so I used “monsters” to refer to anything you kill, not just random encounters.

                    The Papyrus ending has the monsters trying to escape. The Mettaton ending has a policy of openly kidnapping humans. If Toriel lives she institutes a “Don’t kill humans” policy, but if you murdered too many people the policy is overturned. The Alphys ending ends with “I should’ve killed you when I had the chance.”

                    There are a ton of murder-based endings where the monsters are more angry and aggressive. And that’s bad if you’re a human, which I happen to be.

                    Furthermore, stop putting words in my mouth. Nowhere in this thread have I complained about lasting consequences. I never suggested it was unreasonable that these reactions occur. All I’ve argued here is that they exist, in response to Wide And Nerdy saying there were no lasting consequences except one.

                    • Trix2000 says:

                      Technically, given the fact that true resets wipe everything and return the whole story to the start there are no permanent consequences. It’s a bit 4th-wall-breaking, but that’s the nature of the game.

                      The reason the Genocide ending could be considered a ‘lasting consequence’ in comparison is because it persists through true resets, and permanently alters any future Pacifist endings. There is no way within the bounds of the game to change this, unlike any other choice made. Technically you can modify files or otherwise restore the game files themselves, but I think that’s a little too meta to be within the bounds of the experience anymore.

                    • Ninety-Three says:

                      @Trix2000: The Genocide consequence is certainly more lasting than basically any other consequence in any game ever, but that cannot be the minimum standard a consequence should meet to be considered lasting, because if so then Undertale might be the only videogame in history to have lasting consequences, and obviously your definitions have become silly at that point.

                    • Trix2000 says:

                      It has more to do with the fact that resetting or restarting the game are still part of the experience, when usually they are not. The game outright tells you that by taking the true reset you are wiping everyone’s memories and starting from scratch.

                      Most other games don’t involve that sort of thinking, so the concept of “lasting consequences” doesn’t factor in the metagame like Undertale does. Maybe it shouldn’t set the standard for what lasting consequences SHOULD be, but it definitely sets a new bar for them.

                      Within the context of the game’s narrative itself, there is only the one truly lasting consequence because all the other ones can be wiped away WITHIN the narrative of the game. Although perhaps there is an exception if we include the case where I player reaches an ending and never picks the game up again (Flowey even goes so far as to ask the player for this in the Pacifist ending).

                • Kamfrenchie says:

                  how is any sort of ending punishing ? if i understand you right any non happy ending is punishing. But that’s hardly a fact. In several games you can have an ending where things suck more for the world in general, especially if you are selfish, but that’s not punishment. Punishment would be taking your gear away, erasing all your progress or putting you against impossible obstacles.

  4. nm says:

    I don’t know what editor you use, but when I hit tab in Emacs (which is older than I am) it inserts 4 spaces.

    I’m a huge Python fan. It’s my go to language for short things I want to bang out quickly, or medium sized things where I care more about completion time than execution time. That said, I’ve been falling out of love with its formatting conventions for a few years now.

    The main reason is that my editor can’t possibly know how deeply to indent a given line unless it’s preceded by a line ending in a : or one of a few keywords (break, continue, return). That means that if I’m closing a block I have to press more keys than I would in C, and if I cut a block from one place and paste it in another, I have to pay attention or I might lose my indentation, particularly if it’s got other blocks of code nested in it.

    The other annoying thing about Python’s approach is long lines. They’re always awkward. In C, I can just break in the middle. In Python, I have to add parentheses or (worse) backslashes.

    After a little time with Go, I found that I preferred its approach with curly braces and gofmt. Of course, I still spend 90% of my time working with C code, and it’s fine.

    I spend almost exactly 5% of my work time working with Haskell. Haskell’s whitespace rule is like Python’s, but confusing. Python only uses indentation to indicate one thing. Haskell has more stuff going on with its whitespace. It’s cool when it’s intuitive, but if your intuition gets it wrong it gets tricky.

    • Ingvar says:

      I’d say that there’s something of a win with both “explicitly denoted block start/end markers” and “only indentation matters”. However, from a purely pragmatic point, I’ll have to give a slight edge to explicit markers.

      Because, only with explicit markers is it possible to take un-indented code and automatically indent it. It also makes it simpler moving blocks of code from one section to another, if they have different nesting depth (again, auto-indentation to the rescue).

      I mainly write Python, Go, Common Lisp and C (in order from most to least frequent in this day and age).

    • Tektotherriggen says:

      I don’t find myself caring about indenting (though I’m a fairly low-level programmer). But I can’t stand the multiple conventions about where curly braces go – tight around the lines, on lines of their own, own line at the start or end-of-line at the end… That’s just needlessly confusing.

    • silver Harloe says:

      “I don’t know what editor you use, but when I hit tab in Emacs (which is older than I am) it inserts 4 spaces.”
      Emacs is better than that. When I hit tab in Emacs while editing C, Perl, PHP, Java, and presumably other languages I haven’t used Emacs to edit – it indents the line correctly based on context, with 4 spaces per level of depth.

      1 while ( foo ) {
      2 while ( bar ) {
      3 if ( baz ) {
      4 thing;
      5 }
      6 }
      7 }

      If my cursor is *anywhere* on line 2 and I hit tab, it indents the line 4 spaces. If my cursor is anywhere on line 3 and I hit tab, it indents the line 8 spaces. Line 4, 12 spaces. Line 5, 8 spaces. Line 6, 4 spaces. If I hit tab on lines 1 or 7, nothing happens.
      (Of course, I wouldn’t do that precisely, I’d mark the region and do “M-x indent-region” and it would fix it all right up).
      This is handy for finding missing braces/parentheses/semi-colons.

      Per Shamus’ comment about the impossibility of getting people to change editors: the idea is to seduce them away with awesome features in your editor. I would rather do my Perl or PHP development in Emacs, but I’d rather do my C# development in Visual Studio because it has nice features, and I’m not a good enough e-lisp developer to rewrite those features for Emacs. I say this as someone who was seduced away from 20+ years of Emacs by Visual Studio (or, rather, I was during the brief period where I did C# development, since my current job is PHP, I’m back to my old editor – in 2018 I’ll have been using Emacs for 30 years (Shamus and I are within a couple months of the same age)).

      • Peter H. Coffin says:

        Please note that describing “what EMACS does” (or what vi(m) does) is entirely and 100% configurable and it’s only doing that because someone (probably the packager of your particular build) decided it should do that. It might insert exactly 4 spaces. It might insert some number of spaces to make the cursor land on a column that’s an even multiple of 4. It might insert an actual TAB character and render it as either of the above. It might even convert between some number of spaces and some other number of TABs on the fly when you open and save the document. Unless you looked, and/or built your own runtime configuration file, you don’t know. And until you’ve had to fix it different ways for different purposes, you’ll probably forget again and think about it in terms of “EMACS does this” when it’s being told to by something you’ve forgotten.

        (Oh, and most of the stuff Visual Studio does is things that EMACS and vim can do as well. If they’re told to. Hell, you can probably read this web page or play rogue in EMACS if you set it up right.)

  5. Tizzy says:

    how about having smart editors that reflow the code based on the conventions of your choice?

    • Falterfire says:

      I can’t speak for other coders, but I know that I personally would be far more annoyed than anything else with a program that reformatted my code as I typed it to fit whatever arcane rules it decided to use.

      • Echo Tango says:

        That’d definitely be annoying. The only way it could work, is if the person has to explicitly choose what format they want to view the code in. If they choose nothing the default should be to just leave it as-is, in the source file.

    • sheer_falacy says:

      Those exist. Actually most editors for C/C++/C#/Java/ do that. But you actually can’t do that for python, because the editor doesn’t know what you’re trying to do. Although generally they make it pretty easy by having tab indent and shift-tab unindent, or other shortcuts.

    • Alan says:

      There are a number of tools for reformatting code. They all share the same core problem: they tend to modify lots of your program at once, and that makes source control sad.

      Say, I pop open a file Bob has been working on. Bob has no taste, so I use Gnu’s “indent” program to fix it up. I then make a one line change and check it back into our source control system. Later Bob wants to work on it and pulls it out. He asks the source control system what Alan did, and it helpfully announces “Looks like he changed every single line of the program!”

      There are solutions: mandatory reformatting by software when you commit to the source control system, ensuring a level of standarization; mandatory group-wide standards; for small changes (like tabs vs spaces), many source control systems can be told that those change don’t really count (Although with Python, that may be wrong behavior!)

      Ultimately you just can’t win. :-)

      • Felblood says:

        Sure we can. We just need to send Bob to a Mandatory State-Controlled Re-Education Camp, just like all of the other people who disagree with me.

        What could possibly go wrong?

        This is sarcasm. Please do not explain the joke, Komradz.

      • Tektotherriggen says:

        It might work if it changed the displayed formatting to your personal preferences; but source code was automatically saved in a consistent style. But I’m sure that would cause even more problems somehow.

        • Echo Tango says:

          Example problem scenario 1:

          Alice has no reflow-options enabled for the view in her editor. So, she sometimes adds extra blank lines to help make the code easier to read. Bob has options for making blank lines look bigger, to help separate code, because obviously those blank lines should actually separate the code. When he opens files written by Alice, they have insanely long blanks between code blocks, so he and Alice promptly get into an editing war in any files they’re both working in. Sally, their supervisor, has the new, extra-smart options enabled, which combine duplicate blank lines, and other extra whitespace that’s beyond what’s needed to format the code. Sally therefore, has no idea what they’re fighting over, and has to physically walk over to both of their computers, to see how each of their computers is formatting the same code.

      • Peter H. Coffin says:

        This is why there are shop standards for programming style, BTW. Or should be.

  6. Da Mage says:

    The enforced indenting in python is the number one reason I have avoided it. I like to use comments and whitespace as part of my code to explain how things work, and python just makes that hard. I only learnt enough about python to know that I didn’t want to ever have to use it.

    • Echo Tango says:

      Can you give an example? I can’t think of a situation where messing with the whitespace for indentation would be useful for making the code easier to read.

    • Will says:

      You can indent comments however you want (similarly lines with nothing but whitespace don’t count) and you can introduce any whitespace you want (including linebreaks) within paired delimiters (e.g. parentheses, brackets, etc.). This may help you some.

      In any case, while I don’t like Python’s significant whitespace (it’s one of my major complaints against the language), I don’t think it’s enough of a reason to avoid it altogether. It makes throwing together simple scripts and prototypes incredibly easy.

  7. Merlin says:

    On one level, Undertale is a tightly written RPG with a charming sense of offbeat humor, not unlike Earthbound.

    On another level, it’s Spec Ops: The Line’s big brother that actually allows you to choose your actions and reacts to them with quite a bit of detail. It’s also astonishingly clever in how it plays with narrative & mechanical expectations. It doesn’t break the fourth wall, but I’d say it taps on the glass and maybe gives it a good cleaning.

    That’s pretty much the shortest summary I can give you.

  8. bubba0077 says:

    tabs >> spaces, and why is this still a question? The next user can make the tabs any size they want. Want to save space and barely indent? Have tabs = 2 spaces (or even 1). Want big, obvious indentations? Use 4 or 5. Using spaces to indent is just stupid.

    • Humanoid says:

      Fortunately I’ve never had to really think about it since the language I use most often at work doesn’t support tabs. But then that’s to be expected for something built around 3270 terminals. :P

    • Felblood says:

      Like so many of these solutions, this would work great if everyone magically switched to it at once.

      Here on Earth, we have format wars.

    • Phill says:

      That doesn’t work in every scenario:
      * Some lines may have non-tab characters before tabs (e.g. C/C++ labels, if you’re crazy enough to not put them on their own line)
      * Indentation to other depths (e.g. lining up multi-line statements may want to align to some point in the previous line other than the start or a tab-multiple depth).
      * Not everyone uses text editors with the ability to change tab indentation (and telling them to change their editors is a non-starter)
      * You might not want the same level of depth of indentation of code everywhere in the same file (e.g. I’ve seen code where someone liked quite large indentation, but had one function with many nested loops and if statements where it became stupidly indented, so they switched to much smaller indentation per step for that section of code).
      * Many programmers *will* try to kill you if you start trying to impose a universal system that happens to be different from what they habitually do.

      You might (reasonably) argue with the sanity of some or all of these, but the point is that there are cases where ‘tabs and nothing but tabs’ isn’t a universal solution. At which point personal preference starts to creep in and everyone is back to doing different things again.

      • silver Harloe says:

        “You might not want the same level of depth of indentation of code everywhere in the same file”

        Agreed.

        Normally I’m all about the ‘standard’ white space rules, but sometimes I have a whole slew of things together (like an array of arrays config) where I think it reads better as an ASCII “table” than as regular code. So I end up right-aligning numbers and spacing things out so if you’re using a proportional font it’s all in nice columns. Unless you have tabs in there and someone has a different tabstop preference than I do, in which case it would become an illegible mess. Of course, I don’t write it with tabs, but the point is I like spaces because I know how it will look on other people’s screens and I can make that part of the craft. It’s like how Shamus sometimes puts ASCII art as part of his comments – that just won’t fly with tabs.

        To me tabs v spaces is kinda like a small scale version of the w3c v web developers. The w3c has this vision of how things should be that doesn’t involve everything necessarily looking the same to everyone. But web developers end up using all kinds of tricks and special code to work around w3c because their designers have very specific pixel-by-pixel rules about how the site should look.

      • hemebond says:

        Indentation to other depths (e.g. lining up multi-line statements may want to align to some point in the previous line other than the start or a tab-multiple depth).

        That’s aligning, not indenting.

        Not everyone uses text editors with the ability to change tab indentation (and telling them to change their editors is a non-starter)

        If pressing TAB doesn’t insert a tab character, the editor is broken.

        You might not want the same level of depth of indentation of code everywhere in the same file (e.g. I’ve seen code where someone liked quite large indentation, but had one function with many nested loops and if statements where it became stupidly indented, so they switched to much smaller indentation per step for that section of code).

        Trying to enforce what you think looks better on other people.

        • Lee says:

          If pressing TAB doesn’t insert a tab character, the editor is broken.

          Or, you know, convenient. Pressing the Tab key should do what the user wants it to do. If your editor isn’t capable of making that happen, then it’s a lousy editor.

          Personally, I hate the ASCII tab character. It fucks things up. So, I’ve got my editor of choice set up to insert a number of spaces when I hit that key. Otherwise, the key would be a useless piece of keyboard real estate.

          (As an aside, how do you properly format a quote block in these comments? Ahh… got it by reading further down. blockquote is the tag I was looking for.)

          • hemebond says:

            Personally, I hate the ASCII tab character. It fucks things up.

            How?

            • Reed says:

              Pretty much as Shamus describes in the article:

              * Different people/editors have different-length TAB stops defined.

              * People mix tabs and spaces, so my “three tabs and four spaces”, which lines up with other lines with four tabs for *ME*, doesn’t at all line up for someone else.

              * People mix tabs and spaces, so you NEVER KNOW WHAT YOUR NEXT CURSOR-LEFT or CURSOR-RIGHT MOVEMENT WILL DO.

              How many tabs do you need to line up comments at the end of several lines of code? Again, it depends on the tab stops. Load someone else’s program, and these will NEVER align, because of how the random line lengths intersect with the different tab stops.

              Some editors even try to helpfully replace spaces with tabs for indentation purposes “on the fly”; you typed spaces, then backspace and ZOOP, too far back. Screw you, I typed SPACES goddammit…

              A space is a constant. A known. It will Do The Right Thing (at least, in a fixed-width font).

              A tab is variable. Unknown. Invisible. Oh sure, you THINK you can trust it. But wait til you’re editing someone else’s file. Or just moving around in your own, when you’re expecting spaces and get tabs, or vice versa.

              Spaces are necessary. Tabs are optional, evil, and must be destroyed at all costs.

              (My editor allows me to make tabs VISIBLE so I can SEE the evil and destroy it before it interferes with my editing karma.)

              Yes, this qualifies as a religious post, and I should apologize to Shamus for such. Sorry, Shamus… :)

              • hemebond says:

                Different people/editors have different-length TAB stops defined.

                Doesn’t matter. That’s their preference. Doesn’t change the indentation level. Three tabs means three levels of indentation regardless of how “wide” the tab looks.

                People mix tabs and spaces, so my “three tabs and four spaces”, which lines up with other lines with four tabs for *ME*, doesn’t at all line up for someone else.

                So you’re trying to use spaces to align with a tab. That’s on you, not tabs.

                People mix tabs and spaces, so you NEVER KNOW WHAT YOUR NEXT CURSOR-LEFT or CURSOR-RIGHT MOVEMENT WILL DO.

                Only if they’re mixing them incorrectly. Done properly it will be obvious what backspace does.

                How many tabs do you need to line up comments at the end of several lines of code?

                Again, you’re aligning, not indenting.

                None of your arguments point to a problem in using tabs for indentation, just sloppy coders who don’t understand the difference between indentation and alignment.

            • Felblood says:

              Because it looks different on different peoples machines.

              –except that some people really like the idea of being able to make other people’s stupid tabs look like their own, better tabs.

              So there is the standards war.

        • karln says:

          > If pressing TAB doesn’t insert a tab character, the editor is broken.

          If pressing TAB inserts a tab character, I will go look in the settings for a way to change that to something actually useful. Like adjusting the indentation of the current line using spaces only.

        • Phill says:

          That’s aligning, not indenting.

          So? You can call it code poetry for all I care, but whatever label you chose to apply to it, it is still something that can be incompatible with “everyone should use tabs and set their editor to display it how they like”

          If pressing TAB doesn’t insert a tab character, the editor is broken.

          What I meant was that not everyone is using an editor that lets you change the appearance of how much space is covered by each tab (and as noted by others, some people prefer to configure the tab to insert a specific number of spaces instead)

          Trying to enforce what you think looks better on other people.

          No. People write code with a layout that suits them and the tools they are using. It might be nice in theory if code was more html-like with formatting marks instead of tabs and spaces, and people could chose how to display that information themselves, but until a standard exists that defines this adequately, all coders are using editors that are standard complaint, and all legacy code has been converted to the standard, it seems like an unrealistic pipe-dream.

          In the meantime, insisting that everyone should only ever use tabs is ignoring the fact that this doesn’t solve everything, and boils down to “If everyone did it the way I prefer, then I wouldn’t have any problems with other people’s code formatting”.

    • Echo Tango says:

      There remains the problem, of how you deal with long lines of code. If you’re using tab characters, you can’t use an X-character line length limit, because the different lengths of the tabs in every line will make their view and their character count be different. i.e. All the lines of length X will still look ragged and unaligned to the human eye.

      • Christopher Kerr says:

        here remains the problem, of how you deal with long lines of code.

        You don’t. Hard caps on line lengths are stupid anyway, and nearly always enforced by the sort of people who insist on commenting every single damn line of code*.

        Just have your coding standard specify that line lengths should be comfortable to read.

        * If you’ve not had the pleasure, that looks something like this:

        while (True == IsStupid) { // Loop as long as IsStupid remains true
        printf(“I’m a moron”); // Prints “I’m a moron” to the console
        } // End While

        • Christopher Kerr says:

          And of course the comment box ate my extra spaces, so that example doesn’t look how I intended at all.

        • Echo Tango says:

          Regardless of people who choose to make up arbitrary rules for stupid reasons, there still is a reason to have short lines:
          Scrolling vertically is easier than scrolling horizontally. Our fingers move in an up/down motion with more range, and more easily than side to side, and we have mouse-wheels to exploit that. You could have a modifier key to change the wheel to scroll sideways, but that has an extra button press, and you’d need to remember which way was which.

        • hemebond says:

          Hard caps on line lengths are stupid anyway, and nearly always enforced by the sort of people who insist on commenting every single damn line of code

          Since the defacto standard seems to be 80 characters I suspect it has something to do with the default width of a console.

  9. Eldiran says:

    I suspect a big reason for Undertale’s momentum is because its creator, Toby Fox, was once (still is?) a composer for the massively popular Homestuck. Homestuck has a HUGE tumblr community, and tumblr is practically tailor made for making things go viral.

    • Cinebeast says:

      I was going to mention this. A lot of Undertale fans are former Homestuck fans, as I understand it. (I’m not, but my brother is, and he introduced me to Undertale.)

    • Christopher says:

      Fan community wise, it certainly seemed like my friends who are Homestuck fans easily jumped ship to Undertale when that came around.

      I couldn’t say what makes one thing interesting for some people, but I have noticed that some indie things with really ugly drawings in them get a lot of fanart. Besides Homestuck and Undertale, Touhou comes to mind as a franchise that has a RIDICILOUS amount of fanart compared to how big the games themselves are. I wonder if it’s just because those things are easy to form fan communities around. There are somewhat defined canons, and characters have clear personalities, but when even the character designs are open to interpretation(and when you look at official artwork and for once get the impression that you could do it better), there’s a lot of room for the sort of fan that likes to write fanfiction and draw their own versions of characters.

      I couldn’t tell you how Urdnot Wrex would behave if you had him man a hot dog stand, but I could easily write a (very poor)story about how Sans would behave if he was a space mercenary, to put it like that(It would be exactly the same, but he would hold a gun, presumably without any bullets, and he couldn’t be assed to use it).

      • Felblood says:

        Well, as much as I hate to admit it, the Homestuck Fandom is a bit of a sinking ship, and we all needed to find somewhere to jump to.

        Broken promises of an end the the endless delays have seriously dented the momentum of that movement.

        I’ve noticed a lot of folks migrating to MLP fansites, which offer a lot of the same advantages (Arch characters with lots of development, and an art style that is iconic enough to imitable, yet flexible enough to allow for exploration).

    • Axehurdle says:

      Aha! I knew Undertale was a Homestucky thing! It just felt so Homestucky.

    • Khazidhea says:

      Hey Shamus, thanks for answering my question! After reading through the comments many aspects of Undertale’s widespread positive reception became clearer, especially Eldiran’s about the pre-existing fanbase and use of Tumbler I can better see how it went viral.

  10. Daemian Lucifer says:

    As someone who has finished undertale twice(two and a half times actually),I too am baffled with how well its received.Dont get me wrong,I like the game,but its definitely not the best game ever,nor even the best game of the last year.Its high,but not that high.

    But you know whats the weirdest thing about undertale?I didnt really like it that much until I started my genocide route of it.Because the feel of the place you get after you go through it once is radically different once you start this.

    So I literally am saying “the game gets good only after X hours”.Even though I HATE that sentence.But it definitely applies to this game.

    As for all the meta stuff everyone keeps on harping about…ehh,they were not that great.A few neat little tricks here,but nothing that special.Except for the end of the genocide route.

    Gameplay wise,there are so few places where you actually get to get off the rails and actually do something really fun.Once in the pacifist route and a few times in the genocide.The rest is just following the narrative with nothing that demanding for you to do.And while the narrative is strong,having more encounters like in the true lab wouldve made the game much better overall.

    • Syal says:

      I think Toby said everyone has a favorite and least favorite part, but which part is which is always different. Very much applies; I kickstarted the game back when it was just the demo because I was enamored when it was just the Ruins.

      Ruins introduces concept and mechanics, Snowdin introduces characters, Waterfall introduces plot, Hotlands introduces Mettaton and internet humor (…I don’t really like Hotlands), and the rest offer plot and emotional resolutions; there’s no good place to draw the line and say “This is the good part”.

      • Trix2000 says:

        Mettaton and Hotlands (and maybe by extension, the Core) had some of the best music in my opinion.

        • galacticplumber says:

          Unless genocide in which case undyne and sans have objectively the best music.

          • Trix2000 says:

            Okay, you’ve got me there on Sans – he has seriously the best track in the game for his boss fight.

            Heck, that entire fight is probably one of my favorite bits in the whole game, and I didn’t even play it myself (Couldn’t get myself to play Genocide, so I watched parts of it)!

            Undyne is indeed also awesome, but then that’s pretty much a given. Suplex a boulder JUST BECAUSE YOU CAN!

        • Syal says:

          Can’t comment, my two favorite non-Genocide songs are both remixes from earlier in the game. My brain apparently loves tweaking things it’s heard before.

  11. Rick says:

    I’m just glad to mostly be using curly braces instead of more keywords like “begin” and “end” like in Pascal where I started.

    Though bash scripting still uses such verboseness.

    • Peter H. Coffin says:

      Shell scripting has the … goal? requirement? something… of being able to be used almost regardless of character encoding and keyboard, and for quite a long time, most terminal keyboards didn’t have curly braces. Though they often DID have special negation symbols (¬) and about six ways to erase text.

  12. Sean Hagen says:

    So how do you feel about languages that either have a well defined style ( ie, Ruby or Python ), or languages that the style is nearly part of the language spec ( Go’s “gofmt” ).

    Personally, I prefer to follow a style guide. I used to be of the “I’ll style my code how I like, thank you very much” school, but using rubocop and more recently Go has changed my mind. Sure, it takes some time getting used to ( and some cursing ), but it has a few benefits that I think are pretty important.

    First, no more arguments about how to style code. It helps that the thing telling you that you’re not writing code correctly is a tool, and not another human being. It’s easier to say “sorry, but I can’t accept your pull request until it passes a rubocop/gofmt/flake/whatever check” is easier to hear than “I don’t like how your code is styled, change it to suite me”. A secondary benefit to no more arguments? Now you have more time to discuss what actually matters: what the code is doing.

    The second benefit is that once you start using a style guide ( especially one that enforces method length ), it becomes a LOT easier to see code smells.

    Now, granted, as a web developer working in newer-ish languages, it’s probably easier to advocate this kind of thing. To be honest, most of the web industry is moving towards style guides — and all the articles I’ve read basically boil down to reiterating the two points I mentioned above.

    For game/systems/hardcore network programming, it might be different. Older languages like C/C++/Java have a lot more momentum behind a set of competing standards ( I know that there’s at least four or five for C++ ). Hopefully these languages will see some super awesome, well-written style guides ( and some articles championing their usage ) soon — mostly because if you’re still running into style arguments, then… well, I’m super glad I’m not a game dev or systems guy then.

    • Phill says:

      As a C++ programmer I tend not to come across too many style arguments. Most people are quite capable of reading code regardless of the layout preferences of the person who wrote it and unless it has some practical impact, I think the rule of thumb is “if you don’t like how someone else formats their code, get over it”.

      • Ingvar says:

        The style guides I’m familiar with encompass more than “layout”. I think they actually mostly aren’t “layout” in the pure “code on screen” sense, but are more things like “prefer X to Y”, “please don’t frobnicate flurbs”.

        Python and C++ example style guides for perusal. For the C++ style guide, formatting (in some sense, if you include naming conventions and comment conventions in formatting) is under a quarter. If you’re only talking about things like “line length” and “brace placement”, I think it’s under 10% eyeballing the scroll bar.

  13. Ian says:

    This:

    “making readable code is more important than than making code convenient to write”
    (Also: how do quotes work?)

    Thirty-plus years of programming in various languages, and I would say this is the single most important rule. Another way of looking at it – more time will be spent debugging than will be spent writing, and most of that time will be spent debugging somebody else’s code. Why would you be such a dick as to not take that into account when writing?

    Related: somebody much cleverer than me once said words to the effect of:

    “It’s harder to debug than to write, so if you write the cleverest code you can manage, then by definition, you are not qualifed to debug it.”

    Keep it (relatively) simple, and you’ll save a ton of man-hours down the line.

    • Lachlan the Mad says:

      The quote tag is {blockquote}, except with the curly braces replaced by less than/greater than signs. So {blockquote}Luke, I am your father{/blockquote} becomes:

      Luke, I am your father

    • “making readable code is more important than than making code convenient to write”

      That, more or less, is what my 1st comp sci/intro to programming professor taught me, along with comments should explain what you’re trying to do so when you or someone else has to come back years later debugging will be easier. He also gave us loads of samples of various java code (it was a java class) formatted various ways to emphasize that in the “real world” people do stuff in lots of different ways and we’ll be better programmers if we can deal with that.

      Sadly, I went back to my college after that semester, and their department is very theory-oriented. My prof failed my first program not because it didn’t work or compile, but because I’d used “too many comments and only idiots format like that”. I lasted the rest of the semester, then ran to the physics department where they didn’t care how I commented code and I got to play with lasers and cannons.

  14. Pyradox says:

    I love Undertale so goddamn much.

    I’ve been wanting a game where you talk to the monsters and make friends with them forever and this is not only that but it’s cute and really funny and the music is excellent.

    I love how reactive it is and all the meta stuff it does, I love how sincere and charming it is, and I love how it’s not afraid to let you brutally tear down everything it’s created because that’s how you chose to play it.

    I love Undertale so much it makes me angry that other games aren’t like it and don’t even try to do what it managed to pull off so effortlessly.

    I’m just glad I got to play it before I knew anything about it, because this is a game where I think knowing what it’s about ahead of time can actually ruin it.

  15. IFS says:

    So I see a lot of people above talking about Undertale and how all the monsters attack you and I think some people are missing an important point. Namely most of the monsters aren’t attacking you, they’re just doing normal everyday monster things that happen to be harmful to you, many of them can’t even tell that you are a human because its been so long since they last saw one. For some examples the moldsmals are just wiggling and dropping spores, Napstablook is just crying, Temmie only harms you because you happen to be allergic to her. These things are magic (because that’s basically what monsters are made of) and not harmful to other monsters (look at how many hits the mad dummy takes for an example of this when he’s trying to hurt you), as a human you aren’t as strong against magic but far stronger physically. Now there are plenty of monsters who do mean you harm, and their reasons are discussed in game and in many ways are reasonable.

    Personally I find Undertale (particularly on the pacifist run) to be an incredibly uplifting and optimistic game which feels very rare in this day and age, and that is a huge part of why the game resonates with me. While there are aspects of the game I don’t really care for (I didn’t find the combat terribly fun, though I think it is really clever in how it incorporates itself into the story particularly for boss fights) I feel I can only describe the game as a joy to play as that is the feeling it inspires.

    • Merlin says:

      It’s unique, too, in that it isn’t just candy-coated optimism. You get that saccharine taste in the intro, with the cutesy music and meeting Flowey the Flower. Then an acid streak when he tries to kill you. Then the uneasy feeling out of whether Toriel genuinely wants to care for you or whether she’s a crazy person. Possibly getting a hateful streak of meta-commentary shortly afterwards depending on your actions. Everyone’s charming, but also fundamentally lonely or depressed. It’s impressively up and down, emotionally, but with a good heart and enough determination, you can come out on top. It’s kind of like a great Superman story, in that respect.

      (Or you can climb a pile of ashen corpses out of the underground. Whatever floats your boat.)

    • Killbuzz says:

      This interpretation is at odds with the game, because you stumble upon settlements of monsters who don’t attack you. They are clearly capable of speech and can clearly understand you, as evidenced by some of the encounters where the monsters don’t appear out of nowhere, but you actually see them in the area and you can talk to them. The game wants you to feel guilty about killing monsters, even though you are obviously acting in self-defense. Essentially, the game is trying to have its cake and eat it too (alternating between being abstract and dramatic whenever it’s convenient), and I don’t think it works.

      • IFS says:

        I’d say the game is trying to present its obstacles (the monsters) and then tell you that they are still people. Yes if you kill them it is in self defense (unless you do the genocide run) and you could certainly justify it, but that doesn’t make killing a good thing. Because these obstacles are people that means that they have people who care about them, and it also means that they can be reasoned with. I don’t see anything wrong with feeling guilty about acting in self-defense, and personally I think the game does a very good job of weaving its abstract and dramatic elements together and using both to relay the narrative.

        If nothing else Undertale does a fantastic job of using its mechanics as part of the story, explaining them and working what they mean for its world into the story rather than leaving them as simple gameplay elements. In that respect I think its a new step in how we can tell unique stories with video games that simply would not work in another medium.

        • Trix2000 says:

          I think this is the best way of considering it. Yes, it could be entirely justified to kill a few monsters to defend yourself, and I don’t blame people for having opinions against said monsters for doing so. Everything about the Neutral route seems perfectly reasonable.

          But why does it follow that killing HAS to be done at all? Just because self-defense is the reasonable (and easy) option doesn’t make it the only one, and I feel like the game is trying to encourage the idea of being friendly and kind in the face of any adversity. EVEN against those who are completely set on killing you like Undyne.

          Even though going through so much danger and effort to try not to harm a single monster (and befriend them even!) sounds crazy, I think it’s also admirable. Here’s a person who is kind and considerate enough to see even her greatest enemies as… people, individuals, possible friends… as opposed to just “monsters trying to kill me”.

          Going that route is about being the better person and helping everyone, not just about survival. It’s valuing others more than just oneself. It’s forgiveness in the face of ANYTHING.

          • Killbuzz says:

            No offense, but this sounds like the sort of apologism that comes from an abuse victim trying to rationalize why it’s okay for their loved one to hurt them. If these intelligent, fully lucid creatures are trying to murder you, you shouldn’t show them leniency. Gating ‘true endings’ behind extremes (the insanity of not killing anyone that is the pacifist path, or the tedious grinding of killing everything that is the genocide path) is just bad game design (and also bad from a story perspective, why do characters only respond to extremes?).

            The praise for Undertale is because it supposedly uses its mechanics to tell its story, but it really doesn’t. If anything, the game demonstrates how NOT to tell a story through game mechanics. Take for example the ‘genocide path’, which just involves grinding encounters, because the game arbitrarily doesn’t let you kill NPC’s (who are monsters, but don’t attack you for arbitrary reasons). Or the pacifist path, where the game wants you to to take other approaches to dealing with enemies, so does it let you use stealth and diplomacy to bypass encounters? Nope, you are forced into a combat mini-game where you do essentially the same thing as a genocide character, except choose ‘mercy’ instead of ‘attack’.

            Undertale seems like it’s in denial over what purpose game mechanics serve.

            • IFS says:

              I’m not sure the comparison to abuse holds up for a number of reasons. For one you are approaching any conflict in Undertale from a position of strength, if you wanted to you are fully capable of wiping out every monster you encounter. For another you are not trying to make an excuse for someone that will continue to hurt you, you are approaching with forgiveness and friendship and overcoming that initial conflict, you are choosing not to buy into a cycle of violence and instead break it. Finally the people knowingly trying to hurt you are not doing so to make themselves feel better but because they believe their only hope for a better future lies in your death (you could argue otherwise for certain characters, but that already seems to have been discussed in detail above).

              As for how the mechanics tie into things the genocide run is pretty much a literal exploration of what the minmaxing level grinding approach some take to RPGs means in the world of Undertale (made especially apparent by the Fallen Child’s speech at the end). Also there are a number of otherwise peaceful NPCs who you will pick a fight with and kill in the genocide run because that is what you are setting out to do. Your choice of mercy or fighting in encounters is far from a binary one, you can fight monsters until they are hurt enough that you can have them run off for example, or you can use various options in the ACT menu to talk to them or otherwise peacefully interact. Beyond that the game puts your interaction into that screen for a reason, you aren’t avoiding conflict by talking your way out of it that would cheapen the message, instead you are taking a more difficult approach (as you do not gain exp or Lv from showing mercy, so your hp will never increase on a pacifist run) and rising above violence. If you just want to avoid enemies on your pacifist run there is a ‘run away’ option in the battle menu that you can use.

  16. Dev Null says:

    Curly braces still exist in code because anyone who makes my code fail because a collection of invisible characters are the wrong invisible characters should die in a fire. You should be able to look at a file of code – in any editor – and unambiguously tell what it does.

    • Echo Tango says:

      All the editors I’ve used have had options to show marks for whitespace, to detect tabs vs whitespace in a file, and to fix all the tabs/spaces to be the same. So, even though some C code might not actually need the whitespace to be consistent, the editor makes it consistent for free.

  17. Peter H. Coffin says:

    Also, I think curly braces actually DID show up first in B. IIRC, BCPL and a few other languages used fake curly braces

    $( like this )$

    and I think the fake curlies were even usable alternatives for {} up into mid 1980s C compilers.

    and CPL used some space cadet keyboard stuff that looked like section symbols (§) but with lines through it. You can see how BCPL got theirs though, and the shift then to use a single character in B. Also, parens () and square braces [], angle braces were already being used for other things (precedence, array subscripts, comparison operators respectively) and the braces where the only common (in the US) paired markers left.

  18. swenson says:

    I fall squarely into the “spread that code out as much as possible” camp. Curly braces get their own lines, plenty of whitespace, large indents (assuming you’ve got a widescreen monitor), all that jazz. It just makes life so much easier when you’re skimming through code later, looking for something.

    And if we’d like to start swapping horror stories, how about one I encountered last week? So, you can declare #regions that Visual Studio can collapse for you, to make it easier to organize and navigate through large files. I’m going through a decent-sized method… when I suddenly notice there’s a couple of collapsed regions in the middle of it. And then I noticed that the line numbers skipped from 263 to 2016… the whole method is almost 2000 lines long!! (and that’s not even including all the braces and whitespace I’d have thrown in, if I’d written it!)

    • Axehurdle says:

      Oh God. Thanks for mentioning putting opening braces on a new line. The Tabs Vs. Spaces War I don’t really care about. But opening braces belong on their own line! I will fight you!

      • Phill says:

        My experience has been that people start off with a variety of opinions on this, and as they get more experience they tend to gravitate to the ‘opening braces get their own line’ approach. It’s part of the defensive programming mindset: it just makes it slightly harder to make certain types of mistakes, and anything that makes mistakes harder to make is a good thing.

        (For similar reasons, I will never name a loop variable ‘i’ anymore, after I spent a while tracking down a bug that turned out to be due to nested loops using ‘i’ and ‘j’ where someone had got confused about the variable scopes and used ‘i’ thinking they were using the outer loop variable, but actually using the inner loop one).

        • Axehurdle says:

          I stopped using ‘i’ as a variable name after I accidentally put a 1 instead and it took me over an hour to see. The dumbest mistake I’ve ever made.

  19. Bropocalypse says:

    Someday someone will (try to)come up with a means for multiple languages to interact seamlessly, and everyone will (potentially)be happy. Except for when they try to talk to each other with their mouth-holes.

  20. Decius says:

    Why are we arguing about “code formatting” at all? It seems that the explanation was of a problem called “code display”, which should be a setting in the software that one is using to edit the code.

    • Echo Tango says:

      The problem is, that unless everyone is using an editor that separates code display from the actual text characters, you’re going to have a conflict between the people who have the separation, and the people who are still adding in extra characters to format the code.

  21. VaporWare says:

    Sometimes I look at the conversations surrounding games like Undertale or Shadow of Mordor and I think I just don’t read things ‘right’ by anyone’s standards at all.

    My contribution to the conversation therefor will simply be to re-iterate here what I said on the Escapist: I think that even if you can’t connect to it on a personal level, Undertale would be worth sitting down and studying from the viewpoint of a developer and author. Pick it apart to get a good look at how Toby pieced together the whole bag of mechanics and tropes, because it really is delightfully intricate and well considered as a piece of entertainment software, whether or not one particularly agrees with or can engage with the many underlying themes and messages the story is trying to convey.

    Apart from the value in study of attention to detail, you might catch a glimpse of why it compels so many players, for better and for worse.

  22. MadTinkerer says:

    “But back when BCPL was invented in 1966, our text editors were abominable.”

    What text editors? You don’t “edit” a hole punched in a punch card or paper tape, silly!

    Before someone corrects me; yes there were computers that had interactive text editing on a monitor in 1966… as long as you had a few million dollars to spare and the know-how to write the text editor on paper tape so you could feed it into the computer.

    So the quality of your text editor depends on how competent you are with writing a text editor in the proprietary computer language of whatever system you are sharing with the other users. Good thing you are already a computer science major and/or math major and/or a technician trained by the manufacturer! Also, you are at MIT or maybe Cambridge (unless I got the timeline wrong, in which case just MIT).

  23. I really dislike curly braces as block markers.

    There is no reason why a if statement can’t automatically start a new block, and else mark the end of the if block and start the else block.
    The issue as noted was the dangling else, but that can be resolved by using endif.
    It’s only 1 letter more than two opening braces and two closing braces.

    Another thing I really dislike is that curly braces are optional when there is only one line of code following the expression.
    If you later need to add things you must add the missing braces, and if you forget you end up breaking stuff.

    So if one is to code in a language that uses braces (or similar) then always use them, even for single line ifs and elses. If someone forgets the opening brace then a parser has no clue, if unlucky it might not throw an error at that point (thinking it’s a single line if) but at a much later point, making debugging a a real pain in the ass.

    Also note that when I say single line if I also mean the variant where half of he single line if is on a second line (i.e. it has a linebreak after the if expression itself).

    I wonder if any of the modern C compilers have a switch disallowing single line ifs? (i.e. enforcing use of braces)

    Edit:
    I prefer the Allman style, although looking at Wikipedia the Whitesmiths style is pretty interesting too.

    • Now this is interesting, comparing The One True Brace Style with “Basic” it turns out that basic is two characters less.
      (Comment system ignores the pre tag so indenting is messed up here, assume two spaces)

      if (foo) {
      bar();
      } else {
      baz();
      }

      if (foo)
      bar();
      else
      baz();
      endif

Leave a Reply

Comments are moderated and may not be posted immediately. Required fields are marked *

*
*

Thanks for joining the discussion. Be nice, don't post angry, and enjoy yourself. This is supposed to be fun.

You can enclose spoilers in <strike> tags like so:
<strike>Darth Vader is Luke's father!</strike>

You can make things italics like this:
Can you imagine having Darth Vader as your <i>father</i>?

You can make things bold like this:
I'm <b>very</b> glad Darth Vader isn't my father.

You can make links like this:
I'm reading about <a href="http://en.wikipedia.org/wiki/Darth_Vader">Darth Vader</a> on Wikipedia!

You can quote someone like this:
Darth Vader said <blockquote>Luke, I am your father.</blockquote>