And now it's starting to feel real...

I’ll spare you the time. This is about me, and not my game. It’s some thoughts on the two years I’ve spent building it.

It’s still going along, it is not cancelled, and very recently it’s in a sort of “playable” (but not presentable) state.

There’s no details about game mechanics or anything like that here. There’ll be a much prettier announcement in the near-future about this.

All I’m willing to say at the moment is that it’s a home client. The gamemodes are all VSRGs.

You could view it as a competitor to Etterna/osu!Mania/Quaver/Stepmania/Beatoraja/etc. etc. It is NOT a BMS client, nor an .sm client, or anything like that. It is its own thing, standing on its own two legs.

OK. That’s all the game information I’m giving out. The rest of this post is about me, and not my game.

I.

It starts the same way all of my other projects have started. Because I’m frustrated. I mean, Tachi started because I thought it was ridiculous I couldn’t find out my 12 folder stats without a spreadsheet.

I’ve been making things for rhythm games since I was 14, but they’ve always been things for rhythm games. Vestigial, orbiting things; they solve problems people have, but always operate outside the games themselves.

While building all these things, the elephant in my mind has always been the games themselves. Let’s say I’m working on Tachi, and I want to do something with a game as simple as “find out what scores the user has”. I’m frequently met with complete crap output from the game.

I mean basic things: Not being able to know whether a score used autoscratch in LR2. You have literally no idea what charts you’re working with in stepmania. The data you get from the KONAMI IIDX CSV is so poor it should be considered a crime.

So much of my time and so much of my effort has been spent here.

It should come as no surprise that I would spend a lot of my time daydreaming about a theoretical “good” rhythm game client. You know, one that would just click with all my tools, and I wouldn’t have to fight them.

The 5 years of daydreaming – about how I would do things in fantasyland – gave me a lot of time to properly think through what I truly wanted and how I would do it. I’ve had the benefit of seeing many games through my career. I feel I know where the poor engineering is, and what features would massively improve the game.

Yeah, right, well, that’s all well and good, but daydreaming is daydreaming; vision without action is hallucination, or whatever.

Plus, I don’t even want to make a rhythm game. I want to make infrastructure. I want to make doohickeys, I want to make visualisers and tooling and content and events and…

Look man, if I knew what I was getting into, I wouldn’t’ve started.

Really then, It’s a good thing I didn’t know what I was getting into.

II.

On Sunday, March 22nd, 2023 (That’s over two years ago), I sat down at my desk and made a git repository.

At this point, it was just called chart-tools-rs.

It’s the same impetus as ever. Frustration.

Why are rhythm game chart files so fucking shit?

Why is a question as simple as “what chart is this” so complicated and miserable?

Why is parsing a herculean effort?1

This was a relatively small task. I wanted to make my theoretical fantasyland “good” chart format. One you could just trivially parse, understand, and go on and write doohickeys for.

I work on it after my job, and spend about a week on it. Most of the design decisions have had so long to grow in my mind, it practically flows out of my fingers.

By April 4th, 2023, my work is done. I have my brilliant chart format. It’s got all these sexy tests, and I’ve got working parsers into it from stepmania.

That’s everything, I can pack my bags up and stop here and go back to uh, Tachi work. Or playing BMS or something.

This thing wasn’t completely useless. I had a parser for .sm files that would convert them into this format, but it was sort of just to have test data.

And this format wasn’t a subset of .sm. There were features in here that weren’t in SM. Hell, there were features in here that weren’t even in any rhythm game!

Despite all this, I adamantly had it in my head that I wasn’t going to make a game. Just a chart for a game that didn’t exist, with features that nobody could use.

My work is done, my dream chart format exists, it works, but I had all these new features that no other game had implemented.

Um, right. I have dream functionality that I can’t edit, that I can’t see, and that I can’t even play. Great.

III.

The commit that starts my chart editor happens on April 5th, 2023 and hilariously just reads:

“feat: who knows”

That’s it. Utterly nondescript, and totally ominous. Despite all that, it’s a totally honest commit. “Who knows?” Good question! What am I actually doing here? I didn’t know!

I’m writing a chart editor, sure. But it’s just to visualise some things I’m playing around with. I just want to see the work I’ve already done. Work that is, most explicitly, not a rhythm game.

Plus it’ll be a good exercise. I’ve never really written an application before. After I’m done toying around, I can pivot it into a stepmania chart editor.

Oh and while I’m here I guess I can… well… I have all these ideas too for my ideal chart editor…

It takes a couple days. You lie to yourself that you’re just writing another tool for another rhythm game. Sure, this time it’s bigger – it’s a whole chart editor and a brand new format – but it’s still just a tool, right?

