blogs by Gio

Tagged: homestuck

📣 The Sarah Z Video Fallout

  • Posted in fandom

One of your questions was whether I thought Gio was a stalker. It’s my personal take that he probably does not technically qualify as one, but I also don’t think it’s a simple “no” either, given his antagonistic fixation toward people at WP, and his persistent invasiveness has made the women at WP uncomfortable.

Suffice to say for now, I don’t trust him, I will never speak to him, and probably no one from WP ever will either.

After the backer update came out, I took at look at Gio’s revisions to his article, and unsurprisingly, he just rearranged all the new facts so that he could draw all the same basic negative conclusions he’d already drawn.

I think this would be a bizarre conclusion to reach for anyone who was looking at that update objectively, and just indicates that the facts never really mattered because he had already made up his mind.

The only explanation is what everyone at WP suspected all along.
He’s a troll.

*record scratch*

*freeze frame*

You’re probably wondering how I got into this situation.

It all started on 4/13/2021. That’s right, I’m writing a story about me this time. It’s my blog, after all. First I wrote a history, then reported on a rumor, and now it’s time to tell a thriller.

📣 Trouble a-brewin’ at Redbubble

  • Posted in fandom

Homestuck is once again lit up over fan merch. Homestuck and fan merch have a long and troubled history, but this latest incident is between artists, Redbubble, and Viz media. Here are my thoughts on that!

In late May 2021, artists who sold Homestuck merch on Redbubble got this email:

Dear [name],

Thank you for submitting your fan art for Homestuck and/or Hiveswap as part of Redbubble’s Fan Art Partner Program.

At this time, our partnership with the rights holder VIZ Media has come to an end. When a partnership expires, we are required to remove officially approved artworks from the marketplace. This means that your Homestuck and/or Hiveswap designs will be removed from Redbubble soon.

Here are a couple of things to keep in mind:

  • It is important to know that licensors do not allow previously approved designs once sold on Redbubble to be sold on any other platform, even after the program ends.
  • Because this removal is not in response to a complaint, your account will not be negatively impacted.

Partnerships come and go, but don’t worry. We’re looking forward to partnering with more awesome brands in the future.

Check out our Current Brand Partnerships list to see all the properties that are actively accepting submissions. For additional information, we recommend checking out the Fan Art Partner Program FAQ.

Thank you, Redbubble

This hit a lot of people, and hit them hard:


Unfortunately for Twitter and brevity this is actually the intersection of a couple different complicated issues, which I’ll try to summarize here.

Redbubble forcing predatory licensing on people🔗

Now, copyright law sucks for fanartists, but that doesn’t explain what happened here.

⚙ How we made Befriendus ludicrously accessible

  • Posted in dev

Befriendus; everybody’s favorite visual novel about making alien friends. It’s got trolls, yes, but it also has a slew of accessibility options. You can adjust everything: color, font, motion, even spelling. It’s clean, it’s easy, and it works. Here’s how we did it.

Befriendus in-game menu, with accessibility options

When I was designing the basic accessibility framework I had these principles in mind:

  • Accessible scripts must be easy to write; work should never be duplicated
    • Demanding people write multiple versions of work is bad design and encourages accessibility to eventually be dropped in favour of efficient production
  • Humans should never do postprocessing tasks
    • We’re writing software; a computer should do any and all mechanical work, not writers
  • Accessibility options should have as granular control as possible
    • Whenever possible, players should be able to select exactly what they need, not be forced to use something that doesn’t match their needs.
    • Options should be compatible with each other whenever possible
    • Just pushing out transcripts is not accessible design.

The best way to explain these is probably to explain what we ended up doing, and how each design choice was made carefully in accordance with those principles.


We knew from the moment we started putting together logic for character colours that we wanted an optional high-contrast mode. One of the first characters written was Mituna, whose light yellow text doesn’t show up super well against our grey textbox:

Mituna dialogue; yellow text with normal spelling

This is good enough for most cases, but we definitely need a way to turn colors off. Black-on-grey has much more contrast and pops nicely for the high-contrast folks:

