there is a small pokédex here

Hey, I am Eevee and this is veekun and it's a Pokédex. You probably want to type into that box in the top right, or maybe just start browsing.

Other stuff of interest:


Well. That was the idea, anyway. SPOILERS: It didn’t work.

Vladimir Costescu has upped the ante and bought a day of my time this month, requesting:

It would be cool to read about you tinkering with a Raspberry Pi or similar cheap device and trying to get it to do cool stuff (where “cool stuff” is left up to your discretion).

Well it just so happens that I already have a Raspberry Pi. I got it at PyCon US, I think three years ago, when they gave every single attendee a Pi for free. I thought it was super duper cool and I spent a whole afternoon tinkering in their Raspberry Pi lab and then I came home and put it in a drawer forever because I had no idea what to use it for.

At first I thought it would be cool to rig something that would download a random wad from idgames (like vectorpoem‘s WADINFO.TXT) and just launch it and let you play it. A teeny tiny portable Doom box.

Then I realized you’d still need a mouse and keyboard (well, at least a keyboard) to actually play, which is a little bit more cumbersome and detracts from the portability a bit.

But I remembered hearing about a Linux-only project that had managed to interface with the Wii U GamePad. Run ZDoom on a light wireless controller with gyros and everything? That sounds awesome.

So off I went.


I plugged in my Pi, and soon discovered it had been so long that I’d forgotten it doesn’t actually have any on-board storage. I couldn’t find my original SD card, though I did find an old one I’d used in a 3DS. It’s possible I looked at the Pi card, saw it was a Linux distro, assumed I’d used to install Linux on a toaster, and used it as my new 3DS card instead. Oops.

I grabbed a Pi boot image, but it was over 4GB, and the old 3DS card was only 2GB. So I bought a new card off Amazon and waited two days.

Then I found out my trusty ancient multi card reader USB dongle doesn’t actually support SDHC, so I had to dust off my System76 laptop, scp -C the image over, and write it with the built-in card reader.

Success! The Pi turned on.

Failure! The GamePad communicates via 802.11n, and I don’t have a recent WiFi dongle on hand. Back to Amazon, and another two days. This time I bought a case as well, so I wouldn’t just have a plain bare circuitboard sitting around in a house full of cats.

WiFi dongle arrived. Case also arrived. There were some minor issues.

Apparently the Raspberry Pi 2 Model B is different from the Raspberry Pi Model B Revision 2, which is what I have. What a great naming scheme.

I still wanted a case, but returning this one wasn’t worth it, so I just bought another. Total cost:

  • 16GB SD card: $7.49
  • Wrong Raspberry Pi case: $8.90
  • Right Raspberry Pi case: $9.99
  • WiFi dongle: $23.69
  • Total: $51.89

Given that I’m only being paid $60 to do this in the first place, I’m sure glad I already had the Pi.

You can see we’re already off to a great start. Onwards!

Connecting to the GamePad

I followed instructions from someone’s blog (always a reliable source), which for the most part are what’s in the libdrc documentation.

Also, the project is called libdrc. I don’t know why. You’d think libwiiupad would be a better name. I can’t believe there aren’t already fifty different projects named libdrc.

Step 1: Modified WiFi stack

If you’re not familiar with hacking on Nintendo products, they seem to have a habit of using lots of well-known standards, then slightly fucking them up to spite you. It was thus no surprise to learn that I would need to compile a modified mac80211 module, the Linux wireless stack.

Well, that’s easy enough according to Some Blog. Just clone a repo and build it:

make -C /usr/src/linux-headers-VERSION M=/home/USERNAME/drc/drc-mac80211/

And here, we hit our first roadblock. You see, Rasbian (the modified Debian used as the standard Raspberry Pi distro) doesn’t ship with kernel headers. And they’re not in apt. This seems really fucking weird for a tiny hacker computer intended for hacking on.

This is a problem that strangely few people seem to encounter, and I had to cobble together instructions sprinkled in various places and spanning several years: the Raspberry Pi forums from 2012; StackOverflow last month; and someone else’s blog, fairly recently but inexplicably insisting that you build the entire kernel. On a Raspberry Pi. Yeah no.

First you need to get the git commit hash of the firmware the Pi is running. These are listed in the bootloader changelog.

firmware_hash=$(zcat /usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz | grep -Pom 1 '(?<=firmware as of )[0-9a-f]{6,}')

That’s probably not totally reliable since the changelog might be typed by hand, but whatever.

You can then use that to get the commit hash for the Linux kernel you’re running:

linux_hash=$(curl -L$firmware_hash/extra/git_hash)

Now, uh, I don’t really want to git clone the entire Linux kernel. You’d think git clone --depth=1 might help here, and you’d be wrong, because you can only git clone starting from a branch or tag — not an arbitrary commit. Alas.

Turns out, though, that you can just ask GitHub to give us a tarball.

wget -O rpi-linux.tar.gz$linux_hash

Alas! The Pi disk image only comes with half a gig of free space, and the Linux kernel source won’t fit in that. My card is 16GB, though, and expanding a live filesystem via command line is way less harrowing than ye olden days of fdisk.

sudo parted /dev/mmcblk0 resizepart 2 100%
sudo resize2fs /dev/mmcblk0p2

df -h confirms I now have 11GB free. Cool beans. tar -zxf rpi-linux.tar.gz, wait a minute or two, and I have a raspberrypi-linux-59e76bb.

At this point I’ve long since forgotten what the hell I was even doing. Right, right, wireless module.

So now I have to “prepare the kernel for module builds”. Disclaimer: I’ve built a few Linux kernels in my time, but it is not a simple topic and I have no idea what I’m doing. These shell commands I found on the Internet seem totally reasonable though.

# this makes /proc/config.gz exist
sudo modprobe configs
zcat /proc/config.gz > .config
# i...  why is this "old", i don't know, whatever
make oldconfig
# this says "prepare" which makes it sound like it'll be fast, but it makes
# a lot of .o files which i'm pretty sure involves compiling!!
# but it only takes a few minutes.
make modules_prepare

Lastly I need Module.symvers, which, clearly, is about symbolic versions, of modules, I guess. I think it lists module dependencies because I forgot to get it and the build complained it didn’t know anything about module dependencies. You can get it from the firmware repo:


Finally, we can—

Step 1: Modified WiFi stack

At this point I briefly wonder why we need a modified wireless stack, so I check out the repo. It has only a single patch, and a libdrc changelog containing only:

* Exports the Wi-Fi Time Synchronization Function to userland.

Okay, sure, that sounds important.

The provided repo is actually super ancient (very early 2014) and no longer builds against the current kernel. It’s a good thing that there’s only a single patch, and it only adds a new function — it was super duper easy to just reapply the patch against my shiny new kernel sources.

wget -O mac80211.patch
cd net/mac80211
patch -p1 < ../../mac80211.patch
cd -

Aaaand finally build it.

make M=net/mac80211

Success! Now I just have to unload the stock module and the various drivers using it, in the right order, then load the new module and drivers.

sudo rmmod rt2800usb rt2x00usb rt2800lib rt2x00lib mac80211
sudo insmod net/mac80211/mac80211.ko
sudo modprobe rt2800usb

