Category Archives: Philosophy


I’m not often reflective. Honestly, I think all the reflection I did last New Year’s Eve was “seriously why is Christmas music still playing, this is ridiculous”.

(I’m fully aware that in my slice of the planet that it’s still December 30th. Humor me.)

The concept of a “year” as a reflective milestone isn’t something that ever made sense to me. “Hey, 365.24 days have passed/the Earth did it’s thing/the alcohol I ingested on December 25th has worn off, let’s think about the past/present/future/self-improvement” just seems like a weird thought. And yet, here I am.

I’m generally against selfish resolutions. Internally, I’ve built a repeating thought to just “be a better person than yesterday, be a better person than yesterday, be a better person than yesterday”, almost as if it’s a traditional Korean chant (it’s not, I checked). But I think this year, I resolve to be less lonely.

That’s a bit hypocritical given my other views on New Year’s resolutions; problem versus solution. We resolve to lose weight, but we don’t necessarily envision all of the steps needed to get there; daily exercise, diet changes, better sleep patterns, etc. We resolve to spend last time playing video games, and same problem; we don’t know how much time we’re cutting out or what we’re going to do instead.

And I don’t know what my solution will be for my resolution. But I hope to find out.

If you’re reading this, cheers. Cheers to you, your health, and your success in 2019. I honestly and truly care.

Proof that Nolan’s Just Another Human

Too wired to sleep, too tired to work (it’s 4AM). So I ended up going through my old Facebook messages – a little trip down memory lane.

I’m amazed by three things, really:
1) How many Facebook accounts have closed.
2) How little my “old best friends” keep in contact with me. [I’m not saying that they should, nor am I saying that I feel entitled to human contact. I’m simply amazed/surprised.]
3) Who I used to be. [Which somehow, isn’t all that different from who I am now.]

4 years’ worth of messages… I “archived” about 70% of them, and there’s a lot I’d give to permanently forget about some of them. My old (current?) “crushes”, group projects that could have gone much better (admittedly, or much worse), people with whom I didn’t get along well with, and so on.

Of course, there’s an old saying that goes “everything happens for a reason”. Which I find to be a bit silly, mostly because the implication is along the lines of “bad things happen for good reasons”.

If I were to say “there was an earthquake in Emerald City and 20 people died – that happened for a good reason” I’d sound like a masochist or something. Unless the reason I had in mind was “the tectonic plates shifted”. In that case, I’d just sound stupid. Obviously it’s a bit pompous to compare my past to natural disasters, but in the context of the old saying, the analogy stands.
“computer broke” “happened for a reason”

Okay I lied, there’s a fourth thing:
4a) The subject matter of the messages.
4b) That’s still all I really message people for – or get messaged for.

It was always homework, or school-related, or me “checking in” on someone I’d like to know better.
It’s never really been “hey, I’m feeling lonely right now, up for a chat” or “would you like to get lunch, like, right now”.
It’s always been (and still is) “what were we supposed to read” or “hey, I need help with the homework” – regardless of whether I’m sending or receiving the message.

Does all of this make me a strange sort of shut-in, or just another college student that doesn’t quite have his psyche together? Or one of the oddball high school kids that couldn’t keep his friends? Ah, well. I am who I am, I guess.

… I’m a bit more awake now. I guess I’ll work on Project Exist a little, then.


Balance, Fairness, and Difficulty

When I started working on Project Exist, I knew in advance that you can’t have all three no matter how many people are playing the game, at least not in an effective distribution. Imbalance is not unfair, unfair is not difficult, and difficult is not unbalanced. But in the industry, getting even two is starting to seem pretty hard. Why?

Balance in game design refers the parts of a game being compared to other parts of the same game (at least in terms of the game’s mechanics). There are always going to be favored playstyles because those are subjective. For instance, the process of maximizing damage output (or maximizing damage resistance) at the cost of minimizing everything else is often seen in RPG’s of every kind. In other words, specialized character types are always going to have a “best way to specialize that way” (also known as a build). But so what? The trick then should be to make it so that each specialization type is worthwhile. In other words, if maximum damage is a good idea, then maximum tanking also should be.