A couple days of work pass and I know it. I have absolutely no desire for this to be just another tool for another existing game. I’m now doing things that aren’t possible in other games, and I can’t deny it anymore.

This is going to become its own game.

IV.

When I started Tachi, I didn’t really know shit about programming. I knew what I wanted my score tracker to look like, I knew what I wanted it to do, but no idea about anything else.

I sat down, almost every day for a year straight, and just fucking pushed through it. If I didn’t know something? I was going to learn it. I would carve my way through this and come out with something I was proud of.

The same arrogance drove me. Fuck it. Yeah, I don’t really know Rust. I don’t know how rhythm games internally work. I’ve never even rendered a triangle before. But I built all this score tracking stuff from nothing and I feel pretty damn confident in my ability to program.

So how hard can it really be? I’ll have a demoable game by the end of 2023 right? That’s like, 9 months away. And it’ll be sick, like, real tight. I’m going to put my head down and come back with something I’m proud of.

I work on the editor for a month, get some basic things going. Yup, great…

At the same time as this, my life gets pretty shit. I won’t go into any details but I decide to stop getting drunk all the time2.

This is a brilliant decision for two reasons. Go ahead and put a !! next to it on the PGN.

One: I’m no longer programming drunk out of my mind most of the time, which is something I did for Tachi. Not being drunk actually makes you write better code.

Two: The first few months of sobriety are fucking miserable, and I now needed something, anything, to completely sink into and distract myself with3.

V.

It’s not like I wasn’t passionate before, but before this it was an experiment I was playing around with.

Now I’m locked in completely. I mean, I’m basically psychologically obligated to work on this. Cuz it’s like, good for my mind or something.

The weeks bleed by. Rendering, A skinning system, Image loading. Audio playback, seeking around, changing playback speed. Threading workloads, BPM detection, Finding out the ArrowVortex creator wrote the fucking state-of-the-art paper on BPM detection. Sqlite, Interfacing with Sqlite. Finding out that ArrowVortex is actually - not a joke - the best BPM detector in the entire world4. Metronomes. Networking…

It’s not like I’m re-using an engine either. The game is absolutely not built in fucking Unreal or Unity. I ended up having to write my own game engine from scratch, just to get the low-latency I needed.

The list goes on, and on, and on. 6 months later, and I have something usable, but it’s not “good”. All the things I thought would be easy were hard, and all the things I thought would be hard would be near-impossible.

(Rant)

No amount of web dev can prepare you for how hard game development is.

That’s not to say web dev is easy, but the hard parts (frontend, design, UX) are things that almost all webdevs are terrible at. Web devs are also pretty bad at the easy parts (backend), too.

After two years of doing this, web development now seems so fucking easy. All the hard things are done for you, and web devs still manage to fuck it up, because they’re colossally incompetent.

They are basically unthinking monkeys who, when faced with a problem, reach for an appropriately advertised pre-built tool that solves their problem. This is why they pick Next.JS. This is why they pick MongoDB. This is why AWS makes billions; I’ve never seen a webdev write a single fucking benchmark before “optimising” something.

But whatever.

VI.

Getting the editor from “usable” to “good” takes even more months, and one day I look up at the clock and it’s April, 2024, a whole year later.

Fuck. At some point I need a game right? Fuck?

April 27th, 2024. The commit that starts the game work just says:

feat: game work begins

It’s been one year and one month since the first commit. And I hadn’t yet started on the game. My editor wasn’t finished either, but I needed to stop putting the game off.

Truthfully, I hadn’t expected it to take nearly as long as it did to get the editor that far along.

I think in some way I was legitimately scared of starting the game part of the game. It sounds silly, but it felt like the point of no return. Of course, this is despite the fact that I was already 1 year into development.

I created the game/ source folder, and started cannibalizing some general stuff from the editor/ folder. I’d ended up with a lot of utilities and stuff that could be reused here and there, so I wasn’t starting from scratch. I told myself that eventually I would split the common things between the editor and the game into a like engine/ folder.

That never ended up happening. I kept cannibalizing stuff into the game until eventually, on November 10th, 2024 The game cannibalized the editor itself. The editor became part of the game, and the editor/ folder – which I’d spent a year of my life in – ceased to exist.

Most of the work I’d just spent a year on actually ended up nowhere. It either wasn’t needed anymore in the game part of the code, or was obviated by other game engine stuff I was doing. I’d pretty much spent a year of time only to throw away 80% of my work.

The lua plugin engine. The old skin system. The sheer amount of failed GUI code. All of these things ate up months of development time before being removed and redone. Despite this, they weren’t wastes of time.