STEP 1 COMPLETE. It is now 8:30pm. I started this around noon. All I’m even doing is following someone else’s blog post. This is ridiculous.

Step 2: Connect to the console

The idea is to tell the console that you want to sync a new pad (by pressing the sync button twice), and it’ll show you a code of four symbols on the screen which you then enter on the pad. These symbols are actually used to construct a WPS pin for the console’s access point. Also, the console always uses the same four symbols. So we want to get the pin, use that to connect to the console, get the WPS key out of the handshake, and then use that key to pretend we’re the console and have the pad connect to us.

Apparently there’s a way to do this by pretending your Linux machine is a Wii U seeking for a GamePad to pair with, which sounds easier than this nonsense, but it’s undocumented. Or, rather, documented as “TODO: document this”.

I killed off wpa_supplicant, which was already running on the Pi and likely to try interfering with my subsequent shenanigans. No NetworkManager or anything fancier to worry about.

I’m basically just following the libdrc docs now. Grabbed the hostap fork. Cded to wpa_supplicant. Copied defconfig to .config. Set CONFIG_WPS=y, CONFIG_TENDONIN=y. (I only realized later what TENDONIN is, after seeing it written as “tendoNin”. It’s a light jab at the modification Nintendo made to the WPS handshake: it rotates part of the response three bytes to the left.)

I needed libssl-dev, which Some Blog failed to mention. Tut, tut. I’d also like to take this moment to stress how very silly and irritating it is that Debian packages header files separately.

You can read the directions if you like. The goal here was to get the Wii U to show up in a scan:

18:2a:7b:89:4e:69       5180    -42     [ESS]   WiiU182a7b894e6182a7b894e69_STA1

Success. My Wii U said its code was ♥ ♦ ♦ ♥, which meant the pin was 12215678, which I supplied with wps_pin, which completely didn’t work at all and only gave me FAIL.

Some brief head-scratching led me to realize that “FAIL” means “you need a BSSID and you gave me an ESSID”. Can you believe anyone would get those things confused or fail to understand that error message? Ha, ha.

Okay so the BSSID is the thing that looks like a MAC address, but isn’t, because whoever designed this hates all that is good and pure in the world.

wps_pin succeeded this time, and some things happened, and now I had the PSK, which I assume stands for “pre-shared key” because it looks a lot like a key:


Please don’t hack my Wii U. Or, please do hack it and then tell me how on Earth you managed it.

Step 3: Run a hotspot

Now we can pretend to be the console. I had to build a modified hostapd from the same repo, for the same reason.

I tried to run it and got this error:

Line 53: unknown configuration item 'ieee80211n'

Apparently you have to set CONFIG_IEEE80211N=y in the build config, which makes a lot of sense given that the pad uses 802.11n to communicate. I have no idea why nobody mentioned this.

I hit some more minor stumbling blocks; that WiiU182a7b894e6182a7b894e69_STA1 mess above turns out not to be the SSID, but rather the ESSID. Or… maybe it’s the other way around. I don’t know. Or care! But that one is wrong, and the one that’s actually right is in get_psk.conf and looks like WiiU182a7b894e69.

I also had to compile a teeny-tiny DHCP server called netboot and give my wireless interface a static IP, and finally

sudo ./netboot 18:2a:7b:b0:5d:bd
sudo ./hostapd -dd ../conf/wiiu_ap_normal.conf

With both of those running, I could turn on the pad and see it successfully handshake with the Pi. Woohoo!

Step 4: Build a patched x264

Yes, naturally, Nintendo is using their own variant of this as well. Please stop telling me the Pi has h.264 hardware decoding.

This was pretty painless, if a bit slow. Then I built libdrc itself, and all was well, and I ran a demo and just got “Illegal instruction”.

Hmm. Let’s back up.

x264 has a bunch of ARM-specific assembly that relies on some floating-point features the Pi doesn’t have. The advice is to just configure it with --disable-asm.

So I did that. And set it about compiling again.

It took an awful long time.

We’ll come back to this.

Building ZDoom

This was pretty easy, actually. It took three or four hours, and I did have to fix one minor bug that I hope I’ll remember to upstream, but it built. And worked! Almost.

I did have to manually set vid_forcesurface to true in zdoom.ini, which… does… something… that makes a segfault not happen. But then it worked!

Thanks, by the way, to the brilliant individual who recently did all the actual work to make ZDoom work on a Pi.

I had a brief read of the libdrc docs, and it sounded like all I had to do to draw to the screen was pass a big ol’ array of pixel data to a function. That sounded like something that should be pretty easy with ZDoom (which renders entirely in software), and hopefully the compile cycle would be pretty short with master already built.

Before we worry about that, let’s see how x264 is coming along.

It's still not done

This is really weird. I left it overnight and it still didn’t finish. It gets to encoder/analyse.c, takes a moment, spits out a bunch of warnings, and then busy-loops forever. strace revealed weird brk or mmap2/munmap loops. lsof didn’t show any activity. It wasn’t swapping, and it was still very gradually using more memory, but it didn’t seem to be doing anything.

Debugging GCC is not in my skillset, and Twitter wasn’t sure what the problem was either. It took a good few hours to bumble upon something that actually fixed it: patching configure.

-    echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu)' || CFLAGS="$CFLAGS -mcpu=cortex-a8 -mfpu=neon"
+    echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu)' || CFLAGS="$CFLAGS -mcpu=native"

    if  cc_check '' '' '__asm__("rev ip, ip");' ; then      define HAVE_ARMV6
        cc_check '' '' '__asm__("movt r0, #0");'         && define HAVE_ARMV6T2
-        cc_check '' '' '__asm__("vadd.i16 q0, q0, q0");' && define HAVE_NEON

I ran it again, without --disable-asm, and tried make. It finished in five or ten minutes. Christ.

Awesome let's try that again

At some point I’d rebooted to free more RAM and modestly overclock the Pi, to see if that would pacify x264 (it did not). So I had to juggle modules again, kill wpa_supplicant again, set my IP again.

I ran netboot and hostapd again, aaand it refused to start.

channel [0] (36) is disabled for use in AP mode, flags: 0x57 NO-IBSS PASSIVE-SCAN

Come on. Nothing changed!

Long story short I was in the “00” regulatory domain, and I had to install iw and set myself as in the US domain. I don’t know why this only happened after a reboot. Maybe because the stick was plugged in when it booted? I don’t know. Computers.

Okay so let's try that again, really

Right! Here we go! Let’s pair the pad and run demos/3dtest/3dtest from the libdrc repo!

Missing OpenGL extension: ARB_pixel_buffer_object

Ha, ha! No problem; I don’t actually need OpenGL at all. Let’s try the simpleaudio demo, which shouldn’t need GL either.

Segmentation fault

Uh oh.

And this is it, dear reader. This is where my story ends. I wrote a trivial app of my own against libdrc that did nothing but stream a solid color to the pad, and that too segfaulted. I ran it under gdb, and gdb hit an assertion error trying to get the call stack. I know it died somewhere in my distro-provided libswscale, but I don’t know where or why or who called it. I’ve already sunk two days into this, and I am not prepared to debug gdb.

I give up.

Final results

Here’s all I have to show for my effort:

ZDoom, running on a Raspberry Pi, at 14 fps. I suppose it’s some consolation that it wouldn’t have been playable anyway?