But this fails in two notable MMORPG’s: Guild Wars 2 and RuneScape 3. It fails in Guild Wars 2 because at the highest level of content, everything in sight will kill you with a single blade swing regardless of how much armor you have on. So maximum damage outdoes everything else. It fails in RuneScape 3 for a far more interesting reason. Imagine for a moment, that I am selling two different brands of concrete. They both have exactly the same durability, material make-up, whatever. The two differ only in terms of appearance (which you don’t care about because you’re going to be using this crap as a foundation for some building) and price. Knowing that both kinds of concrete will perform precisely the same, would you buy the cheaper one? I hope so, but this is the problem RS3 has. Often items will have precisely the same function, but have different prices. Would you rather have an obsidian shield that gives you +20 armor and costs $300, or a red shield that gives you +20 armor and costs $350? Hmm. Project Exist is in a strange place because the combat needs to be valued as much as the story, even if the combat doesn’t happen often. So how can a single-player game be balanced? Simple: make everything dynamic. If you run a tanking character, we’ll give you a higher-damage opponent. If you run a high-damage character, we’ll give you a tankier opponent. We will balance to you.

Fairness (don’t look in your dictionary) is very different, because it is subjective. Fairness outside of game design sort of works like this: no one has to study for their tests! Instead, you flip a coin. Heads you pass, tails you fail. Very boring, very unrewarding. Players prefer the game to be unfair, but the game still needs to feel fair. Imagine your typical gunfight to the death. Your life is at stake, “playing fair” damn well better not be a concern. You’ll use grenades if you have them, shelter if it’s there, and so on. Gamers like the Halo/Crysis/Call of Whatever π campaigns because they feel challenged. This challenge is what makes the game enjoyable; the lack thereof sucks. A game that requires you to earn $400 by the end of the game but gives you $400 at the start of the game is not fun. Unfairness is its own reward… sometimes. Unfair can go too far. Players should get frustrated. But that frustration shouldn’t come from false difficulty; it should come from them struggling to get better.

If players like unfair, then why is false difficulty bad? Victory often is its own reward if the fight to get it was arduous in a way that tested your skills. Imagine yourself driving down the street, and if at the first light you take a left, your car gets eaten by a dinosaur and so you respawn. You know taking a left is the fastest way to get to work, so you try taking your left… differently. While honking, without honking, while in neutral, while not signalling, and so on. Eventually, you realize that this “left turn” is an instant death trap, so you go straight this time and live. Then you take a right and this time you die because a washing machine falls on you. So you go straight, then take a left… This is trial and error, and not in a way that teaches the player skills. Instead of your capabilities, it’s really your patience that is being tested. Whenever a game is difficult, it should be because the skills are hard to master, and not because of invisible death traps. If the death traps are visible and you have to make the drive in under 4 minutes, that’s difficult but not in a false way. We’re still not sure how to make our game truly difficult in a fun way, but we’ll do what we can to make you happy. Just remember that fairness is not our focus (even if it looks like it is).


Kazuki Kamata: Hanayoridango

There’s a Japanese proverb that goes something along the lines of “花より団子” (hanayoridango), which roughly translates to “rice flour dumplings rather than flowers”. Sounds like a load of sexist nonsense, really, at least at first glance. If I went for the flowers and Natalie Bellangerd went for the dango, then pretty much anyone watching would think that they were hit on the head. Or maybe that I was hit on the head and that Natalie Bellangerd was having a bad day. You get the freaking picture. Perhaps the picture wouldn’t have been so clear if, hypothetically speaking, the dango were colored a scorching hot pink… anyway.

As it turns out, the saying has nothing to do with the gender of the preference. Rather, it has to do with the preference’s purpose or function. Looking at dango in a simpler light, it loses its purpose as a sweet treat and becomes regarded as an actual food item. Happy surprise and joy. But flowers? Pfft… still a buncha colored petals that aren’t attached to the ground anymore. At the end of the day, who gives a damn? The proverb thus, tells us that it is wiser to prefer substance over style; stuff that we can actually use, basically.

