hello, i'm matilde park


Today’s task? It’s simple. We need to format and prepare these spare drives for refurbishment. Please use that personal assistant gynoid model for investigation purposes. And remember, above all, no questions.

Pay no attention to the “souls” inside those drives. You will learn that synthetics will do anything to seem like a human. We made them that way.


Source code available here.

(July 28, 2017 - August 21, 2017)

LOCALHOST was supposed to be a small project, and if you’ve been with me for any time at all, this might actually sound familiar. It even has a similar introduction: it involves me and Penelope Evans, my Arc Symphony collaborator, in the last stretch of July 2017.

I was planning a project for which I was preparing to take to the government for funding; however, this also meant that it couldn’t start until, well, the end of the year. I was looking at getting some major surgery at any point between July to December that would take me out of commission, so I couldn’t really commit myself to anything big. No salaried job, no full-time contracts.

Penelope herself had hit a lull where she had no current projects as well; and we were both, mutually, frustrated. We needed something to do. The next project I was planning had its crew, had its budget, but the timeline wasn’t due to begin for such a long time. I was itching to test them on something small, something to test the chemistry, to fix them within the universe I wanted to create.

We got lunch together on July 28th, 2017, and decided that one of the following two things would make for a fantastic story:

  • You’re inside one hard drive, across four bodies. You have no control over where you’ll be next, and you need to position yourself somewhere permanently.
  • You’re a person swapping four drives in and out of one body, trying to find that body’s owner.

We got to work with some core premises and found that we were onto something rather casually devastating. LOCALHOST was taking everything I feared, or found troubling, hard to deal with, and meshing it all together violently.

Narrative design

Penelope and I decided on some bare narrative sketches in order to allow the story to progress across four simultaneous branches:

  • Each branch had three concrete acts that could react to, reference, or include any act of any other branch.
  • These acts were initiated by a fresh introduction of the drive into the body; and were concluded once the player hit a throughline.

There were positive and neutral throughlines for each drive; but they were sometimes buried behind morality checks (silently adjusted according to player apathy, empathy and carelessness) or behind specific lines of conversation (which made those sections almost down to luck).

Sometimes you could hit a positive throughline and then stay on the neutral throughline for that drive afterward; your positivity score would be at 1, and could introduce “slightly positive” endings by the conclusion of the third act.

And likewise, sometimes you would make a choice that forbade the positive throughline entirely, lowering the throughline’s score to, potentially, below 0.

The miracle of LOCALHOST is that in the midst of all these silent checks that cascaded over the progressing conversations, the scripting seemed to hold.


Penelope assigned drives. She wanted to handle Purple (a manipulative virus seeking new bodies) and Yellow (a caustic, emotional coworker of the body’s owner, Local); she left Green (a drive in love with Local, now finding itself in her body) and Red (a lone human uploaded to a defective drive) to me.

I did not like these choices, personally; not because of any particular distaste, but because my drives felt so difficult to write. They were so volatile and repugnant to inhabit myself within that the thought of having to do it made me a little nauseous.

I was also the only programmer on the project, so my paths tended to force me into two alternating mindsets to write: the writer wanted the conversation to flow one way, but the programmer knew the limitations and the ongoing work of implementation behind those creative decisions. This meant my paths were brief, more prone to weaving into the same choices with, instead, more elaborate morality checks and morality-based decisions.

Penelope’s paths, on the other hand, tended to become incredibly complex maps; she would make a request for a requirement for each conversation path and I would find a way to make it happen.

In practice, our assigned drives rarely mention each other. Purple and Yellow are deeply related; Green and Red affect one another – but only if you play them in a certain order. I’m unsure most players have noticed their connection.


Twine wasn’t made for this. Making it play nice involved a lot of modular programming choices and, honestly, very hacky implementations of existing audio- and text-focused macros.

The most integral was, of course, “timedcontinue”. It’s supposed to progressively reveal the text in a Twine game; it, however, pauses literally everything, not just text. That means images, sounds, JavaScript, all wait for the timer before being run or displayed.

This is what makes LOCALHOST possible. That, and nightmares like this:

The average passage in the game looks like this:

You have the following:

  • The “layout” passage tag, which forces the dimensions and positions of the two panels for the game (this was taken from my previous game, Forgotten, to keep the scope low)
  • The “yellow” passage tag, which colours all text the web colour “yellow” (but not links, which stay white).
  • The image of yellow in Local’s body with a fixed height.
  • The inventory passage is displayed, which dynamically checks where in the story you are before showing the state of each drive, and selectively hiding the drive currently inserted in the body.
  • The core of the passage is wrapped in the “bottom” class in a paragraph element; this positions it within that bottom panel and styles it accordingly.
  • Timedcontinue macros everywhere – enforced instead of ellipses and used, deliberately, to force a conversational pace.
  • A consistent 2 second pause before making your dialogue choice.
  • A reliance on the “if visited” function to check what other conversations in whatever act or branch you did or didn’t access before. This allows the conversation to be relevant to your specific playthrough.

These aspects are generally in every passage in the game, bridging and pausing appropriately for the full 15,550 words.

I made this possible by essentially devoting my waking life to development for the three weeks. I woke up, worked, and slept, generally from 9am to 2am. And day by day we made major headway all the way to release.


My partner Arielle made the core Local art and animations (including the drive loading faces), the panel artwork, and some of the UI elements. Penelope made the drive icons, the cell phone icon, the background for the workspace, and the graphic design for the cover and logo of the game.

Arielle deliberately channeled her favourite game, Majora’s Mask, in attempting to depict, in a very quick way, the anguish of living, experienced all at once, in being booted up.


My other partner Christa offered her help on the soundtrack and was able to create the tracks for the game in absolutely record time. Often she would provide sketches for tracks within an hour or two and the final by the end of the day – over, and over, and over.

I would mention a certain inspiration or aesthetic and she would be able to capture it almost immediately, often providing additional references in the same vein for my reference in giving direction. She was by far the easiest, most professional person I’ve ever worked with on a project and she’s therefore an asset on literally any team.

She made composition look like breathing.

© 2018 matilde park · articles & written content available under cc by 4.0