It’s kind of a shame, since this is the part that took the least effort by far, and someone else really did all the work. But then, the hard parts were all just following straightforward instructions. I don’t know what I’ve learned here. No one loves ARM, maybe.

It was a fun way to spend a weekend (it’s the weekend, right?)! But I still don’t know what to do with my Raspberry Pi, and I suggest you just run ZDoom on a full-size computer. Or a toaster.

The latest Pokémon movie, Hoopa and the Clash of Ages, will make its US debut on Cartoon Network this December.
Hoopa will be available in the Nordic countries via serial code and Nintendo Zone throughout December and January.
Pokémon Picross will be released in North America and Europe on Dec. 3, 2015, and in Australia on Dec. 4, 2015.
All mentions of the upcoming Zoroark serial code event at German GameStops have been removed from the official website.
2015-11-08 17:01:00

Undertale is a very good game.

So you should play it, because I am about to spoil the hell out of it.

No, really. Don’t read this if you haven’t played the game. It won’t even make sense. I’m reflecting on it, so I’m not gonna bother explaining stuff you would know if you’d seen the ending(s).

This is a heavily story-based game. Dissecting the plot without playing it will not entertain you and may ruin your enjoyment of the game later. I’m not kidding.

Okay then.

A game where you don't have to kill anyone

Here is an exhaustive list of things I knew about Undertale going in:

  1. You don’t have to kill anything.
  2. There’s a nice cow mom lady in the first area.

Half of that isn’t even right — Toriel is a nice goat mom lady.

The very first sentence on Undertale’s Steam page is “UNDERTALE! The RPG game where you don’t have to destroy anyone.” Not having to kill to progress is, seemingly, the primary selling point of the entire game.

So I didn’t kill anyone. I didn’t even fight anyone. I never saw the combat UI at all until I got to Asgore. It just wasn’t relevant. The game was supposed to be playable without fighting, so I decided upfront that I wouldn’t fight. I went in willing to die rather than fight. That takes a certain amount of, ah, determination.

Since then, I’ve watched a handful of people kill Toriel and later be annoyed that the game didn’t tell them not to do it. In other words: the game doesn’t clearly tell you not to kill a person who has been preposterously nice to you the entire time you’ve been playing. So when you do kill that person, it’s the game’s fault.

I suppose right there, in the very first hour, is the biggest point Undertale is trying to make. What kind of a medium is video games, when the only way we know how to approach a problem is to destroy everything that’s even mildly inconvenient?

By taking this stand, the game traps itself in an awkward place, and the resulting balance is really interesting to me. The game knows that the biggest trope in its genre is to defeat everything the player encounters. It wants to throw this pillar out the window, to redefine what it even means to be this kind of game. But at the same time, it’s still a game, so it has to rely on some existing game vocabulary in order to be understandable at all.

So we have the Froggit NPC a few screens before the Toriel encounter, who tells you that someday you may need to spare someone whose name isn’t yellow. Of course we know that “someday”, in video game parlance, means “the next boss fight”. And when you do spare Toriel, the game tries to stall a bit, but she still has to give you different dialog each time, just to let you know that something’s happening. That the game is progressing. Even if it’s only the difference between “…” and “… …”.

On the other hand, the game pretty well obfuscates its key pacifism feature — “spare” really means standing your ground while refusing to fight, but it sounds like nonsense in many cases where sparing is useful. If you don’t take the Froggit’s advice to heart, it may not even occur to you to try “sparing” someone who’s still keen on fighting. I can’t tell if this is an oversight (!), the lack of a better word, or intentional obtuseness/irony.

Anyway, I approached the game with determination, and I probably would’ve kept sparing Toriel even if she’d said the same nothing ten times in a row. So those nods feel forced to me, as though the game wishes it didn’t have to provide them at all, but knows it would be losing something important if they weren’t there. The funny thing is that the game is right — a nontrivial number of players still overlook that little extra ellipsis, conclude that sparing Toriel doesn’t accomplish anything, and instantly resort to the tried-and-true tactic of beating her to death.

There are two curious phenomena when this happens: often either the player’s friends will lambast them for not playing the “right way”, or the player will discover via some other means that this locks them out of the pacifist ending and become aggravated at the game for doing this to them.

Here Undertale encounters a second internal conflict. If Undertale is anything, it’s a game about consequences. Surely you don’t deserve the “best” ending merely for playing the game — I might even argue that there is no “best” ending, only the one you earn for yourself. And yet Undertale is still a game, and a story game at that, and the entire point of playing it is to experience a story with a satisfying conclusion. So the game wants you to earn the pacifist ending on your own, but at the same time it has to nudge you in that direction somehow, or it’s fundamentally failed at being a game.

That said, lecturing people on how to do an optimal playthrough their very first time completely defeats the point of the goddamn game, so if you’re doing that you should knock it right off.

Having a bad time

After I beat the game and got the pacifist ending, I stopped avoiding Undertale spoilers, and the existence of the “no mercy” (or “genocide”) ending came to my attention. I waffled a bit, but eventually gave it a shot, morbidly curious how this story-heavy game would deal with a dead main cast.

The game very cleverly predicts what kind of person would be willing to do this: me. Someone who’s already completed the game, with the power to restart the story from the beginning over and over, who’s curious how everyone else will react if I do things differently. It’s not something that’s very easy to discover in passing, and in fact I was out of the ruins before I was told that I had to kill every monster in each area. The game knows this, knows that it has a hidden story virtually no one will stumble upon accidentally. It lays on the moralizing pretty thick, even hitting audiences of streamers and LPers, who can’t bear to do terrible things with their own hands but are content to watch someone else do it.

That resonated with me. I could’ve watched a recorded run — several of my friends had even streamed their own attempts. But I felt that if something terrible were going to happen one way or another, the least I could do was own it and do it myself. It reminded me of putting down my cat a couple years ago; I’d felt then that it was important for me to push the plunger, to actually be the one to kill my cat. That something crucial would’ve been lost if I’d let someone else do it. I don’t know what that something is, but I still feel the same way.

Undertale: 7/10, reminds me of my dead cat.

So the most interesting thing about the bulk of the run is that the player character becomes an entirely different person. 8-bit RPGs don’t have a very big player vocabulary: the only things I can do are walk around, fight things, and interact with NPCs and the occasional object. There’s really not much space for expressing any real personality at all. But Undertale does it for me. Sans sees me as a monstrosity right off the bat; I one-shot bosses with increasingly furious attacks; eventually my inner monologue when examining objects is different. Even the familiar “determination”, which in the pacifist run was a powerful force I wielded for good, becomes the motivation for the horrible storyline I’m unfurling now.

Eventually I encounter Sans, the gatekeeper from the pacifist run, who’s now intent on destroying me. And destroy me he does. Over, and over. Eighty times, before I finally beat him. It took me at least eight hours spread over the course of several days. It was excruciating.

And yet I persevered, carried on by my determination. I adore Sans, but I still wanted to defeat him. He says at one point that he knows I’m the person who has to do something just because I “can”, which means I “have to”.

That’s true, of course, but it exposes a paradox in the game’s message. What am I actually being told here? If the game truly didn’t want me to do any of this, it wouldn’t reward me by having this entire separate storyline. It wouldn’t even have the Sans fight, because we play games for the challenge, and Sans is certainly a challenge. The game dangles more insight on a string, then chastises me when I reach for it.

