hello, i'm sophia park

Subserial Network

There’s a group of synthetics modifying themselves beyond the standard body modifications available with authorised technicians. They’re installing a serial port into themselves: to network, to communicate in information, to be more machine. To remove our human image.

The mesh network is your next stop. Are you ready? Sign in.

If I described the development process behind Subserial Network, you wouldn’t think it shipped on time, on budget, and beyond the exceeded scope by almost double. It would sound like it would languish on a few Git repositories and wiki pages, with ideas and concepts barely articulated, no one on the team really understanding the goals of the project – or how to communicate with each other.

It’s a miracle that it still shipped on time. I don’t know how it exceeded scope. But it all started about a full year before release…

    (If you want some reading music, I ended up making a collection of reminiscent songs and inspirations from development on Apple Music, if you're privy to that.)

Preproduction I

Arc Symphony released on May 15th, 2017. That same day, I petitioned my physician for a vaginoplasty referral, and the process was immediately in indeterminate, but steady, motion. I wasn’t ready, but I knew I would have time. We didn’t know how much time, though.

In Ontario, you ask the government if they’ll pay for it. You’ll need a few letters. They’ll get back to you within a month, and then you apply to your surgeon. And they’ll get back to you when they get back to you.

You do know that the recovery process will take a very, very long time. You know it’s nothing to trifle with. But you don’t know when it’s going to happen. Dates get booked when they get booked, and no matter what, your surgeon’s office is going to be a bit cagey on which and how many patients they commit to booking.

Yeah, yeah, this is relevant. Hold on.

Around June, I was starting to really feel the uncertainty of the whole thing. It was actually really, really terrifying. And I started to wonder about what it would be like to want this stigmatised modification that ruined your life and alienated you from your peers. That the pressure is on from every angle to not be what you are, but even being what you are separates you from others like you. Being what you are, or doing the terrifying things you do, hurts others like you.

On June 7th, 2017, I had developed some notes to work with.

This was undoubtedly too big a project to start and stop – the biggest so far. Perhaps the one that might make games more sustainable for me as a creator. So it had to occur after surgery. And, ideally, it would have some amount of funding to properly pursue it.

At first, I rushed down to Gamma Space in Toronto to pick up Arielle’s audio equipment to do it all myself. And I played around a bit:

But as I got a bit more ambitious, it was soon clear I should find a professional.

Initial audio plans

My partner at the time, Arielle, was getting romantically involved with Christa Lee, and I had spent a fair amount of time trying to be friendly with the metamour. So I approached her to compose on June 27th, 2017, saying:

So I need MIDIs. I was gonna do it myself but when it comes to music it’s like, the point of having skills is that you can make better stuff more quickly than me hammering away.

I’m making a interactive zine like thing. I’m telling a story of a synth trying to get a serial port installed because she can’t cope with using terminals to satisfy the machine part of her that needs to be networked.

So it’s a post singularity story told in Web 1.0 websites. And you know, sites have MIDIs…

She estimated 5.5 minutes of audio; I scoped the game to be an hour and a half. Still a short game, but you know – a multitude bigger than anything before.

Later that night, we somehow got to 30 minutes of “electronic post-classical sounds” – well, if we got the budget going, anyway.

No patience: LOCALHOST

At home, we moved house to prepare for surgery. We would need a bathtub and enough space to do it, so we made haste on that premise. In the meantime, we ended up sidebarring the project. It was getting to be too reliant on external conditions to pursue as impatiently as Arc Symphony or Forgotten. Penelope and I were frustrated by our powerlessness to just make something quickly, so we tried our best to find a way we could just get something out into the world. We had a team, just no capability to really start the project.

So to test the team, we made LOCALHOST. Aether Interactive co-owner’s Penelope and I recorded a podcast that references the development of LOCALHOST a lot – it was, in retrospect, a stressful, uncommunicative time, and a lot of it was my fault as a director.

While you might think you’re the only one who has to burden crunch, it can still bleed into your dealings with others and cause conflict. And we had conflict over game design ideas very often.

Yet, we still came out of the project with a united resolve, and a lot of excitement. People seemed to care about this world and our ideas.

Geographically united, engine agnostic

During September, Penelope and I were discussing how to best make the game. We figured we might have to leave Twine behind, as everyone kept asking us why we were so set on it. I wanted to tell a story with just a web browser and email client. I wanted to make web surfing into storytelling. I believed strongly in the premise that using an intuitive interaction between player and computer – using something they do all the time as the main way of navigating the story – would add to the immersion of the narrative.

And in the wake of LOCALHOST’s limitations, I was over fixed resolution pixel art. I wanted vector graphics and monochromatic goodness.

I wrote September 2, 2017:

[…] my original architecture was chained Twine files within an electron shell to simulate web surfing

But I’d like a more AOL Keyword approach within a vector-driven, sleek, RenPy engine

I would like more use of characters and conversations, even if interludes, and I’d like them to look highly dithered within restricted palettes

I think these can cohere

But after a while, we came back to Twine. It seemed so possible. We started preproduction meetings around September with our to-be-producer, Henry, where we architected the game flow: first, sign in with a username and password. This opens several windows that communicate with each other to tell the story.

We didn’t know how we would do that, but we knew theoretically it was definitely possible. Electron can pass information between windows. Twine could run basically any JS code from a received message.

He recommended we get a programming consultant of some kind to make this easier on ourselves as inexperienced developers. He knew surgery was coming; he believed in preparing as best as we could in the meantime so that we hit the ground running properly.

In the meantime, as I became more romantically involved as a member of a now-triad, Christa moved from Seattle to Toronto late September. And for a short while, life was really nice.

Around this time we articulated the mission and goals of the project on the Git wiki:

I had begun filing art grant applications for Serial, but by chance, we ended up talking with Humble late September, and we were greenlit for project Serial with our projected budget and timeline: the release date would be June 1st, 2018, as a Humble Original, for Humble Monthly subscribers. It showed a lot of confidence in the team, and we were dedicated to making good on that confidence.

This was part of our extremely barebones deck, essentially an elevator pitch:

We could make this game what it was supposed to be, and it was so, so exciting. The funds arrived, and I paid everyone, except myself, in full and ahead of any work.

Preproduction II

It was about this time that I knew my surgery date: November 27th, 2017. This was good. This was something to work with. We would do our best to fill the gaps until then, and come at it in January or February full force.

After discussing our central problem with Twine with a close friend, Jonathan Levstein, he came back with a solution within a weekend. So, of course, I hired him to consult on the spot; but, he ended up becoming our technical lead, taking a far more hands-on role.

As he joined our production meetings, we started working on a proper game design document (far too late, probably!). We outlined technical requirements, specifying what should be possible, what would have to be implemented. He did a spectacular job over the next two months developing macros and writing clear, well-documented code to communicate between Electron windows; to make a dynamic, automatically sorted email inbox; to allow windows to unlock events in other windows; and to provide a clear, elegant solution to developing chatrooms that affected variables and other windows. Honestly, it was considerate, even genius, technological architecture work.

Lofty ambitions

Around October, I was simultaneously getting very deep in research in the possibilities of the ePub format. You can embed audio in them really easily. You can even make the audio autoplay, if you want to be a real jerk. And of course, you can make just about anything interactive – linking to other places in the book or just making links that produced CSS animations on different paragraphs.

An ePub is just a compressed file made up of HTML pages, and I’ve come a long way just fiddling with basic web development technologies. So I wanted to make a companion book. After all, we had made three games in 2017, so I was very used to this quick pace; I couldn’t possibly wait until June without anything coming out. I wanted to give something in the meantime, and a companion text that played with the formal components of the ePub format seemed like a good idea.

I was also a huge fan of .hack and trans-media properties, and I wanted to spread this world out in connected, yet individual, stories and sets of themes, within a shared universe.

The planned word count and release date of this book? 40,000 words, January 1st, 2018. And no, it didn’t happen. I did design a cover myself, for the first time, though I’ve done better:

The idea was to have a textbook about the internet from the perspective of synthetics who only have textbooks about the internet from the 1990s and before. They didn’t have terminals to write with yet; so they had to use their bodies to create the information and disseminate it, contorting themselves to write arbitrary data to their storage units, which were constantly storing thoughts and experience.

However, this way of producing a story also allowed thoughts and experience to bleed into the text. The book’s protagonist, Dr. Angela Fenner, was a lead researcher of organic knowledge architecture, but she was built in the image of the original human of the same name. And it turns out that this human couldn’t conceive; for whatever reason, this life experience of initial disappointment was embedded in stray amounts that were triggered by coincidental experiences in the synthetic world. So the book had audio clips of former conversations and therapy sessions interrupting the textbook.

A friend agreed to do some voice work for an imagined conversation between Fenner and her human self. Here’s the script for that session:

Looking back, it’s far more vulnerable writing than anything out of Subserial; I can’t pinpoint the origin of the difference in tone, though.

I registered for an ISBN account in November and got one issued for the book; I also hooked into bookseller databases for formal publishing. It costs a decent amount of money to do so, it seems.

The book got postponed a few times as life circumstances changed; until finally, the bits of it that were important to the lore of the story were put into Subserial itself, for the best possible player experience.

Interpersonal issues, impersonal requirements

Things weren’t great at home, and it quite openly bled into work. Suffice to say, our meetings would be about these issues instead of about preproduction.

I was beginning to realise (and it makes me sound incredibly naive) that I had made a mistake in mingling my romantic with my professional life. After the past few months’ performances, focused so much on interpersonal issues rather than work, all of project leadership realised, simultaneously, that while we didn’t want to, it was likely we had to rehire our composer at least, if not our artist, too. But I didn’t do anything just yet.

Post-surgery difficulties

We left for surgery in Montreal on November 24th. Everyone’s experience with this surgery is different; it was, for me, an intensely trying experience. I didn’t expect to feel what I did; I wasn’t expecting to be as affected by the physicality of it as I was. I wasn’t expecting to have as much pain, or to feel the kinds of pain I felt.

Getting home wasn’t easy, either. It was a five hour train ride and I was terrified of incision infections. If I moved too soon or stood up too long one week post-surgery, I might start bleeding out. Once home, I basically slept the rest of December.

We still didn’t have anyone to take care of me out of hospital, so occasionally, Arielle would stay home from work and try to.

In hospital I was starting to think of other potential choices for musicians. I had encountered Esselfortium’s PC LOVE LETTER in October and was in love with it. It sounded so unreal. So I pondered these choices while dealing with the horrors of my own body. Here’s what that combination looks like in a nutshell:

December 29th, 2017, I reached out to Esselfortium – her name was Sarah, it turns out – to gauge interest, and she was willing and ready. While the past few months were messy at best, I tried to shield her from the past few months of turmoil, but not be deceptive about the messy development she was entering, either. She was still game. She continues to be a collaborator of the company to the time of this writing.


The switch immediately had a positive effect on momentum. As a composer, Sarah was enthusiastic, devoted, value-aligned and prolific. She provided reworked snippets from her previous album she could evolve into tracks; she asked for inspirations and directions, and I tried to provide something separate, something more specific to her strengths and what made her special as our choice of composer.

She had two tracks ready to go by January 1st, 2018.

UX ideas, story sketching, art shift

At the start of January, we were beginning to prepare to start production in earnest. We devoted ourselves to using Twee2 and SugarCube as a story format. We drafted sample sites to prove it could be achieved; and we started thinking about modular ways to construct the narrative with Twee files in the Git repository, while still staying true to an external narrative design; albeit one that couldn’t be visualised in Twine directly, across so many windows and applications.

We were starting to consider “Mosaic” as a title, but it only lasted a week or two, since another game was coming out with that title, and it was a little too close to the browser of the same name (its inspiration, on our end). I wanted to clarify the game’s UX in a broad format – since a number of the team wasn’t following just how it would actually play, or be experienced, so I did as best I could:

But after all that had just occurred in our lives, on January 15th, 2018, Arielle came home at 9pm, about 6 weeks post-surgery, and broke up with me. A few tense days later, she returned what she was paid and gave me an eviction order. I found new housing within 24 hours, thanks to kind and generous friends; I moved the day after. I still live there.

As I was still weak, I wasn’t capable of packing everything that was mine. I stuck to clothing and essentials. My mood severely fell, but my outlet was the game itself, so I devoted myself to constructing it.

We now had an issue where we needed an artist on extremely short notice, so I drafted a job posting for the first time in my life and tried to get a hiring workflow going.

Here’s some of the copy we used to find someone to hire:

We needed some idea of the direction the game’s UI would take, so I was tasked to make a mockup around February 1st. I took a lot from ASUS applications and the XFire interface of the mid-2000s in my idea of the “chunky” graphical look while taking a bit from Netscape at the same time.

Penelope and Henry helped me filter through applications, and we asked a few more for additional information, but we eventually made a call on Barch.

Barch enters

Barch, like Sarah, had an immensely positive effect on production. Though they were 11+ hours ahead of us, they attended the weekly meetings, kept on task with the asset sheet, were happy to negotiate and iterate as needed, and were quick.

Barch also had a habit of vastly reinterpreting the world we had thought of based on what we wrote, which Penelope and I both loved. It challenged us to reconsider the world entirely, and it shaped the rest of the story from those reconceptions. The best thing about Subserial’s development was how our new collaborators really made Subserial Network theirs in their contributions; there was never quite conflict, just conversation on the most compelling thing. A united resolve to give the best experience. A common belief in the world and the ideas as something new, as something worth working on.

Taking shape, making routines

Mondays, Penelope and I would meet and talk about the worldbuilding as we individually wrote our assigned sections; by and large, Penelope was tasked to fill in the world, asking and answering questions that came across as a consequence of the premise. For every question there should be something actionable, or something to be found, for the player. It wasn’t that clear cut, however; we ended up trading roles several times and co-writing several pieces over numerous afternoons.

Thursdays we met for our weekly meeting, setting our sprint for the session. Occasionally we would skip a week of meeting and I would delegate tasks for the interim period.

We started out in January using TiddlyWiki to take non-linear, tagged notes while charting the main narrative line – we needed, after all, to tag emails, sites, main content, side content, story act categories, as well as all potential keywords plotted in the game. However, we found that it was inadequate for group editing, so it was a very basic story outline by February and March.


The narrative changed as we asked and answered questions. We knew what your goal was; we knew several of the plot points of the story; but otherwise, we gave each other free reign to follow the questions that came from conceiving of this world. How would things have happened in this universe in a way that seemed natural, believable? And what would its online representation look like?

I hesitate to write too deeply about the narrative, because I want it to be experienced, first. But I can say a few things about its development. The notion of there being several sects of synthetics that dealt with the transformation from emulating humans to embracing machine existence in their own way was a natural evolution over the course of the game. A natural consequence followed a premise and suddenly a classification of synthetic had to exist, so we’d go back and write them in.

Penelope wrote several characters that were too good to be written once for a site, so we brought them back; some got promoted to main cast. Several times we went back and re-examined what we wrote and found that we had stumbled into portraying character arcs by accident. A little embarrassing, but true.

The problem we had was that though we had a narrative outline, filling in each step of the outline changed the story, and the outline changed as each step filled out to compensate. The game became better as a response, but it also got away from the original intent into its own thing. It wasn’t a direct allegory anymore; it was a science fiction story that just took a lot from my life experience.

As well, we structured the game as a three-tier multi-linear story with united checkpoints. So the story blossoms and you find your way to a checkpoint, where it closes up an “act”; then the soundtrack expands and the story opens up again, the world changes, leaving you to find your way to the next checkpoint however you like. I haven’t personally witnessed a playthrough of the game yet – I just saw that playtesters were able to get through the narrative within similar time frames, so the plotting we charted seems to hold.

On the other end of it, I honestly wonder what it feels like to play the game without knowing everything, without having written anything. It’s the game I wish I had found when I was younger.

Oh, and one more thing: everyone involved in the project seemed to be really into anime? And discussions of anime tropes and storylines probably ended up infiltrating themselves into the story more than I would’ve initially considered over a year ago.

Player incentive

We put a lot of thought about what was fun about the game. What made it a game? I spent a while in October replaying Analogue: A Hate Story to see how it subtly provides its player incentives to keep going.

The thing about Analogue is that it constantly prioritises story completion, and story completion is facilitated through unlocking log entries, which are themselves locked behind interacting with the characters. Analogue sticks a completion bar beside your save point; it’s the only thing you can constantly see to mark your progress through the story. And in turn, this pushes you to talking with the characters, moving forward. Wanting to see more.

In turn, we tried to prioritise exploration. We stuck an email storage percentage bar within the inbox, and we planned the entire narrative to allow a player to 100% complete the game if they so chose to pursue it. That means no matter what path you take, where you go on the Net, what you say to whom, even if the individual content of the unlocks change, the unlocks will still add up and allow for 100% completion.

We also tried to allow the player to use their inherent curiosity to pull at the strings of the world a little at a time; we knew that by teaching the player to not search for every single keyword they see (if they kept hitting walls when searching), it might kill the magic of the game, so we tried to fill what we could within constraint and keep teaching the player gently for the first third of the game.

But after all, we were still constrained by scope and budget. We couldn’t fill this fake internet entirely. We had to be economical; but still, believably expansive.

How does it all work?

In practice, Subserial Network is a bunch of simultaneously deployed Twine files in different windows. When you sign in, it checks for a store with that name; if it doesn’t have one, it starts fresh and passes your username as a variable in all windows. If it does, it loads the SugarCube 2 save data for that particular store name for each independent window.

Each Twine has hooks into the IPC render thread of Electron that listen for, and pass in, messages, using Twine macros. But each window manages its own state; the web browser has to manipulate Twine history to let you use it like a web browser, so it uses visited() checks and shoves everything into the expired history as you visit it, so the actual history of that session is irrelevant. Depending on what you visited, events unlock in the music player or the email window.

The email window dynamically assigns unread and read tags; unlock events from other windows will add an unread tag to an email passage and push it into the inbox. When you reply to an email, it uses that same unlock event on a JavaScript timeout within the Twine session. If you exit the game between these timeouts, then the game keeps a store of what hasn’t been pushed, and pushes all pending emails at the game’s start, so none can be lost between saved games.

The email window uses variables instead of visited() checks: when you respond to an email, it records what you said, and the reply changes contents depending on what you said. It can also reference prior responses for other emails in this way, since those are within the same session. Arc Symphony functioned similarly.

The fun comes when you plan the narrative around a whole bunch of Twines that have no idea what the other is doing. You have to dynamically plan for what the player has or doesn’t have between windows, based on where they are in the story in each window.

The music player uses Howler.js and responds to events from other windows by dynamically adding to the playlist and revealing hyperlinks for the tracks. Each track has a dedicated looping point that it skips back to when the song “ends” so you never notice when a song starts over.

Version control

Subserial was my first time employing version control for a project; we used a private git repository for commits. I tended to commit strangely amalgamated code pushes, and of course, directly to master. At least I know better for next time.

Music: style and sound

The music player was initially going to be far more basic, but Barch quickly turned around a UI template for a Winamp-styled player, and Jonathan made it a reality. The disk spins! There’s multiple skins for the player! It’s one of the coolest parts of the game’s presentation, in my opinion, and I never could’ve done anything like it myself.

Sarah continued to be fast, prolific, and engaged. Songs came in rapid fire, with multiple iterations provided over the next few days until she hit something she was satisfied with. Several hit in January; most around February into March; and the last song, Connect (the first song you hear after the introduction), was added to the game on April 8th, 2018.

She would pay close attention to chat discussions about the story, internal lore articles, and play through builds with an intense, close eye – and then she’d start naming the songs after concepts from the game. Now we have a game that opens with songs like “Mojibake” and “September Eternal”…

Sarah took cues from elements of vaporwave; IDM like Bola, Boards of Canada, and Telefon Tel Aviv, and then continued to put her own twist on it as the game developed in scope and premise. If PC LOVE LETTER was the impetus for her hire, she went in a completely different direction for Subserial’s OST – it’s far less cloudy, far less cassette, and far more sinister and cyber in exchange.

Using some UI designs from Barch, we sketched the UI of the game from these templates using CSS border images. I picked a specific old PC font for the project, and it became the go-to for most UI elements. While I normally try to get the integer pixel scaling as correct as possible, this time it wasn’t an homage, just a stylistic choice, so we were a bit freer with the way we implemented the font. I was also constantly thinking about the AfterStep window manager and tried to channel some of its specific design strangeness for the window bars.

Crunch and health

My health was severely complicated during this period; I was mysteriously tired, feeling a general malaise, and in constant pain. Things weren’t healing so quickly or nicely once I had moved; the recovery situation we made out of our home was gone, and where I had moved wasn’t very suitable this early into recovery.

The surgeon’s office wasn’t being helpful with the things I was noticing, and I saw my doctor back and forth trying to figure out what was wrong with me. I took a lot of tests for basically everything under the sun, then was on various numbers of antibiotics for a few months until things started getting much worse. My doctor said to go to the hospital, because it could be sepsis, so I did. I just remember being in this emergency room at 2am convinced that here I was, about to die at 24 from an obscure footnote infection in my undocumented, custom-made augment, crying my eyes out, as the ER doctors were confused by what was going on even more than I was.

During the early parts of production I really shouldn’t have been sitting directly on a chair as long as I did, but I just sort of dealt with it. I sat on pillows a bit. I slept a lot, and in turn, I worked odd hours. The game ended up becoming my life, seven days a week, just as the past two did. Crunch had set in again, and I had a deep need to make this world a full reality. It wasn’t until early May that I began to feel 100% again.

My relationship to crunch is difficult to articulate. I don’t enforce it on anyone; yet I know that by working constantly myself, I’m setting an example, and a pace that people want to keep up with. But all the same, my mind is constantly trying to solve problems. I’ll hit my head on a programming puzzle for seven hours, go to bed and in the unwinding period where I’m falling asleep, I’ll suddenly realise the exact way I could accomplish a solution, and then get up and solve it and then add more content and then have a few more ideas, and then suddenly I look back, and I was having monologues in the Slack channel at 4am about things we could do, or that were neat.

I’m still working on finding a better path for my own work/life balance.

Lower third

Mid-March, things were looking promising. We were making consistent strides of about 5,000 words at a time over 48 hour periods between the two of us (calculated by evaluating the word count of about five or six different Twine .html files and a .pdf file, as well as a separate application entirely, yeesh), and I was keeping track of the world in a coherent, broad sense.

A number of times during development, I wrote a website and felt like it was the strongest, most evocative writing I had captured in my life. And yet, I was suspicious of that feeling. I felt like I had darlings in the yard with mother’s eyes.

And of course, I wanted to show people, but I felt like I couldn’t. It had to be completed first. This is a consistent hesitation I have – it always feels like it disempowers the work to take it apart and present unfinished and disjointed. Perhaps I’m still a romantic, after all, to my own detriment.

Henry started to plant the idea in my head that I could try wrapping the story for March 30th and giving more time for beta testing. So, I did my best, and wrote the last act (and with it, another window to manage, another layer to the world, and a keyboard-focused interface for a Twine page meant to mimic a terminal) within an afternoon – of course, programming in the endings at the same time. They seemed to have a strange power to them. Over time we made significant edits to both.

After content completion, Jonathan slotted in a save file system and username entry around mid-April, and we hit beta on April 25th, 2018. I was astonished that the save system worked so well and so elegantly. It autosaves every time you visit a passage in each window.

But honestly: after all that, people could play it. People could test it. It was a thing you could complete.


Penelope had been iterating on cover art during development; she had fallen into the role since Arc Symphony, and she hasn’t missed once.

Barch’s final assets were wallpapers, which we bundle with the game – I wanted the player to think of their entire desktop as part of the game, so bundling some wallpapers for their own computer would help facilitate this immersion. My favourite one is the poster: all we said was “What would fanart for this game look like?”

I had never cut a trailer before, but I did my best, recording some sample footage with Quicktime. The scaling seemed to be an issue – especially with pixel artwork – but it still presents well. Sarah generously cut a separate trailer edit of the end credits music.

I looked at the full premise of the game and did my best to write marketing copy for this strange world, for this convoluted, complicated premise. What were we asking people to play? How could it best be understood?

Would it be understood?


Subserial Network is just under 50,000 words. Playtesters took anywhere from 2-4 hours to complete it. It’s the fruit of the worst periods of my life, and a direct product of one of the largest anxieties I may ever face.

It was narratively developed over weeks and weeks of daytime cafe sessions where we challenged each other to justify another consequence of the world we were building.

The team we invariably, gradually assembled are some of the most talented, friendly, professional people I’ve ever met, and I’m so happy I found them.

I really hope you enjoy the game, and I hope it finds its audience. I wouldn’t take back anything that happened for the world, because I’ve become such a better developer, team leader, and person for going through it. But I think it may be a miracle it’s out there, after all.


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