I’d also like to point out that neither dango nor flowers last a long time. Let’s say the saying instead were “玉葱より鶏” (tamanegiyoriniwatori), or “chicken rather than onion”. Yes, I know the pronunciation is a bigger “mouthful” (that deserved a rimshot)… but the idea here would be that you would only be able to eat the onion once, whereas the chicken could lay eggs, regardless of the fact that an onion is much easier to maintain and probably a lot nicer looking. Again, substance over style.

This is actually more interesting if you think about logic. “Style over substance” actually happens to be a logical fallacy. The idea is that in an actual argument, being pretty shouldn’t get you anywhere. For an example, let’s say I am at whatever faculty meeting and arguing for same-sex rights in the classroom. My argument is “psychological studies have shown that both genders are anatomically capable of acting independently, and therefore office hour meeting availability cannot be influenced by the gender of the attendee(s)” or insert other thought-provoking-nonsensical-I-don’t-care argument here. If the response was “yes, but your slideshow is hard to read because you used Sans Serif instead of Calibri”, then the judges have style over substance in mind, which, y’know, is bad. Attack my argument, morons, even if it is something I pulled out of my ass.

~Kazuki Kamata

Gullible isn’t in the Glossary

Do note that the second half of this article is more tuned to programmers, and likely not suitable for a general audience.

[Side note: new build tomorrow fixing a few typos in the glossary and a few other places.]

If you were to ask me, one of the most annoying things about… life in general really… would be realizing two specific problems at the exact same moment.

The first would be that of “not knowing” something. Which shouldn’t be so bad on its own, since it’s basically impossible to know everything about everything (if that makes any sense). It might grind your gears that you don’t have the information, but hopefully you could get it at some point.

The second would be realizing that obtaining said information wouldn’t be a trial-and-error (or similarly easy) process. This is perhaps the most frustrating in larger games where the lore may only be given to the player once, or recipes make absolutely no sense, and thus have to be found on the Internet. A particularly offensive example would be the Ascended back items in Guild Wars 2. Consider the following:

You need a Vial of Condensed Mists, which drops from monsters in the Fractals of the Mists, which itself is a somewhat randomized high-level dungeon. You need 40 Crystals, which you purchase from vendors using skill points. You need 50 Globs of Ectoplasm, which are items obtained from salvaging rare items. You then need 250 Vials of Powerful Blood, which drop from a wide variety of high-level monsters. Nowhere in-game are you told that these specific items need to be combined to get a book of all things. And even once you have these items, you can’t make the book yourself. You have to go to some djinn who lives in some hourglass-looking thing who makes the book for you. (Did I mention that this is the basic version of the book?)

Now quite clearly, the simple solutions are always those that avoid the problem altogether: having exceedingly simple lore and gameplay to the point of, for all intents and purposes, not having any! A step up would be to manage your own wiki (although now would be a good place to reiterate that our wiki is for development and not gameplay). While we’re talking about other games, RuneScape also has a wiki, but it may as well not exist. What’s better, of course, is embedding a glossary into the game – you shouldn’t have to tab-out of a game to fully enjoy it.


Here’s a sub-problem though: not all writers are programmers. This is what the first three paragraphs of this article look like if put into the game engine:





The glossary looked like this for a very long time, and maintaining it was becoming a headache. It would make sense to allow the glossary to be edited directly via text files… the question was how? As it turns out (thank you for being well documented Ren’Py), there were functions built-in for this.

renpy.file(fn) grants the game read-only access to file fn.

renpy.file(fn).read() then, places the contents of file fn into a String.

renpy.file(fn).read().decode(enc) then, gets the contents of file fn, decodes it in accordance to encoding enc, and then places them into a String. Which explains why the following is in the code:

Automatic and simple, if not weird-lookin'.

Automatic and simple, if not weird-lookin’.

Hope that all made sense. And if not, I did warn you. Rin will be the subject of the next blog post. I think.

~ Nolan