I killed Sans, and Lexy destroyed the universe.


I say “Lexy” because that’s the name I gave to the fallen human, to the character canonically known as Chara. Until the end of the no mercy run — the very last event in the story, as experienced by the player — everything suggested that I’m supposed to be the original fallen human.

That’s why Frisk has the power to save and restore: my determination to keep playing. That’s why the game ragged on me, personally, for playing through no mercy in the first place.

But the final cutscene has Lexy — Chara — me — break the fourth wall to taunt me, the human being in the real world. And then they kill me. Except they don’t really, because the game knows it’s a game, and even Chara knows on some level it’s a game, since they’re not too surprised to see me come back.

This is where the game’s message, if it has one, starts to come a little unraveled.

The ultimate ending to no mercy is — just like Sans’s special attack — literally nothing. Perhaps that’s the game’s retort to me: it’s not rewarding me after all. But you’ll never find this out without playing through the story, without persevering, without the very determination the game otherwise celebrates. In fact, because this is a game with set paths, there’s no way whatsoever to learn more about the world other than to try things you haven’t tried before within your limited vocabulary.

The game tries to apply real-world moralizing throughout the no mercy story. Killing is bad. Killing everyone is really bad. Okay, I can buy that. But this is a story that assumes I’ve already beaten the game, and probably even seen the pacifist ending. At this point, it’s well-established that I have the power within the universe to turn back my own death or even start everything over from scratch.

If I kill an innocent person, and then turn back time so it never happened, have I really done anything wrong?

That’s an extremely heavy question, and Undertale refuses to ask it. Instead it stresses that the original murder makes you a fundamentally bad person. Or maybe, as Sans hints when he first sees you, it means that you were a fundamentally bad person all along. All that murder is certainly enough to make Chara super duper evil.

The no mercy ending is quietly unsatisfying for me, not because the consequences are bad, but because the way it plays out seems completely at odds with everything I thought the pacifist story was trying to say. Undertale is a game about redemption: there’s the obvious example of Asriel, but even the individual random encounters are with monsters who are genuinely trying to kill you. In most cases, killing them first would be reasonable self-defense, but the game encourages — rather, demands — that you take the time to understand why they’re upset and how to pacify them. The game’s ethics insist that winning a fight someone else started is evil, and the only good course of action is to work to SAVE everyone. Yet if you play through no mercy, the game breaks its own rules and actively sabotages your own redemption, by changing the very last scenes of the pacifist ending.

I find the dissonance really jarring. Even on a practical level, why does Chara’s ability to reset exceed mine? The game also has themes of fragments persisting between timelines, but finishing the pacifist run gives you the “true reset” which genuinely erases everything. Except for this. Why does my impulse to destroy make this mere video game character more powerful than I?

Or maybe the ultimate point is that it doesn’t! After all, Undertale is just a game on my computer, and I can go delete the file that remembers I “sold my soul” (which I did). Is it deliberately so easy? Is this the final layer of meta commentary on this story, that I still have the power to subvert the game itself and erase my own save file? That my own redemption is in my own hands? Doesn’t seem like too much of a stretch for a game where the final bosses toy with the very concept of saving.

Lexy, huh? That's a nice name. My name is

Undertale is also a game about identity, about discovering who people are — both metaphorically and otherwise.

Flowey is revealed to be Asriel. Toriel is revealed to be the former queen. Sans is revealed to be something of a guardian. Papyrus struggles with his need to be popular and head the Royal Guard. Undyne initially appears to be a hulking beast, but turns out to be a somewhat different kind of intense warrior. Alphys wrestles with her nerdy interests, her past mistakes and lies, and her crushes on goddamn everyone. Mettaton is a multi-layered actor and actually a ghost. Asgore is… many things.

After all this character development, the game leaves us with three lingering questions. Who is Frisk? Who is Chara? And who am I?

The answers are surprisingly complicated, and I’m kind of stalling here because I still don’t know what they are but am hoping to figure it out by the end of this section.

The game tricks you right at the beginning by asking you to name “the fallen human”. You don’t learn until much later that there have been eight fallen humans, long after you’ve forgotten the phrasing of a stock RPG dialog. You name the first fallen human, Chara; and you play as the last fallen human, Frisk. Throughout the game only Asriel and Chara ever refer to you by name, but the UI shows your name often enough that it’s easy not to notice this.

In a story, and especially in an RPG, names are everything. Names are identity. Undertale won’t even let you name yourself/Chara after any of the major characters, and clearly the conversations with Asriel (as Flowey) are much more striking if you use your own name.

So it’s no surprise that I came away from the pacifist ending believing that I was Chara, and Chara was intertwined with Frisk somehow, and thus Chara was a good person for having seen that ending through. But that’s not quite right, because Asriel outright says to you:

You’re not actually Chara, are you? Chara’s been gone for a long time.

In the pacifist story, it’s very clear that Frisk did all these good things. On the other hand, in the no mercy story, it’s very clear that Chara did all these bad things. In the various neutral stories, it’s a little more ambiguous, but strongly implied that you played as Chara — since Frisk’s name is never mentioned.

RED - Try as you might, you continue to be yourself.

Consider also that all the human souls you see are different colors. You play with a red soul throughout the game, and Chara’s original coffin is colored red. Alphys’s seventh journal outright says “a human cannot absorb a human SOUL”, so it certainly seems that we’re playing as Chara the entire time.

Let’s talk about Chara.

The universal interpretation seems to be that Chara is a just plain evil person who wanted to start a war and watch the world burn. My speculation above is sure not helping that. Some of the evidence is ambiguous (the tapes never gave me a creepy vibe), but Asriel’s commentary is fairly conclusive, and the no mercy run certainly is. Right?

Chara hated humanity, according to Asriel. Okay.

But you spend the entire game surrounded by characters who hate humanity. Sans says straight out that he would’ve killed you if not for the promise to Toriel. Papyrus wants to capture you and deliver you to Undyne, who intends to rip out your soul. The majority of the monsters you meet throughout the game are trying to kill you for various reasons.

Yet the game’s very clear message is that the right thing to do is look past all this and try to work things out, even with people who are adamant about fighting. You only even get a hint about the pacifist ending by sparing the life of the antagonist who had just tried to reshape the universe in his image.

Why is everyone except Chara deserving of mercy? The monsters have good reasons to want to kill you, but why not give Chara the same benefit of the doubt?

We don’t know too much about Chara’s motivations. They were just a kid, and we only have a few glimpses into what happened all those years ago. We know Chara put themselves into a perilous situation where they would be attacked, seemingly so they could attack right back. There was no need to carry the human body through the barrier; if they just wanted to go smack some humans around, they could’ve just done so. But no, they wanted to be attacked first.

Does that ring a bell?

It sounds an awful lot like what every RPG player does.

Because, of course, as we knew all along, Chara is the player. And Undertale is, ultimately, commentary on the design of video games and the people who play them.

Let me ask you a question. Frisk.. Why did you come here? Everyone knows the legend, right…? “Travellers who climb Mt. Ebott are said to disappear.”

Frisk. Why would you ever climb a mountain like that? Was it foolishness? Was it fate? Or was it.. Because you…?

