Itâs been a little less than a year since what Iâve jokingly called my Homestuck Divorce.
Iâve published The Unofficial Homestuck Collection Takedown and The Homestuck Union Was Always Fake explaining everything, but theyâre very long.
I think I needed to be thorough in documenting those details, but the information thatâs relevant to most people is hard to consume.
People kept asking me to summarize and Iâd rather just have this out there so I donât have to think about it again.
I donât want to have to come back to Homestuck, so this is a tl;dr retrospective summary to organize my thoughts and capture this question that still keeps coming up: âwhat happened?â
When I was a kid I learned about Lindenmeyer Systems and the fun tree patterns they create. I even followed a Twitter bot that generated and posted random pretty lsystem renders.
These are similar to fractals, except unlike traditional fractals they don’t usually expand within a fixed space, they either continue to grow or loop back intersecting themselves.
Meanwhile I spent most of my time in school and needed something to occupy my hands with. I did a lot of notebook doodling, except people notice those.
But I did have graph paper. And graph paper gives you enough structure to draw lsystems by hand. So I did, a lot.
I probably went through a notebook every two years, and I can’t remember once ever drawing an actual graph.
This was when I was a child in childish ways and hadn’t yet learned about dot paper. Oh, misspent youth....
There are a couple interesting things about this mathematically.
First, there’s only really one interesting space-filling pattern to draw on graph paper, which is forking off in two 45 degree angles. Anything that doesn’t fit on the coordinate grid (like incrementally decreasing line lengths) becomes irregular very quickly.
The main option to play with different patterns is by setting different starting conditions.
(Seems like it’d get boring quick, right? I spent the rest of the time trying to apply the Four color theorem in an aesthetically satisfying way. Still haven’t solved that one.)
Second, drawing on a coordinate grid means using Chebyshev Geometry, where straight lines and diagonal lines are considered the same length. So a circle (points equally far apart from a center point) is a square. This is also sometimes called chessboard geometry, because it’s how pieces move on a grid.
Also, because I’m drawing this by hand, I can only keep track of visible tips. So if tips collide I count them as “resolved”, even if mathmatically they’d pass through each other.
But I kept hitting the end of the graph paper.
I was bored in a work meeting this week and ended up doing the same thing, and it made me wonder about the properties of the pattern. Did it repeat? Did it reach points of symmetry? I thought it would be fun to whip up a tool to run my by-hand algorithm to see.
There are lots of web toys for lsystems but none are designed with these graph paper constraints. So just as an exercise I built my own from scratch, and it’s pretty good at drawing my high-school pattern.
The answer to the pattern question is: it depends on the starting position! If you start with one line you start to see radial symmetry, but if you start with two lines facing away from each other (as in the animation) it’s more interesting. Neat.
Each generation is considered a state frame that keeps track of lines (for rendering), buds (for growing the next iteration), bloomed_buds (for bud collision) and squares (for line collision).
For the Chebyshev geometry I just keep every line at a 1.0 length and let the trigonometry functions round up.
I didn’t actually implement a parser for formal Lindenmeyer syntax, I just defined everything recursively in pure Javascript, using a definition to encapsulate details about the pattern:
There’s a slight complication to doing this cheaply with lines: on paper, there are cases where lines intersect, and in those cases I stop at walls, even if it means drawing a partial line. Doing that kind of collision detection here in vector space would be very complicated! And without it the pattern loops back on itself and doesn’t look as good, and definitely doesn’t match my notebooks:
The solution for this was very simple collision detection. The final program keeps tracks of which squares are “occupied” and breaks branches any time they’d collide.
I uploaded it to my stash if you want to play with it. As an added constraint I wrote everything by hand in one single-file html page.
The one problem with the tool (besides being bare-bones) is it renders the output as an SVG instead of a bitmap on a canvas. This “feels right”: they’re lines, might as well make them vectors. But on high values browsers have performance issues rendering very large quantities of DOM elements.
I’d rewrite the renderer to draw to a canvas instead except I like the idea of the infinite SVG canvas specifically. The point was to escape the edges of the graph paper, remember?
But I’d already abstracted line drawing so the line coordinates were stored in state frames, so it was easy to write an alternate renderer using the canvas API.
SUPERHOT VR released in 2017.
Then in 2021 the gameâs entire story was removed.
Whatâs happened here is fascinating, but somehow nobody has talked about it seriously.
Because itâs censorship in a video game â a topic the gaming community cannot be normal about â it is nearly impossible to even think about the issue through all the noise.
Anyone aware of this topic at all seems to be screaming about Woke, or complaining about games becoming âpoliticalâ, as if âpoliticalâ is just a switch you can throw to make media worse.
Wikipedia summarizes the discourse as:
The choice to remove these games led to the game getting review bombed on Steam, with some users claiming that Superhot Team was giving in to âsnowflakesâ and others believing it to be a form of virtue signaling.
But this is insane!
A historically significant VR game â one of the greatest of all time â had one of its defining characteristics removed, without any explanation or replacement.
This isnât some Stellar Blade fake controversy, something weird happened here.
There are real, understandable things to object to, and none of them are right-wing culture war buzzwords.
After the demo received positive feedback, SUPERHOT went to Kickstarter (after they got Kickstarter to support Poland) and was successfully overfunded in June 2014.
(With the success of SUPERHOT, the Blue Brick company seems to have been abandoned.)
SUPERHOT (2016) was then released in February.
Last week, looking for a game to play to wind down at night in bed, I went through my backlog of unplayed Steam games and filtered for something that looked relaxing.
I fished out Gris.
Gris is intriguing, atmospheric, and gorgeously animated. Itâs a beautiful indie title.
And I kinda hate it?
I played The Last Clockwinder last week, and it changed the way I think about production games.
Factory games
The Steam page describes The Last Clockwinder as a âVR puzzle-automation game.â
I like production and automation games. But Iâm used to FTB and Factorio and Zachtronics and Universal Paperclip. Iâm used to the look automation-production games gravitate towards.
Factorioâs top-down design invites you to create sprawling factories that completely overtake the landscape. What little detail there is in the landscape is purely mechanical; resources you can extract and process, or enemies you have to either avoid or exploit for more resources.
Positioning the camera to give yourself a comfortable view of the structures you build and the items youâre manipulating leaves the actual character as a tiny focal point; more of a crosshair than a character or even an avatar.
Factorio scales enemy difficulty to âpollutionâ but this is always designed to be overcome, not be a legitimately limiting factor.
In Infinifactory, youâre captured by aliens and forced to engineer efficient factories in exchange for food pellets. Each puzzle takes place in a set of stark, desolate environments. Itâs first-person, but you never directly interact with another character; the most you get are notes about how much your predecessors hated it.
As soon as you solve a puzzle, youâre presented with a histogram: how could you optimize your solution further? Could you be faster? Use fewer blocks? Are you better than your friends, or falling behind?
Universal Paperclipâs minimalist HTML interface makes it a graphical outlier, but the bare-metal minimally-styled HTML invokes a sense of brutalism that reenforces the gameâs theme of efficiency in the pursuit of a goal to the exclusion of everything else.
And then thereâs The Last Clockwinder.
The Last Clockwinder
Itâs undeniably hard sci-fi. The first thing you do is arrive in spaceship. Throughout the game youâre on the radio with your friend idling in orbit, and the whole story revolves around interplanetary travel.
But then the first thing you see is a tree-patio with a hammock. It almost feels like a treehouse. The purpose of the tree is archival and preservation of rare and culturally significant plants; itâs a reserve, and thatâs what gives it such importance. Inside the tree is the one room you stay inside for the entire game, and itâs a living space.
I donât like âeventsâ. I donât like it when things are limited with requirements of spacial presence and time. I donât like experiences that only exist in one moment and then can never be relived. I donât like ephemera.
I prefer things. Toys I can play with, tools I can use, books I can read, movies I can watch, all at my own discretion. I have agency over my things. The actual lived experience from occurrence to occurrence is always different, of course, but the externalities can be repeated. I love being able to preserve the essence of a thing.
Itâs one of the reasons I like computers. Or maybe itâs a psychological trait I developed because I had access to computers growing up. It probably is, I think. But either way, I love the purity of digital storage and interface. I love having an environment where experiences can be preserved and replayed at my discretion without my having to make any demands on other people.
And so thatâs one of the reasons I love video games. Their mechanics are defined and can be understood and mastered. Their levels are defined and can be understood and mastered. Despite the extreme rates of âchurnâ â video games go out of print much faster than books or other physical media â the software is digital, and can be saved, stored, and replayed. I can look up the flash games I played as a kid and replay them, exactly as they were, and understand myself a little better for it.
Of course there are exceptions; itâs impossible to have a multiplayer game without an implicit demand that other people play with you. When an old game âdiesâ, itâs often not because the necessary hosting software is being intentionally withheld, but that there just isnât a pool of people casually playing it like there used to be.
Thatâs still a loss, and itâs sad, but thatâs an unavoidable reality, and itâs not nearly as complete a loss as a one-off event being over.
So I donât like when games force seasonal events on me.
Limited-time events introduce something new, but they also necessitate the inevitable loss of that thing. And that assumes you were playing everything from the start; events introduce content that can be âmissableâ in a meaningful way, so if youâre werenât playing the game at the right time, even if you own the game and finish everything you can access your experience can still be rendered incomplete.
One of the things I like about games is that theyâre safe, and the introduction of time-based loss compromises that safety.
That constant cycle of stress and pressure to enjoy things before they were lost is one of the main reasons I stopped playing Overwatch. I realized the seasonal events in particular werenât good for me; they turned a game that should have been fun into an obligation that caused me anxiety.
But Iâve been thinking about this lately not because of Overwatch, but because Splatoon 3 is coming out soon. Splatoon isnât nearly as bad as all that, I donât think itâs deliberately predatory aside from Nintendoâs standard insistence on denying people autonomy. Splatoon 3 invokes that âpeople will stop playing Splatoon 2â loss, but even before that, Splatoon (a game I love) left a bad taste in my mouth because of its events.
I went to my old university today.1 I wanted to use the library.
It was a strange experience. There were things about my time there I missed, but I didnât miss my time there. There was too much wrong. Ways I didnât fit.
I looked around. It was passing period, and there was a throng of students coming and going both ways. The pavement was nice, new construction. People were laughing and talking and introducing each other.
Was I wrong? Should I be missing this? There is still so much good here. So I asked myself what it was I saw, exactly. And I looked out.