Mituna dialogue; black text with normal spelling

This is handled by the Hemospectrum subsystem, a part of FSE.

Characters’ colours are defined with their characters are (mituna, name=Mituna, hemocolor=gold) and processed by the dialogue system when characters speak. Colours are defined semantically and handled correctly at the appropriate stage in the pipeline. (As opposed to some horrible hack, like binding a listener to the option and manually editing every character’s colour in storage every time it’s changed.)

Anytime a color (gold, orange, #f00, #a20000, whatever) needs to be resolved (in the dialogue box, mainly), it’s passed to the hemospectrum function, which resolves colour names and colour codes to universal colour codes.

The logic there is for name resolution, but we also use this entry point to handle contrast logic. Whenever this lookup is made we check if the high contrast user setting is enabled. If it is, we return either black or white, depending on the tone of the colour requested. Since all the colour logic was in one place already, it was easy to add extra logic here. This also gives us the tools to make contextual decisions further down the line — a very light color might pop better as light grey or white, for instance.

Typing Quirks🔗

Characters in the source material, Homestuck, have what are called “typing quirks”. Typing styles, basically. Characters type in different styles, ranging from semi-mundane style choices (lowercase, all caps) to incredibly elaborate (elaborate puns, ending every line with an emote, alphanumeric replacement). I could write a lot about how interesting these are and how they give characters a feeling of tone that the written word rarely conveys, but I’ll save that for another discussion. Brass tacks, we want our characters to do this, and that requires some work.

Now, to my eye, this looks like a build artifact. The “source code” is the script, and once the script is written there’s postprocessing replacement step that has to get done before we publish.

The alternative is for writers to write with quirks to begin with (WH1CH 1N 50M3 C4535 15 UNT3N4BL3) or to run a search-and-replace over the script every time they changed the script. From what I can tell, this is how Homestuck and pretty much every fanfic operate.

Fortunately for us, though, we’re running on a software engine! We can do better.

First, some groundwork. The main gameplay in Ren’py consists of dialogue in script files. Script text looks like this:

show !mituna at speaking

!mituna confused talk "she wouldnt leave without an ip adaptor that was the ONE thing i told her to bring"

!mituna idle frown talk "unless she was an idiot and just didnt. which i guess is unfortunately possible" (show_hashtags="#name of my autobiography: #\"unfortunately possible\"")

show !mituna idle

We don’t care about the stage directions here, let’s look at that dialogue:

On the first line of dialogue mituna is the character speaking, confused talk is his “pose” (the sprite displayed, if omitted it just uses the previous one), and the rest is the text that shows up in the dialogue box. When the story gets to this line, the character mituna says his line with a pose. (Remember that the character does the saying, this will come up later.)

The second line is pretty much the same thing, except you can see there’s some extra data called “show_hashtags” at the end. In Befriendus, the character dialogue boxes have an optional second line of text called hashtags, and this just tells the engine about that.

Here’s what that should look like:

Mituna dialogue; yellow text with normal spelling

But if you get Befriendus and play with all the default settings, here’s what you actually get:

Mituna dialogue; yellow text with quirky spelling

There’s some trickery going on here! Mituna’s text has its alphanumeric substitutions. Where did this happen?

Here’s the trick: all befriendus characters automatically modify their dialogue based on the currently set options. When the mituna character got the line, it changed the line to this:

"{quirk=mituna}unless she was an idiot and just didnt. which i guess is unfortunately possible{/quirk}"

That bit in brackets is a tag. Ren’py uses text tags as internal control commands for things like text speed or text style like boldness and italics, but it also lets you define your own tags to operate on the text. That’s what we’re doing here.

This notes that the quirk with the name mituna should be applied to the text if quirks are enabled, but it hasn’t actually done it yet. At the beginning of the route, when we first defined the mituna character in the first place, we added this line once:

init python:
    QuirkStore["mituna"] = [(c, "31073107"[i]) for i, c in enumerate("ELOTelot")]

The specifics of the right-hand side are the instructions for how to translate Mituna’s text and are black magic. What matters is we’ve told something called the QuirkStore how to apply the mituna quirk. Now every time text is rendered, as part of the engine’s default tag parsing (alongside bold, italics, links, etc…), the {quirk} tag checks whether quirks are enabled in options and applies them on-the-fly.

This lets us do some great stuff. We’re able to quirks anywhere we want (title screen tags, route titles, hashtags) without having to worry about extra cases: there’s no M*N problem since all the logic is handled in one place.

Keeping the semantic, pre-process copy of the text around has obvious benefits when it comes to translation or text-to-speech. Since the dialogue is stored correctly it’s easy for text-to-speech to read from the original text, rather than try to stumble through alphanumeric replacement or some other slurry.


I mentioned earlier that some quirks involve puns. While you could do this with regular expressions, (or write two copies of every script, yikes) we took a better approach and just piggybacked off the tags system again.

Here’s what Meenah’s dialogue looks like:

!meenah pissed "but HELLO we ended up getting busted {pun=halfwave}halfway{/pun} through and its only cuz of MY quick {pun=sinking}thinking{/pun} that we got here at all" (show_hashtags="#had to {pun=finprovise}improvise{/pun} like MAD")

!meenah snarky "{pun=betides}besides{/pun} i gave you my trolltag didnt i"

The {pun} tag is another Befriendus original. The text inside the tag is the original word, and the text after the = is the pun version. As with quirks, this lets the decision of what text to use be made at runtime, and globally. Tags hook into the global text system, so the pun and quirk systems are availible anc consistent anytime we display text.


I really can’t emphasize this enough: all the text features work together. You can toggle quirks independent of color, you can adjust puns independent of quirks, everything. Because everything is structured correctly, this is exceedingly easy to write for.


Unfortunately, “don’t duplicate work” has its limits, and animation is one of them. All our motion-intensive animations and flashing lights have to be written out twice; one full, one reduced. There’s a simple flag in the options menu that determines which one plays in the game.

While ATL has some support for conditionals, I haven’t found that to work consistently enough for our purposes, so we do have some icky logic mixed in with the script.

Here’s what Mituna’s flashing effect looks like:

You can see we tried to eliminate duplication as much as possible using subanimations here, and we even have a ConditionSwitch there at the end. But still, when we trigger the effect in-game, it looks like

if persistent.flash:
    show !psionicoverlay_flash #<- flash variant
    show !psionicoverlay_noflash
with dissolve
hide !mituna with easeouttop

Fortunately, there are only a few cases of this in the game.

Juicy Builtins🔗

Ren’py has plenty of built-in accessibility features that we make sure to expose to the player:

Renpy accessibility menu

As shown you can replace the fonts, adjust text size and spacing, and even turn on automatic text-to-speech.

This didn’t require any real work on our part, except for communicating to the player that this menu exists, which we do at the bottom of the options menu:

Befriendus in-game menu, with accessibility options

As mentioned previously, it was also important for voicing that we kept the original english script around instead of preprocessing the whole thing into quirks.


Ren’py also makes it easy for fans to make and distribute dialogue translations. All our hashtags, menu text, and dialogue use the translation system to make this as easy as possible. Things like pun and quirk tags also make it easier to translate non-words by exposing the intent behind them.


I can’t take any credit for this one either; Alien and Robin maintain incredibly detailed transcripts for all the routes and features on the game page using a web of google docs. I wrote a utility to pull transcripts from Friendsim, but we don’t use that because we have access to all the original scripts. This makes making transcripts for Befriendus is much easier than fan transcripts for, say, Pesterquest.

Alien and Robin actually maintain two distinct sets of transcripts. Alien makes traditional text transcripts of the routes (with colours and quirks) that are as close to gameplay as possible, while Robin makes transcripts that are as accessible as possible, with quirks and colours removed and with added text descriptions of effects, poses, and animations.

Unlike other accessibility features, these aren’t mix-and-match; any changes need to be manually propagated through all the transcripts. Transcripts, though, aren’t part of the prototyping cycle; they’re put together at the very end, sometimes even after the route releases.


We have a warnings page with individually spoiled content warnings for each route. There’s a large button for this on the main menu, so players who are interested won’t miss it. We also try to include appropriate content warnings without spoiling the route, which can be a tricky balance.

This isn’t a traditional accessibility feature, but it does make the game more accessible.

Well, that’s what we’ve done so far. There’s more game yet to go, though; if we add some other major accessibility feature I’ll try to remember to come back to add it here.

I don’t have any groundbreaking takeaways here that I didn’t give away in the first paragraphs. Design your engine in a way to prevent humans doing duplicate work; let the data do the lifting for you. If humans have to do everything twice, no they won’t. Give players control; let them tweak their experience precisely to their liking. If done well, it doesn’t have to be all-or-nothing. Accessibility is necessary, and it doesn’t have to be hard if it’s designed properly.

📣 More on the Hiveswap Odd Gentlemen Debacle

  • Posted in fandom

EDIT 2021-04-13:

As of Kickstarter Update #36, What Pumpkin made the following statement about the accuser from this article: (They didn’t tell you it was the source in this article, I’m telling you that)

As an addendum, WP has identified the primary source of a disclosure to a well-circulated document of the Hiveswap development process. WP has been aware of a pattern of false claims this former employee has made since the end of their employment at the beginning of 2014. As this individual was not present during the end of the development contract with GC, nor the WP NYC development period, all of the information they have shared is based on speculation and conjecture.

There is a detailed analysis of this update in The Hiveswap Fiasco, but to summarize:

According to What Pumpkin, this is a disgruntled ex-employee who left the team in early 2014, meaning anything they said later than that is speculation. In addition to the obvious — that a whistleblower doesn’t like the practices they’re whistleblowing — this would mean they were not privy to the events of 2014 or later, making anything they said about that only semi-informed speculation.

This makes sense. Many of the claims made here early in the timeline turned out to be correct, and even verified by What Pumpkin later on. Some of the later ones seem incorrect; semi-informed exaggerations to make a point. As with everything else, I will note which claims are dubious. It is entirely possible some of this information was provided in bad faith, but some of still holds up.

In the same Kickstarter update, though, they explicitly confirm a significant amount of the news I broke, including multiple major points in this very article! I have also noted those cases.

When I wrote the Hiveswap article, I left a note asking for people to contact me if there were any facts I got wrong or major events I missed. A number of people took me up on that, which I am thankful for.

However, there was one big report I got that was too significant to just edit into the article. Because these allegations were new, and from a credible source, I thought they warranted their own article and research.

For the rest of the story about Hiveswap, see The Hiveswap Fiasco, to which this is a kind of sequel.

By the request of the source (because Andrew is known to be aggressively litigious), I have edited our conversation into a synthetic document. This is a summary of the claims from the source to preserve their anonymity and ensure clarity. I am not yet asserting anything, just stating what the source said; I’ll hold my personal comments until after the whole thing. Here is that report:

What actually happened with The Odd Gentlemen🔗

The biggest reason there’s an NDA in place about The Odd Gentlemen’s involvement is that Andrew wanted to cover up the fact that much of the blame is on Andrew’s failure to deliver a workable plan to the studio in the agreed-upon schedule.

While parts of the ipgd post are true, the post distorts what happened into a story designed to make Andrew look like he did no wrong. What actually happened is this:

📣 Why Act 6 Hits Different

  • Posted in fandom

One of the reasons Homestuck was so popular is how contemporary it was to internet culture. You tell anyone that Homestuck is heavily influenced by internet culture and they’ll nod and agree and you’ll both be very intelligent media critics. But somehow, even from that same group, you’ll see people who notice how the writing style of Homestuck changes over its nine year run and forget about contemporary culture entirely, which is a mistake.

Andrew Hussie has always spoken (or tried to speak) in an aggressively contemporary voice. What he wrote in 2008 sounds like it was written for the internet in 2008, with all the charm and all the baggage. Homestuck began in 2009. Remember internet culture from 2009? “R*tard” was still an acceptable insult back then (among the dominant cultural groups that made up internet forums, at least). Going back as an archive reader in 202X, though, reading “the r slur” in casual conversation is jarring. Why is that there? That shouldn’t be there.

The comic that Andrew wrote immediately predating MSPA was called “Team Special Olympics”, and that’s a whole conversation, let me tell you. In MSPA proper, Andrew was happy to make running jokes about racial diversity or gay pornography in an uncritical, unsatirical way. This was the internet culture Andrew’s comics were deeply immersed in.

Rather than stay fixed in 2009, MSPA — and Homestuck in particular — continued to mirror contemporary (read: pop) culture as it went on, which caused natural shifts in the material. What were previously wacky domestic antics played up for laughs became serious issues of domestic abuse, in retrospect. As readers revisited the earlier material, they re-evaluated it through a more mature cultural lens. Because of the serial nature of the comic, this worked out very naturally: as Andrew and the fandom grew, Andrew wrote in-characters realizing that abusive behaviour was concerning, just as actual abuse victims do. It felt like a natural progression of the story and characterization, because it was natural; it was the same dynamic that really was playing out irl.

This effect had a noticeable impact on the tone of the comic. 13 year boys who insultingly called each other “gay” as playful insults — or prefaced their interactions with “no homo” clauses — would become very different characters in 2015. Sexuality isn’t a insult now, it’s a character arc. Disabled characters, too, were originally played for laughs, but later got real character arcs about their disabilities as they related to their identities in a way that treated the issue (semi)seriously.

All this change — what Sarah Zedig calls its “maturation away from its at times uncomfortable edginess” — can sometimes rub old homestuck fans who liked everything about the atmosphere of the 2000s the wrong way. It can feel like the second half of Homestuck is “subverting” the story they knew and loved, because, well, it’s different. In back corners of the internet you’ll hear that Homestuck was somehow “taken over by sjws” or even conspiracy theories that later parts of homestuck were ghostwritten by another author entirely. On the other side of the room, you’ll have people who read Homestuck, see how it develops well-written gay, trans, and non-binary1 main characters in its later half, and treat the full body of Homestuck as thoughtful queer fiction.

Neither of these is quite right. Both forget how long Homestuck was a serial work, and how much the contemporary culture it mirrored changed over its run. Homestuck re-framed earlier events as its fans themselves re-contextualized them in a changing world. Likewise, Homestuck engaged with queer topics only as and because they became a topic of conversation online. Andrew’s writing reflected the culture of the internet as it happened, and reading it as an archive work invokes all those difficulties with it.

When people describe Homestuck now, they might mention that the first part is “dated”, due to contemporary references, slurs, insensitivity, and the like. But that forgets that Homestuck intentionally, extremely, unavoidably a product of its time, and the internet culture that gives it its charm is the same thing that can leave a bad taste in peoples’ mouths.

📣 The Hiveswap Fiasco

  • Posted in fandom

The real story of Hiveswap isn’t about the game or the universe. Rather, the conversation “about Hiveswap” is dominated by stories about the development and history of the game as a project — starting as a Kickstarter success story but then bouncing from scandal to scandal for years. The story of how Andrew Hussie burned through a $2.5 million dollar investment over eight years to produce almost nothing is fascinating, convoluted, and poorly understood even among Homestuck fans.

Right now, this meta-story mostly exists in the form of oral history. This is probably due to the fact that a lot of the key sources are ephemeral — and most of them have been deleted — but it’s also because it feels premature to write up a “postmortem” on a game’s development before it’s even an eighth of the way finished. There is also significant pressure on people in the know — even people who just lived through backing the project — to keep quiet about all this, for reasons I’ll get into.

I’m documenting the story so far so that the Hiveswap Story isn’t lost to time, and so there’s a decent summary of events so far, and maybe even so new Hiveswap fans can catch up. I dug through every page, announcement, interview, blog post, FAQ, and tweet I could find, and the culmination is this the most comprehensive — as far as I can tell — explanation of Hiveswap to date.