Well. Only you know the answer, don’t you…?

I believe Frisk is dead when the game begins.

They landed on Chara’s grave, where buttercups had grown. Chara’s soul, with its extraordinary determination (thanks to being the player character), had lingered there all this time, waiting for an empty vessel.

You really are naming the most recent fallen human. The entire game, no matter which route you choose, you play as Chara, as a metaphor for player characters in general and for the way you “possess” one when you play any game.

Remember, Undertale is a game about redemption. Chara’s redemption. Your redemption, from the usual violent approach to playing games. You are the antagonistic human, who contrives ways to be attacked so you can attack back.

i always thought the anomaly was doing this cause they were unhappy.
and when they got what they wanted, they would stop all this.
and maybe all they needed was.. i dunno.
some good food, some bad laughs, some nice friends.

Chara’s ultimate redemption is to eat some good food, have some bad laughs, make some nice friends, and build a new life as Frisk. As someone different enough that even Asriel doesn’t recognize them any more. As the kind of friend Asriel always wanted.

I don’t like that Asriel’s fate is left at best unclear and at worst depressing as all hell.

Maybe that’s the point.

Your power awakened me from death. My “human soul.” My “determination.” They were not mine, but YOURS.

Now. Now, we have reached the absolute. There is nothing left for us here. Let us erase this pointless world, and move on to the next.

Chara’s fate is also unclear — as a stand-in for you, the protagonist in other future games. Will you go back to your old ways and keep putting yourself in situations where you “have” to fight back? Will other games provide those situations for you?

If Alphys can build a new body for Mettaton, I have hopes that she can do the same for Asriel. And if one guy with a copy of Game Maker can completely invert what it means to be an RPG, I have hopes that others can do that too.


It’s endlessly fascinating to me that sweet goatmom Toriel resents Asgore for not killing humans fast enough. I’ve never seen anyone else remark upon it, but that’s basically her accusation: he could’ve just crossed the barrier and killed some humans, but instead he waits for humans to trickle in naturally.

It’s also interesting that they already had seven human souls before Frisk fell: the six beneath the castle, plus Chara’s.

Undertale is a game about metaphors, I guess, in the sense that all games are games about metaphors. You pick commands from a menu, and it’s kind of a metaphor for actually doing something.

Except in Undertale, the metaphors willfully break down. What is the box you’re fighting in? Why does it have your soul but not anyone else’s? At first it seems like a metaphor as well, with various bullet hell attacks skinned to fit the monster you’re fighting… but then Migosp dances in the box, Aaron flexes in the box, Napstablook cries directly into it, Asgore and So Sorry and various others attack from outside it…

Asgore attacks and destroys part of the UI. Fighting Flowey requires finding scraps of the UI floating around. Sans starts attacking you while you’re browsing menus. Ultimately you push the box around when it’s not your turn, so you can reach the UI.

I totally fucking dig this.

The best part of no mercy was getting to see everyone else be heroic. Games are frequently about how the player character rises up against adversity and saves the day. This was a rare inversion that I really enjoyed: I was the adversity, and I got to see how everyone else rose up against me.

Sans’s character development was the other best part. He seems like he can’t help but view the world cynically, and comedy is his way of dealing with it. I feel for him a lot.

In the end it’s actually Papyrus who’s positive about everything, no matter what. How ironic.

I was disappointed at first that Sans didn’t remark on my killing Papyrus. Serious and focused seems fitting in retrospect. When he finally did mention Papyrus, it was a teeny bit heart-wrenching.

The whole cast is curious and colorful in a way you don’t often see in games. Everyone has a unique relationship to everyone else, rather than just to the player — you feel like you’ve stumbled into someone else’s story, rather than like you’re having one told about you. That’s a really important thing to capture if you want a world that doesn’t feel like a cardboard backdrop, and Undertale does it splendidly.

I went through several rounds of proposed explanations for the game’s contradictory endings. One that I tried to make work for a while was that you play as Frisk for the pacifist story (having absorbed Chara’s determination, perhaps), but you play as Chara for everything else. That would mean that Frisk’s fate at the very beginning of the game depends, retroactively, on how you finish the game.

I totally fucking dig that, too, but alas it’s more convoluted than what I settled on, so probably less likely.

I’m still not quite happy with what I came up with, because the post-credits pacifist scenes just don’t make any sense. If Chara is still super evil and in control of Frisk, why bother doing all the good stuff in the first place? They already know that they can one-shot half of the main cast. Or is the idea that they’re free to do what they want after the end of the game, because they’re no longer under my control?

I don’t know. It just feels like the author had an idea they really wanted to include, so they threw it in regardless. Like it’s “game stuff” rather than real story. Seems such a shame when the rest of the story is put together so well.

Of course it’s possible that the rest of the story is good by coincidence, I’m full of it, and the disparate endings are also just thrown in. It is a game where the power of friendship saves the day, so maybe it’s cheesier than I give it credit for.

The So Sorry boss fight is adorable, and I’m really disappointed that a lot of people feel bitter about it because the guy who proposed the character has a fat fetish or something. There’re even wholly fabricated stories floating around about how the boss battle is designed this or that way because Undertale’s author hated the character so much. People sure do like to make up backstory that happens to support their own preconceived ideas, then spread it as though it were iron-clad truth.

Be careful in the outside world, OK?
Despite what everyone thinks, it’s not as nice as it is here.
There are a lot of Floweys out there.
And not everything can be resolved by just being nice.
Don’t kill, and don’t be killed, alright?
That’s the best you can strive for.

A lot of Floweys, indeed.

But even Flowey was redeemed.

For all their determination, it sure is funny that humans only live 80-odd years, whereas at least Asgore has apparently been alive for centuries.

Undertale is a game about

Undertale is a game about a lot of things.

On its surface, Undertale seems to be a game about the consequences of designing and playing games that expect you to kill everything. It seems to come down pretty hard on the side of saying this is bad. Yet the entire game guides you towards confronting Asgore, who you have to attack. You’re only saved from killing him by someone else’s interference. Otherwise, he would’ve killed you, and Flowey would’ve been right. For all the game’s heavy moralizing, it has no real comment on this impossible situation it puts you in and then rescues you from.

Undertale is a game about the fundamental limits of a single game, which can only contain so many distinct stories, which is forced to balance a player’s desire to see completion with a player’s desire to replay without getting bored. It struggles to say anything clear about that balance, as it condemns you for seeking out the extra story it offers.

Undertale is a game that isn’t just a game, but a story that tells itself with a game and all its components as the vehicle. And that’s really what story-based games ought to strive to be: not movies where you have to press a button occasionally, but unique tales that can’t be told in any other medium because they’re woven so seamlessly with the very notion of being a game.

It wasn’t perfectly successful at that, granted. There are plenty of places where the game merely dumps a pile of text on you, and if you’re not very good at bullet hell then you probably won’t be consoled by how Toriel’s attacks eventually refuse to hit you. But it’s a huge step in a very interesting direction.

If nothing else, Undertale is a game about expanding our idea of a video game beyond our usual handful of stock genre templates. It deserves plenty of praise for that, and I hope it inspires people to tell their own quirky tales.

Twitter recently lost its only black engineer in a management role.

