Author Archives: Nolan

A or B? Why not Both? Project Exist 0.2.6b (1056)

I’m a strong believer in redundancy – in other words, decreasing the number things that could possibly go wrong. One of the more behind-the-scenes changes is that we now have Python functions that use Ren’Py labels.

Labels are faster to write and somewhat curiously, Characters and functions use the same namespace, but functions and labels don’t. So we’ve done something like the following:

Functions and Labels at work

Functions and Labels at work

#both of these will work
call triple_min(2)#calls label
$ triple_min(2)#calls python function


  • Use the in-game updater to get 1056 – Gateway Mirrors

Game Engine/UI:

  • Doublespeak has been further fixed to work with rollback
  • Function/label mirroring
  • Now using the Ren’Py 6.18.x branch
  • More WordPress changes

Project Exist 0.2.6b (1053)

Today marks the first 0.2.6b release. That’s important because I said so.


Game Engine/UI:

  • PlaceholderX is now present in the engine, and is used.
  • We modified Shiz’s doublespeak – the version in this build can be found here.
  • An issue with Robert/Rin was fixed.

Rin: Happy Halloween

Oh. Hello.

I think that all of you have had your share of candy. Even though you haven’t really done anything to earn it. Perhaps I should make your insides disappear, and put the candy back where it belongs?

October is a strange time on the streets. The plastic werewolves and the orange lights come out of hiding. They don’t scare me, though. It’s easy to send things like them into the sky, and watch them fall… fall to the ground and crash into scattered colors.

What’s really strange though is how people behave. I wonder if sugar makes people angry? A man with a hood walked up to me and pointed something at me and started screaming… screaming about a van. But I didn’t know what it was. So I took his hand away.

As I held his hand in my hands he began to cry, holding onto his wrist. And I laughed. He wanted me to fear him, but now he feared me. Was it because of what was in his hands?

I held “it” the way he did, and pointed it at him. Then he howled, and that hurt my ears. I clenched my fists, and suddenly there was red.  A bright and crimson red. And he stopped… crying. The way to make people be quiet… this is what I learned this Halloween.


Project Exist 0.2.5b


All of Project Exist:

  • Implemented secrets.


  • Now running WordPress 3.9.2
  • Various under-the-hood plug-ins updated.


  • We mostly left Wiki1 alone.


  • Added a ridiculous (12?) number of templates.
  • Finished Athena’s page.
  • Conceptualized the Project Exist page, which details Lawrence’s ulterior motives.

Game Engine/UI:

  • Wallet works slightly differently
  • Thorium made our wtf_iorpy_magic module safer.
  • wtf_iorpy_magic now can delete the complete save directory; both the one Ren’Py makes by itself, and the one wtf_iorpy_magic makes by default
  • Episode markers
  • Athena’s parameters were changed to prevent a very embarrassing exception
  • Countdown now includes a bar, it will be colored by 0.3.0 hopefully
  • Implemented the MusicRoom (but badly)
  • Added two songs from AgentAbacus and Nihilore

Game Story:

  • Small branching point continuation

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).


Project Exist 0.2.3b

All of Project Exist:.

  • The new game build is titled “Coldfixup” for now, please use the in-game updater.


  • Added application
  • Moved Previous Builds to Other Links


  • Fixed Memories of Ultraman 7 formatting
  • Added this


  • See Wiki1


  • Version is now 0.1.1
  • begin_game() is slightly more thorough
  • added filify_string(given_message, magic_folder, magic_file), which returns string if given a UTF-8 encoded file.
  • added kill_save(savename), which deletes a save.
  • added freaking_delete_every_external_file_associated_with_this(). What it does is left as an exercise to the reader.
  • added label reset_button. (freaking…() should not be called directly)

Game Engine/UI:

  • Fixed loading an NVL screen within an NVL context within some other context by use of “centered” instead of actual NVL.
  • Slightly changed the way the debug menu works.
  • Several non-working menus removed

Game Story:

  • Absolutely nothing notable.

wtf_iorpy_magic 0.1.0

Today marks the first release of wtf_iorpy_magic. You can also call it WTF input/output Ren’Py magic. Maintaining it is a side-project, and not a priority. It is a very unpythonic and not-so-optimized module for Ren’Py, but does make file management much easier (I really don’t like the persistent system… I just don’t).

It’s a pretty much undocumented in-line, mostly because we figured it’s easy enough to use (as long as you actually read the README). That being said, standalone documentation is available in the zip file. We’re releasing it under the WTFPL. Happy coding.

wtf_iorpy_magic_v0.1.0 (19 KB)