Probably the root cause of my underestimation of how long this would take, was that I didn’t take into account just how much would be “thrown away”. What you do might be crap, but you won’t really know it until you’ve done it.

I wish I’d known this: if you’re going to tackle something large, start on the scary unknowns as early as you can. This gives you the most time to fail, learn and retry.

In the industry, the optimistic term for this is “Iterating”.

VII.

I would wake up, I would go to my 9-5. I would come home, and I would work on my game until I fell asleep. I would do this. I would do this every single day until last week, and it was fucking miserable.

What they don’t tell you about game dev is the most of the time your game feels like complete shit. That’s not to say my game was shit, but every day you’re forced to recognise that your game isn’t where you want it to be. You couldn’t show it to people without being a bit ashamed.

I am 100% convinced that most AAA games feel like Sonic 06 for almost all of their development. Infact, I’m now convinced it’s a miracle that AAA games come out not feeling like Sonic 065.

I hated this fucking crunch, it was killing me, but the whole time I got through it because I couldn’t stand the idea of failing at all. How could I hang this project up and then still go to meetups? What would I say?

“Yeah man, I know I spent 2 years working on this, and nobody ever saw any of it, but I gave up because it was kinda hard… >.<”

FUCK. THAT.

I did not suffer in those previous 5,000 hours just to give up in the future. What would past-me think if he knew I would give up? Knowing he’s toiling for absolutely nothing? Fuck that. This may or may not be good life advice. I don’t care.

VIII.

Today is August 8th, 2025, over two years later from that first commit. From an outside perspective, literally nothing has happened for two years, except for the fact that I look really lazy with Tachi work.

This week is a special week.

The bad news, I lost my job, again. Or rather the company is going bust and I won’t be employed in a month or so. I should now go to job boards, and network, and have to look for “Junior” jobs. The market isn’t even really hiring anyone because of the AI thing (LOL).

I got home, I opened LinkedIn and then realised I really don’t care anymore. I’m not a “Junior”. I’ve met Juniors, and they put API keys in the frontend and ask ChatGPT how to write loops. I can’t be arsed to go through this stupid, dehumanizing process again at the moment.

The good news, is that the game finally started to feel real. The animations are pretty, the game mechanics are good, and the game engine itself feels brilliantly crisp.

I had a proper session, in my game, this week, and it felt brilliant.

There’s still mountains of work to do, but the hard, scary things are done now. I’m no longer worried in the slightest that the game won’t come out.

There’s polish needed everywhere. Some screens are still debug screens that look Etterna-tier. The network code isn’t very good and I’m pretty sure if you have no noteskins the game crashes. All that will be sorted, of course.

There’s also the question of having charts. There’s still a lot of charts I have to write before the game has enough content to get off the ground.

The game feels excellent. I’m happy, and if I’ve got no job, I’ve now got the time to close this out.

2025.

So what’s the plan from here? I’m playtesting parts of the game with some friends. When things are ready I’ll start announcing the game, and making nice blog posts about the features and design choices.

Relatively soon, definitely this year, and hilariously - before osu!lazer comes out6, there’ll be public demos. Where those’ll be is anyone’s guess. It might be at my house.

A public release will probably be early next year. Probably. I’ve been wrong on my estimates a lot, but now the hard bits are crossed out.

I wanted to write about this because it’s been the past 2 years of my life, and despite that (unusually for me) there’s been absolutely no public output. I’m not lazy, I just took on a ridiculously large project. It’s basically the project.

But now all I have to say it’s that it’s finally looking great.

c u in 2026.


Footnotes:

1

Parsing SM files correctly is 100x more difficult than you think it is.

.

2

As of writing I am 2 years 3 months sober. I’m pretty proud of this.

.

3

Here’s another amusing story. Since I was looking for basically anything to do that wasn’t drinking, I was out with a friend and was like damn, I’ve heard about this “Infinite Jest” thing. I have nothing better to do but get this unbelievably long novel. Why not? I had literally no idea what the novel was about, I just wanted something to distract myself with. This might be the most serendipitous occurence in my entire life. Part of me considers this an actual miracle. Another part of me knows that it sounds unbelievably soppy and trite and sincere and lame and self-absorbed to talk about enjoy “Infinite Jest” but luckily the book is about that too, so fuck you mang.

.

4

It is absolutely unbelievable how technologically advanced ArrowVortex is. There is nothing else in the entire rhythm game scene that is as well designed, polished, and half as intelligent as that project. You don’t notice it when you use it, but dig into how things work, and you’ll realise that it is an actual work of fucking genius. It is probably the only rhythm game tool that I think is legitimately good.

.

5

Although modern AAA development is giving this sentence a run for its money.

.

6

And don’t give me the bullshit that osu!lazer is already “out”.