The top-voted comment about this story on Hacker News begins thusly (emphasis mine):

I’ve been working for over 20 years in tech at 10+ different companies around the Valley, and I can count on 1 hand the number of direct coworkers that were black, and on 2 hands the number of coworkers that I indirectly worked with that were black.

I don’t believe this is due to any sort of racism, but rather due to the education system in general. Trying to solve the diversity issue at the hiring end, when the number of qualified candidates is so small, is not the right way to solve the problem. The only way you will hit higher-than-normal diversity numbers is to reduce hiring standards, which is wrong.

This is an interesting thing to say (and upvote) when the article itself said the exact opposite:

In the course of the meeting, [the VP of Engineering] suggests that we begin tracking the ethnicity of potential candidates in the pipeline to understand better where candidates are falling out. I agreed that this is an important metric to track and conveyed that the current data we had indicated that the problem is not just the pipeline. While ethnic and gender data early in the pipeline is incomplete, we do know that in 2013, 4.5% of CS graduates from the top 25 schools were African-American, and 6.5% were Hispanic/Latino.

A chart in the article indicates that in 2014, Twitter’s tech employee population was 1% black and 3% Hispanic.

Eric S. Raymond (who, according to himself, is an important tech figure) blogged a few days ago about a terrifying feminist conspiracy. The Ada Initiative was allegedly plotting to get prominent men in tech alone with women, so the women could later make false claims about being assaulted, thus generating outrage, which would… serve… some kind of purpose. This story comes from the most reliable of sources: an anonymized person on IRC. Oh, and they’ve tried this multiple times with Linus Torvalds.

This is pretty clearly nonsense. The usual suspects have eaten it up, of course, but that’s to be expected. Far more embarrassing is to see someone in tech of some inexplicable influence buy it and propagate it as fact.

Watch how easy this is to rebut: show me someone accusing Linus of sexual assault.


There’s a blind spot amongst tech people. I think I understand it, because I remember a time when I had it as well.

It relies on a bit of speculation about how tech people think. That’s always a risky affair, since I can’t really claim to know what’s going on inside someone else’s head, let alone inside a whole group’s. But bear with me while I speculate a bit.

Tech people, almost by definition, believe in rules and rigor and measurements. Computers are very stupid machines, after all: they do precisely what they’re told to do, and no more. It’s hard to be a programmer without putting yourself into that kind of highly literal mindset.

If there’s a bug in your code, you can binary search your function to find where it happens. If your code is slow, you can profile it. We’re getting increasingly invasive about collecting any data we can think to collect, just so we can make lots of cool graphs that someday might even be useful.

Programming is about making everything obvious and quantifiable.

There are plenty of tech memes (in the straightforward “unit of culture” sense) that demonstrate this. UI designed by programmers is usually clumsy nonsense laid out in a grid — because UI is more an artform, something you can’t just measure or write unit tests for. “Real” programming is done in C, not this high-level dynamically-typed nonsense — because a higher-level VM makes it harder to see and measure what the hardware is doing. We’re pretty sure you can’t measure programmer productivity in net lines of code written — but the impulse to do so persists, because we want to measure it somehow.

If this is how you see the world, it’s easy to think that skill, too, should be quantifiable. We want to believe that whatever mechanism our company uses will rank candidates in order of Objective Programming Talent, and then we’ll hire whoever’s at the top of the list.

This, too, has some cultural evidence: consider how many tech shops still use whiteboarding to evaluate a candidate’s ability to actually write code. Even though whiteboard problems have no relation to 95% of the work you actually do. Even though no one actually writes real code on a whiteboard. Even though tech people seem to have a tendency to get anxious when put on the spot by a complete stranger. Even though it doesn’t at all test architecture or the ability to work on a team or the ability to adapt to changing requirements, which are all far more important than being able to come up with cutesy useless algorithms on the spot.

None of that matters, because it measures something, and we like measurements. Measurements are concrete and reliable.



There’s a blog post I absolutely adore called Page Weight Matters. Here’s the quick version: a YouTube developer experimented with getting the video page down from 1.2MB (!) to under 100KB. They served the new lighter page to a fraction of all traffic. Shockingly, the average page load time increased, even though the page was many times smaller and had many fewer requests!

It turns out that the old page had been so big that some people in South America, Africa, and other places with not-too-great Internet speeds just weren’t using YouTube at all, because that megabyte of crap took twenty minutes to load. The new leaner page loaded in only two minutes (!), so they could actually use the site — at the “cost” of increasing the average load time.

The author of the article thus concludes that page load times are important. Which is a shame, because there’s a much more important lesson in there that deserves to be triply-underlined.

We suck at measuring.

Even if you’re very very careful about assigning people to cohorts evenly and randomly, and you’re sure you’re measuring the right variable, and you only measure one thing at a time, and whatever else… you can’t adjust for problems like users self-selecting themselves out of your website entirely.

Consider: what if those low-bandwidth users hadn’t had as much of an impact? What if they’d bumped up the average load time for the new page, but not so much that it exceeded the average load time of the old page? The developer would’ve said “oh, it’s 10% faster, nice”, and that would be that. No one would have ever realized the true impact of the change. It wasn’t the graph that revealed the insight — it was the fact that the graph seemed to be wrong that led humans to dig deeper and discover the insight.

This is the blind spot. We trust graphs. We trust measurements. We only think to question them when there’s a conflict too large to explain away. If there are graphs and charts showing that white guys dominate tech, well, that just means white guys are the best at tech, right? That’s what such a graph would seem to measure, and graphs can’t be wrong.

Notice there’s nothing in that story about updating the graphs to catch this kind of change in the future. I’m willing to bet it didn’t even occur to anyone. Even when our graphs are wrong, we go right on trusting them next time.

I hope by now you accept my premise: tech people want everything to be sensible and measurable, and will assume this is the case even in the face of moderate evidence otherwise. If not, I hope you’ll suspend your disbelief for a few more minutes.

Now, pretend you’re a white dude in tech. (Or, if appropriate, just be a white dude in tech.) You hear the occasional gripe that the subculture you love fiercely is sexist and racist. That people of color get turned down for no good reason. That women get harassed at tech gatherings, or just proactively avoid them.

But you’ve never seen this happen. You know and trust the people doing the recruiting (maybe you’re one of them!), and you know no one has ever turned someone down just for their race. You’ve been to loads of tech conferences, and you’ve never seen any uncomfortable women. You even know a woman, and she says everything is fine. There are no real studies about this, just a few people complaining.

There’s a contradiction here. This isn’t about difference of opinion; this is about reality, which is concrete. Someone has to be wrong. Or in other words, there are only two possibilities:

  1. Hiring decisions are made by the gut, not by an objective score, so they might be influenced by biases you don’t even realize you have. Race and gender and other axes actually do influence how people are treated, just in little ways that are hard to notice from the outside. But those little things build up over a lifetime and become embedded in culture, which deeply affects how we think and feel and act. Humans aren’t fundamentally rational, you can’t trust your own decisions to be objective, and the universe is catastrophically unfair.

  2. For whatever reason, women and black people just aren’t very good at tech stuff.

Which of these sounds easier to believe?

If you believe that everything important can be quantified, if you believe that humans are fundamentally rational, if you believe you can be objective, if you live in a world where everything is factual and measurable and obeys clear immutable rules, if you trust your graphs…

