Monthly Blog Post: Aug 2022

Nuvo Bloggo
4 min readSep 5, 2022

Welcome back to the blog that sometimes meets its deadlines. But only sometimes.

A peak behind the curtain: Tauriel Teaches Typing

Lately, I’ve been getting nostalgic for Tauriel Teaches Typing. So, I thought it would be fun to take a look at how some of the things in that game were implemented.

The game has two main parts: the overworld and the typing tests. I’ll start with the typing tests, since they’re simpler.

A screenshot from my game. There’s a text box where you type things while trying to dodge projectiles.

In a test, you’re tasked with typing words and/or dodging projectiles. Usually, you’ll do both at the same time.

Each test is contained within a text file. I think that my system for representing the text of each test was elegant. The system for specifying bullets, though… not so much.

Here’s the text file for the test in the screenshot:

dont let the 
bullets touch
your cursor
~TIME
25
~POINTS
40
~BULLETS
~CircleBullet
200;0;0;
200;0;1;
200;0;2;
200;0;3;
200;0;4;
200;0;5;
200;0;6;
200;0;8;
200;0;10;
200;0;12;
200;0;14;
200;0;16;
200;0;19;
200;0;22;
~nil
dont let the
bullets hit
the cursor

I didn’t remember “~nil” being a thing, actually. I think it was a way for me to write comments in the test files? I think I used it to comment out the previous version of the text for this test.

So, that’s how I made tests. I just typed out data into text files. How did I implement the overworld, though?

There’s a lot more stuff going on in the overworld. Each “room” consists of a background color, a set of tiles on a grid, visible objects, and invisible objects that all work together to create a cohesive world the player can navigate through. I knew that manually typing in values would be too tedious, so I made an in-game editor that modifies rooms.

Here’s the first room of the game:

A screenshot of the first room of the game.

And here’s how it looks in the in-game room editor:

A screenshot of what that room looks like in the editor. In the editor, all of the objects are represented with gray icons.

Note that I’ve had to splice multiple screenshots together to get a complete view of the out of bounds portions of the room; The in game editor doesn’t support zooming in or out.

All of those funny looking gray things are objects. There are several different types of objects. Here are a sample:

  • Terminal objects look like computers. Interacting with them will start a typing test.
  • SolidRect objects are solidly colored rectangles. I often used them when I needed to make a room look dark (a partially transparent black rectangle does the trick.)
  • RoomColor objects are invisible. Their purpose is to set the background color of the current room.
  • RoomWarp objects are also invisible. When the player enters into their area, they will get transported to a different room.
  • CutsceneObject objects are general-purpose objects that can be assigned an arbitrary image. Some can be interacted with. Interacting with such an object will trigger a cutscene.

Speaking of cutscenes: There’s a system for that, too! Here’s an excerpt from the cutscene that plays when you talk to Doggo in the first room:

~doggo_begin#ICON doggo//deja vu mode
#LVAR 16
#JGZ doggo_dejavu
Oh boy!
I'm so excited to finally start 1st grade!
#CHOICE
<name>, Are you excited?
Yes
No
#CHOICE
~doggo_begin_continue#JGZ doggo_begin_no#NUM 1
#SVAR 4
We're gonna have lots of fun together!#JMP doggo_begin_walk~doggo_begin_noDon't be worried. It's gonna be okay...
Because I'll be here with you!
~doggo_begin_walk#DELAY 30See you inside, <name>!//#ICON nil
//
//doggo walks away
//#DELETE doggo_begin#TEX doggo_begin;doggoB;#DELAY 30#MOVE doggo_begin;9.25;4;35;
#DELAY 35
#DELETE doggo_begin

The cutscene interpreter is responsible for displaying dialog, but it also can move/modify CutsceneObjects around and perform logic. The interpreter has a stack that its assembler-esque commands can read and write to. It’s not the most straightforward system to work with, but for someone who solves esoteric programming puzzles for fun (i.e. me,) it’s not as unintuitive as it might seem.

Now you have a glimpse into the technical implementation of how Tauriel Teaches Typing was made. I’ll probably do more of these segments with my other games, too.

Cool Links

  • Taiji is a cool puzzle game that’s releasing soon.
  • Manufactoria 2022 also looks cool, though I’ve only tried the demo.

That’s all

Thanks for reading!

--

--