Then not only is the first choice repulsive, it may be unthinkable. I might as well propose that the planet is made of waffles. It’s so ridiculous that it can’t even come to mind as a serious possibility.

Which only leaves one explanation for the current state of affairs.

From there, a lot of other conclusions make an eerie kind of sense. If people who aren’t white and male just innately aren’t good at computers, then obviously hiring such people requires lowering our hiring standards, and obviously anyone asking for diversity must have some ulterior motive, and obviously organizations pushing for more women in tech are up to something, and so on.


I’m reminded of another article I really adore, by Graydon (of Rust fame), which explores conservatism vs liberalism in a brilliant way I’ve never seen before. It’s definitely worth a read, but for me the climax is this explanation of reasoning:

  1. I have many rewards in life, and this is probably due to my own merit and hard work.
  2. But if someone else works hard and doesn’t seem to be rewarded, there has to be some reason.
  3. So I’m probably just inherently better, I can’t help it if I wind up doing better.

Same sort of error, along a slightly different axis. The world must be this way; I see a contradiction; the only plausible explanation is that other people inherently suck, which isn’t my problem.

I don’t have any clever proposal for how to combat this problem, assuming I’m even right.

Rather, I think there’s a mistake all of us make: to write off the people we severely disagree with as idiots, or bigots, or crazy, or whathaveyou.

Which is really just cognitive dissonance all over again — we don’t like the idea that another rational(ish) human being could see the same world and draw conclusions that are so wrong, so we cheerfully assume they’re just incapable of thinking correctly. (As if any of us are capable of thinking correctly.)

I think it’s important, and interesting, to consider why people might believe what they do. Especially people who believe the complete opposite of you. Even the largest disagreements can boil down to a single low-level difference in perspective. I like to think that we’d get a little further if we sat down and worked out those low-level differences.

After all, everything operates by a set of rules, and every problem can be understood with just a little binary searching…

2015-11-05 08:15:30
0fb92f3 Andrew Ekstedt Merge pull request #155 from ncorgan/locations/kanto_fix 2015-11-05 06:16:56
54ea67a Eevee (Lexy Munroe) Fix `pokedex dump` under Python 2 AND 3, at the same time even 2015-11-05 04:10:27
b581c52 Eevee (Lexy Munroe) Remove some bogus ORAS egg moves 2015-11-05 04:03:17
e0f4d3b Eevee (Lexy Munroe) Fix `pokedex dump` under Python 2 2015-11-05 04:03:08
c19c818 Nicholas Corgan locations: Pewter City, Lavender Town, Indigo Plateau, and Saffron City are in Kanto, not Johto 2015-10-29 22:01:27
2f861c0 Eevee (Lexy Munroe) Update cropped images to be based off of ORAS 2015-11-05 08:06:02
6ac0716 Eevee (Lexy Munroe) Add ORAS main sprites 2015-11-05 07:56:38
c68862f Eevee (Lexy Munroe) Use ORAS's canonical renders as main sprites 2015-11-05 07:55:36
2015-11-05 03:28:41
0ff24b4 Eevee (Alex Munroe) Fix the CLI in py3 2015-10-05 23:29:21
17999c5 Eevee (Alex Munroe) Try to fix Python 2.6 build 2015-10-05 15:19:13
43db6a5 Eevee (Alex Munroe) That day is today -- run Travis on Python 3! 2015-10-05 15:15:25
b76b74e Eevee (Alex Munroe) Compat with Python 3.3+ 2015-10-05 15:11:08
d0e8f50 Eevee (Alex Munroe) Eerie Impulse lowers Special Attack, not Attack 2015-10-05 12:27:22
74c779e Eevee (Alex Munroe) Add a missing period to Flower Shield's short effect 2015-10-05 12:09:37
8fc636a Eevee (Alex Munroe) Shadow Blast is physical 2015-10-05 12:04:17
4e675e7 Andrew Ekstedt Merge pull request #154 from RichardGottschalk/master 2015-09-24 21:01:41
e798d18 Richard Gottschalk fixed id for german encounter method prose 2015-09-24 20:08:23
adfbf75 Richard Gottschalk added german translation for "Walking on rough terrain" 2015-09-24 20:05:24
6ef2e01 Richard Gottschalk added german translations for encounter method proses 2015-09-24 17:52:56
c5201b1 Richard Gottschalk fixed german translation of "Alpha Sapphire" version name 2015-09-24 01:30:15
a626e9a Richard Gottschalk added german translation for shadow type 2015-09-24 01:29:32
54e8cf9 Richard Gottschalk added italian region names 2015-09-23 16:20:07
b0f6cc0 Richard Gottschalk added japanese region names 2015-09-23 16:19:33
a8b4b34 Richard Gottschalk added french version names for OR/AS 2015-09-23 16:18:52
e57eedb Richard Gottschalk added italian version names 2015-09-23 16:18:19
6507f2f Eevee Merge pull request #153 from xfix/oras-move-methods 2015-08-23 18:16:14
d467a45 Konrad Borowski Add ORAS move methods 2015-08-23 16:29:17
1c1f65f Andrew Ekstedt Travis: Declare that we don't use sudo 2015-08-21 03:33:46

This month, Vladimir Costescu has requested (with dollars):

For this month’s funded post, I’d like to see you write about personality typing, with an emphasis on Myers-Briggs / Jungian typology. This means I’d like to see you write mostly about MBTI and dig a bit into cognitive stack theory, but if you happen to have tidbits of knowledge about other methodologies (e.g. Big Five, Enneagram, etc.) already in your mental data banks, it would be cool to hear about them too.

Don’t worry: I don’t know anything about cognitive stack theory, or even what that means. But that’s never stopped me before!

The things I do know

Well, I know that everyone on the Internet is an INTP.

At first blush, “personality type” assessments look like the same flavor of thing as horoscopes — everyone is one of this dozen-odd kinds of people, here’s how they interact, here’s an Internet quiz to tell you which one you are. seems telling that you already mentioned several different personality categorizations.

On the other hand, certainly some people act differently and some people act similarly, so there oughta be some kind of way to draw lines. But I know I have a tendency to want to categorize everything, so I have to wonder: is this any more useful than horoscopes in practice? I don’t know.

Myers–Briggs at least uses a combination of multiple factors, rather than singular broad-stroke categories like “you are a Capricorn”. Alas, they’re all binary, with no room for a middle ground or “it’s situational”. I’m sure everyone is familiar with the Forer effect, where a classroom of students were all given the same fake “personality sketch” and all of them thought it was very accurate. One of my takeaways from that was that few people perceive themselves as living on extremes — the vague fake profile seemed to fit everyone because it spoke of “at times” and “certain amount” and “some”.

Really, I don’t see why we need any more than the original personality types.

The things I sort of know

I only know what some of those listed things mean, so that’s a good place to start.

Myers–Briggs (Type Indicator), of course, refers to a very well-known system of personality typing that identifies types with four letters, like INTP. Each letter is chosen from a pair, so there are sixteen possible combinations, thus sixteen distinct personality types.

Jungian typology is the original form of that idea, developed by Carl Jung. Jung proposed four main psychological “functions”, in two pairs. Sensation and intuition are “perceiving” functions. Thinking and feeling are “judging” functions. His idea was that, while everyone relies on all four functions, everyone also prefers them in some order, with one in particular being dominant. (There are a lot of comparisons to left- vs right-handedness.) Additionally, everyone approaches the world with one of two attitudes: introversion or extraversion. So that’s eight possible personality types. I’ve also pieced together that he may have ascribed two dominant functions to people, one for conscious behavior and one for unconscious behavior, which gives us a total of thirty-two.

Apparently Jung invented the notions of “introversion” and “extraversion” (his spelling), though his intent was to describe interactions with the world as a whole, rather than a shallow dichotomy of “likes to party” vs “likes to stay at home”. In this sense, introversion means turning one’s attention inwards (look at all that Latin coming in handy) to think and reflect and ponder, whereas extraversion means turning one’s attention outwards to interact and observe and act. Obviously everyone does some of both, but most of us lean more strongly towards one, and have to put active effort into doing the other.

You might also say that introversion is about depth, whereas extraversion is about breadth.

While Jung proposed that everyone prefers the four functions in some order, his list of only eight types fails to mention the second-most preferred (“auxiliary”) function. He asserted that the least-preferred function was always the counterpart of the dominant function, which means the second and third functions must also make a pair… but that still leaves the identity of the second function ambiguous.

In a way, MBTI was designed to address this. Which is a thing I didn’t know! The types are always presented as though all four axes are independent, but that’s not the case. The axes are:

  • Introversion (I) versus extraversion (E), with the same meanings as with Jung.

  • Sensing (S) versus intuition (N) indicates which of the “perceiving” functions is preferred. Sensing relies on objective, concrete observation; intuition is interested in imagination, extrapolation, and finding patterns.

  • Thinking (T) versus feeling (F) indicates which of the “judging” functions is preferred, where “judging” here refers to making decisions in general. Thinking relies on logical reasoning, rules, and truth; feeling is about empathy, consensus, and weighing context.

  • Perceiving (P) versus judging (J) indicates which of the above two functions is preferred! And it indicates which is preferred when interacting with the world — so it indicates the dominant function for extraverts, but the auxiliary function for introverts. So it ties the other three things together.

Thus, the curiously popular diagnosis of INTP actually means (in Jungian terms) that someone is an introverted thinker whose auxiliary function is intuition.

In other words you could express these types with only three letters, an improvement of 25%.

The things I don't know

Cognitive stack theory is I don’t know. This doesn’t seem to be a well-known phrase. I think it refers to the idea that everyone expresses each of Jung’s eight types (4 functions × 2 attitudes) to some degree, and in some order. I found a page explaining that INFJ has a “stack” of:

  1. Introverted intuition
  2. Extraverted feeling
  3. Introverted thinking
  4. Extraverted sensing

Which matches up with the description of MBTI above — J means F is preferred when extraverted, so it goes second, meaning the N is first and is introverted, and then the other two are just opposites.

I’m not really sure where this idea came from, and I can’t find much about it besides a couple Reddit threads and a website that desperately wants to sell me some books all conspicuously written by the same author. Honestly this just sounds like some INTP people latched onto a neat system of putting people in boxes and found a way to add even more boxes. And sell books about it.

Moving right along…

Big Five is interesting. It’s a multi-axis measurement as well, but the axes don’t seem to be emphasized as being quite so binary. There are five (surprise) axes, conveniently spelling out OCEAN. I’m basically copying this from Wikipedia now oh well:

  • Openness to experience ranges from curious to cautious
  • Conscientiousness ranges from organized to careless (carefree?)
  • Extraversion ranges from outgoing to reserved
  • Agreeableness ranges from compassionate to detached
  • Neuroticism ranges from nervous to confident

One thing definitely stands out to me here: these are common ways you might describe other people, whereas MBTI is a more analytical measurement of what (presumably) goes on inside your own head. So in a way, this seems a lot more objective! It’s just some common descriptions of people’s behavior. Explaining someone else’s personality is easy, whereas with MBTI you’d either have to guess wildly or get them to take a personality test.

There seem to be more details to this, but they rapidly fizzle off into obscurity, which is not a particularly good sign.

Enneagram is some kind of spiritually-inspired thing that gives me instant “new age” heebie-jeebies, and also divides people into nine categories. They’re more like archetypes, really: reformer, helper, achiever, individualist, loyalist, enthusiast, challenger, and peacemaker. There are some seven-odd traits available to each archetype, making this vague enough that you could probably fit yourself to any of them if you squinted a bit.

Oh I’m out of things I don’t know.

Other things I sort of know

I’ve had a look for other major typologies, but MBTI is the most popular by a ridiculous margin.

There’s the “Type A” versus “Type B” thing. In practice it seems to reduce to just “Type A”, because I’ve never once heard anyone refer to themselves or anyone else as having a “Type B personality”, and I actually wasn’t sure how many lettered types there were supposed to be. Maybe Type B people are the kinds of people who don’t care what type of personality they have.

Apparently this dichotomy was invented by two cardiologists, because they observed in a study that Type A people were more likely to develop heart disease. This was over 50 years ago now, though, so I have no idea how it leaked into popular culture when it was only ever meant as a link to heart disease, and apparently it’s not even a good one.

I found a few more, but I’ve never heard of any of them before, despite the recurring claim that they are “widely used” or “the most popular” or whatever. I suspect more people are trying to sell their books.

What was I supposed to be talking about again

Which I guess brings me back to that horoscope comparison. It’s cute and it’s fun and it’s entertaining, and that’s why it’s now a billion-dollar industry.

But I’m still unclear on what the point is, scientifically. MBTI in particular came out of actual psychology, and I understand wanting to figure out how personality works, but I don’t know what it’s supposed to predict — and the goal of science is to make predictions. (Actual ones. Like “if I let go of this, it will fall”.) What do personality types predict? I can’t tell. From the sounds of it, your personality type doesn’t even very reliably predict what result you’ll get next time you take the same personality test.

It’s definitely nice to put things in boxes, and I know I’m particularly attracted to it. (I know this because I’m an INTP and that’s what we do.) But over the last few years I’ve seen boxes wreak havoc, so I’m trying to resist the urge to categorize that which doesn’t need categorizing.

Boxes are convenient, but limiting. Once we have a set of boxes, we become accustomed to them, generalize about them, forget they’re a mere convenience, and start to expect the world to conform to our boxes. When something doesn’t fit in our boxes, we get confused or uncomfortable or even angry. We squabble, we insult, we get mean, we pass laws, we go to war, all the while forgetting that we’re up in arms about categories we completely made up in the first place.

So while it’s interesting to see how different people have decided to categorize human personality, I’m really wary of using it for anything more than its entertainment value. I’ve run across anecdotes that personality types are used for career guidance (?), making employment decisions (!), and relationship counseling (?!) — but in all of those cases, a personality type is just a poor proxy for the questions you could and should be asking.

Which is why I see “I’m an INTP”, I hear: “I prefer to direct my energy inward to reason logically about problems, and relate most strongly to the external world by looking for patterns, which is why I think it’s reasonable to express everything about me as a person with just four letters.”


Forum activity

The forums are dead quiet. No one is posting. A lone tumbleweed rolls by.

Maybe you should do something about this.