Hello all and welcome to another Month in Review. Every month is a new bag of emotions, and this month was so dense that I honestly forgot I do these things every month and that we, in fact, were at the end of the month again.
To tutorial, or not to tutorial.
Started off hot from last month with the “O3DE Development Tools” vscode extension. Yes! A brand new vscode extension that serves to open up all the O3DE engineering workflows I undertake on the day-by-day. I’ve spent months with a grating guilt to figure out an even shorter version of my setting up vscode for O3DE tutorial, now with all the workarounds and simplifications I’ve struck since the last video. But, just like any tutorial, once a user spins off and can’t get the same results, the massive hour long tutorial becomes useless and gets people no closer to easy drop-in O3DE development. So why do another 2 hour tutorial when I could spend that time making the tool that makes 1 hour and 50 minutes of that tutorial unnecessary? Wellp, it finally struck, and I dove in headfirst. Like any of these things, I had no clue how to tackle any of it. How to test it, how to actually add the thing to the marketplace… A real fresh learning experience.
But y’know what? I totally wiped out all the manual and tedious workarounds I had to employ to work smoothly and reliably. It completely eclipses all that work tenfold. Being able to make direct dedicated solutions to all the little nuances that go into O3DE is soo soo much better than having to wrestle some loque warm solution together that has 30 unspoken undertones that will just confuse any other user but myself. It’s a miracle.
I will never look back. For every issue or new complex workflow, we can now simply have dedicated tooling to satisfy exactly it, exactly where it is.
VSCode Extension: https://marketplace.visualstudio.com/items?itemName=GenomeStudiosInc.o3de-development-tools
Open VSX: https://open-vsx.org/extension/GenomeStudiosInc/o3de-development-tools
Back to the grindstone.
Started with some high-demand work coming in the wake of the latest GS_Core work: While we didn’t get finished with Core, I broke off to work on some much-needed GS_Audio work. Our planned game project is heavy in Audio work, a critical pillar to the whole experience, so I wanted to really take care of everything lingering before we start committing to half-realized work and need to rebuild the work we already put into place.
And by we, I mean an actual Audio and Music Engineer! Which also means the work also needs to be accessible in an intuitive enough way that can actually allow a designer to work with it.
So I tackled a medley of things. To add a few more knobs to the mix, I worked out how to integrate SoLoud effects into the Audio Event Graph alongside the more primitive MiniAudio filters. It’s way cooler to have them in the mix, as the filters are really more… post-processing, boilerplate. This ended up introducing a really fun one: Synth Effects.
This particular effect allows you to set a bunch of variables that feed into a lo-fi synthesizer and output all sorts of wild zips, pops, doots, and whatever else you can muster. Add a website that allows easy authoring, and you can get some cool sounds together!
This also led into bringing in Steam Audio. There was a laundry list of goals for GS_Audio, and at this time, as we were trying to make a cut of the Audio tooling to use in our game project, it seemed time to just rip the bandaid and get as much as possible in, with the goals to refine the entire tech stack over time. A messy way to do it, but things aren’t always pretty when you’re scrambling non-stop to prop up your business.
It came together pretty okay for a start! Steam Binaural processing adds “air absorption” to a sound as it falls into the distance, something you don’t know is a factor until you see it compared to the linear, or logarithmic, decay of the sound purely in volume. It makes for a noticeable suppleness that had me feeling like I was walking the streets of City 17 in Half-Life 2 again.
This led into the more complex layer of Steam Audio, the actual audio simulation environment. Like Physics engines, the Steam Audio geometry system actually needs to process the environment based off audio colliders that block off sound or reflect it. Send rays, or cascades, from the audio listener to the sound sources and alter the sound based off these properties.
It’s really cool, but definitely a super complex thing that can’t just be tossed together. I connected the wires, but the nuance is definitely unserved. It’ll have to come in time.
Actual feedback? No way.
Soon after, we were able to actually demo our top-secret project to a colleague who is actually familiar with O3DE and the ecosystem. It was a resounding success and couldn’t have gotten us more hyped to bring this project around and get it launched. It’s one thing to know its impact and believe in it enough to work the project all the way through, but it’s a whole other experience to see someone react to simply colliding with it where it is. Just blind to wide-eyed. It was a great experience and has us very excited to ship.
Quick tangent to some papercuts.
Stirred up my work very briefly to tackle some O3DE 1000 papercut tasks I had lingering. This was the final stretch for a handful that were in need of some tiny corrections and updating to the most recent state of the engine.
With that, I tackled pretty well every paper cut. Certainly the most impactful and concerning. The rest are some preferential things and upkeep things that don’t impact the day-by-day really. Stuff I’d love to get off the docket, but this month has definitely been straining for my time, and I feel with the state of the 1000 ppc’s I’m pretty good to let them lie. So cool considering there was a time, not too long ago, where they were glaring issues that have sat there unattended for so long. Quickly becoming faint memories to a far more stable and concrete engine. Always a cool feeling to know how far the tools have evolved even just this year.
Super quick tangent to some extension work. I swear!
The funny side effect of making the vscode extension was that now I wanted to use it. So immediately as I was working with it, I ended up having to pivot to deal with some issues that cropped up, stopping me from my regular work. Oops. This is exactly why game projects end up locking their engine and tech REALLY early and don’t rock the boat with new features, tools, or functionality.
That being said, it was minor work and serves both our development and everyone else’s. A great tradeoff for the small amount of work thrown in throughout the month.
Okay actual work again, no more surprises.
One of the aspects of the GS_Audio work I had been tackling was getting our basic Audio Events system expanded. Since I leapt immediately up from the base implementation towards Audio Graph implementations, I left the Audio Events in a crude state. The value of these is that they are lower cost and simpler to use. Meaning that for quick throw-aways or very simple audio implementations in a system, these make more sense than setting up an entire audio graph, holding it in memory, and running it regularly, just for a simple “doot” or “bleep”.
This allowed me to tackle a long-planned feature to that base system: binding the events to effect nodes that relay into the final volume mixers. Now, rather than having a small few attributes to the audio event itself (pitch) and otherwise playing directly to the volume busses, you can finally link a chain of filters and effects, design an event to play through it, and have those effects chains feed naturally into the final volume busses.
This means, alongside the Steam Audio implementation and SoLoud effects, our base audio events system is now fully capable of running all the basic functionality enabled in MiniAudio.
Surprise! All your server systems are unverified and can’t be used!
Waaaaat?
Yeah, that was a doosie and terrifying. I try to connect to the server remotely like I always do to handle server things, and all of a sudden I’m locked out. My services are insecure, and there’s no using them otherwise. Quickly, the other services start blotting out the same.
Turns out the “Let’s Encrypt” security check service was unable to refresh the certificate. Because of that, all my services, one after the other, were expiring within 15 minutes of each other with no ability to recertify.
INFRASTRUCTUURE! -shaking fist-
After a panic, I connect my equipment directly to the server and start problem-solving. It turns out that I was having a network connectivity issue, and so Let’s Encrypt was unable to be called and would just time out. After that, there’s nothing to do but run out of time, as it ended up doing.
With some fussing and IT tedium, I managed to get everything updated fresh and hopefully stable to not do this again. A perfect homage to how no project can anticipate how long it’ll be to complete, since something like this can come out of nowhere, lock up your infrastructure engineer at least, let alone service blackouts that may outright halt other developers, and have to scramble to resolve this to liberate your team and your development time.
Thankfully, it’s only me that was impacted, and I managed to tackle things before our repositories went dark. But this can rapidly cascade and cost a great deal of time.
I like to appreciate at these times that the server was less stable, I was less experienced in infrastructure, and through this we have a stronger foundation to our infra, and I am growing in my capacity and familiarity in these matters.
And it turns out, the reward in tackling these things and being better for it is honestly pretty cool. I never in my life thought I’d find network/server infrastructure a rewarding and enjoyable aspect of my career, but here we are.
This is something worth reflecting on.
I’ve talked about this before, but it’s always always always worth reiterating on.
If you have the intentions to run a videogame or media studio. Really any studio at all. You have to want to do far more than making games.
Improving your workflows through servers and infrastructure; tackling necessary, and expensive, legal concerns; having sync meetings with your team to gauge morale, hurdles, and blockers that are being unspoken; Writing months in reviews when you’re in an otherwise terrible mood; making product websites; documentation; handling branding and graphical design; rallying colleagues and collaborators to work on projects, onboarding them to your infra, coordinating tasks…
The immense overhead of actually running a business with success as an actual tangible goal is unparalleled.
The truth is, too, that these overnight successes. These titans of game development that went in and made a game, captured lightning in a bottle and made it big. They may not have had to do these bossly things to get there. But you can bet that it was a debt that had to be paid rapidly after their lightning in a bottle struck.
You’re suddenly inundated with money, reviews, press trying to contact you, haters that are sending you death threats… And all of a sudden you have to pay that due all at once.
Accounting becomes difficult when you’ve suddenly made 200 million dollars overnight. Handling your Discord server when 6000 people suddenly join overnight. Keeping up with Steam reviews and user feedback in order to not appear like you’re ignoring your community…
Stuff gets crazy and messy quickly. In fact, the Flappy Birds developer left game dev and shut down flappy birds because of exactly this.
Regardless of the scale of the success, the business parts end up taking part in the mix whether you like it or not.
So, as many mentors and masters advise. Really reflect on if you want to make a GAME BUSINESS, or if you simply want to make GAMES. The routes to these two conclusions are massively different, and you may not be walking the route you should be.
It’s become increasingly clear that I am very excited and interested to make a Game Business. Making games is the love, but enabling it into the future is something I want to do too. We’ll see how that comes through in these coming years…
Leading off from this server certification collapse.
I ended up tackling an assortment of little things.
Class Creation Wizard was failing to bind to the shipped O3DE PySide Python library. It turns out it exposed an issue that would affect any PySide-enabled tools/utilities in the O3DE application catalogue. Thankfully, the Wizard served as a canary in the coal mine and exposed that issue early.
Fixed it, and it looks like Class Wizard is 100% in there now. Ready for the upcoming release! Very exciting.
I next tackled an assorted mix of vscode extension issues and needs. When you see actual people have downloaded the utility and issues arose, it definitely sparks a bit of an urgency to tackle them and not disappoint your 3 users.
Managed to get a big pass through and in, including very necessary UX upgrades as features grew and the complexity of the tooling grew with it.
I also got it shipped on the Open Source vscode marketplace OVSX at this time. Definitely want to support anyone’s ability to use the tool and improve their O3DE development process!
I swear I’m not going to pressure myself to work on this and support it every day and night forever. I swear!
On to Team Onboarding, eugh.
Like I alluded to in my Game Business spiel, I had to tackle team onboarding with our infrastructure. It’s easy enough when it’s one person, and they’re already a software engineer, something else when you’re working with designers and artists.
This provoked me to get back to the habit of writing internal guides for these sorts of things. It’s not worth reinventing the wheel every time you get new team members into the fold. Also far better to spend a bit of time to refine the guides than to not update them and just use some unspoken knowledge of how far off the docs are from up to date. Docs are only as good as your maintenance of them.
Surprise! Reviewing your docs are wiping them blank and then saving them wiped!
WAAAAAAAAAT?!
Yeah, so as part of that infrastructure fix, I took some time to update some of our services, one of which was our DocMost. I didn’t realize I was updating it to a working source, not a stable release, and I came up with a bug. A very sinister one. Whenever you load a page in, it immediately clears and syncs that cleared file back to the server.
I had thought I would have to redo ALL my guides I JUST wrote because of it. Thankfully, there was a history to revert to.
But the history doesn’t matter if, when I load it, it gets wiped and saved right after. AAAAAAAHHHHHH.
Managed to roll the docmost version back to a stable cut, that preserved a big library format migration and systemic changes that had come with the bleeding edge. Was able to get my docs back… What a relief.
Lesson learned? I hope so. A nice side effect is that I’m now able to edit the source code of docmost as we have features we want to explore within the system. Nothing I wanna do now, but definitely another cool place where we can maximize our workflows.
And we find ourselves now at the half way point of the month.
Yeah, wow. This has been a chaotic and stressful month. Gainful as always, but really taxing.
Surprise! Testing your audio tools exposed that the Audio Graph is not working correctly!
Ahaha, a very reactive month to say the least. This wasn’t so much a crisis as just annoying. The migration up to Qt6 that came through the pipes of O3DE created some issues with our graph implementation. It was certainly not an established and stable foundation from the get-go, so it came as no surprise that an issue could have arisen from such a drastic change.
Annoying though. So I tackled that simple enough. The graphs themselves were fine.
Then I found out a mechanism, pretty core to the value of the graph system, was actually not working remotely like I had thought.
The Audio Event Graph has multiple ‘entry’ nodes: Start, Loop, and Finish. This is meant to allow external playback controls. Like looping and a “play out” mechanism that can be used instead of the hard stop.
The benefit, though, was that one was able to chain the Loop or Finish links into some or all of the same nodes as you used for Start. If there were overlapping filters and layers to the playback, they were meant to easily link on demand, merging the filters together instead of needing to make unique ones for each pass.
Nope. That was not happening. When the data was being flattened from the graph into the playback data, that link was not happening. Which came out in testing I had taken on when fixing the audio graph and implementing SoLoud effects.
Less a crisis and more a relief that I ran into the issue now, and not when getting more serious into audio implementation in our projects. It’s one thing to throw together sandbox prototypes as quick and raw as possible to proof out the functionality at all. It’s a completely other thing to actually sit down and carefully put it to the test.
A very strong justification to use our own tools for our internal projects before shipping them out to potential clients. Use Testing is not the same as Proofing.
Here, we finally shifted gears a bit.
We’re in the final stretch of our project and need to actually start considering what a true release needs. Some of the needs have been floated and lightly tackled in the past, but at this point we are now in need to knock things off the list and exhaust all our angles.
I got important information in to the Lawyer to put our End User Licence Agreement together. Prompting that whole process seriously and clearly… and moving towards the eventual cost of the task. Lawyers expensive.
We needed all the proper pages for branding and licenses and all that stuff brought into the websites. With a goal to actually fill them once we’ve gotten the final content for them all.
This also instigated a clear effort I had to undertake to get the website far more up to speed. Not that the substance of the site was not there, but that now we have to max every possible piece.
I tackled upgrading the photo carousels to feel a lot more professional. I sat down and grilled our “messaging”; this is the actual wording and phrases you are using in tandem with your colours and logos to secure a full and complete image of the product and its functionality.
Thankfully I have a design education, so actually working through these things, while tangential to actual development, is something I feel really good about bringing together. When a design is finally executed and satisfying the many things one factors into that design; be it web, docs, product branding, or whatever; it’s also a very satisfying accomplishment.
“Legitimization” has been the name of the game.
Legitimization. A loaded and perhaps a little pretentious word. But it’s a very critical one. As you’re trying to position yourself as a game studio, you can certainly press the passionate creative side of things. That is certainly the heart of what you’re doing. But, and especially these days, you need to actually put out measurable indicators that SHOW you’re not just a random arteest, but rather prove that you’re capable, conscientious, and quite literally knowledgeable in all the factors that go into the work you’re saying you’re doing.
It’s not by accident.
One of the aspects of this is ACTUALLY knowing the factors that are necessary in your project and working goals.
I can’t brag that I’m perfect at it, but I’ve definitely got experience in many ways to do things “the right way”, whatever that means.
You already see my talk of legal matters, branding and messaging matters, really bringing out the final high-quality polish into the work. But there’s always more things you can bring into the fold.
One of them? Usage Metrics.
In my past, focusing on market outreach and promotion for the Some People’s Kids comic series, I had actually implemented Google Analytics. Usage tracking for your site and links to actually see what people are making contact with, what parts of the transmedia experience they’re consuming – comics or interactive site – and finally what parts and for how long?
If you’re actually talking about a release, one that you’re going the full mile for. You should really consider the granular details of the launch itself and the ongoing maintenance and support you will be doing thereafter. Knowing how much traffic has gone to the website, how the launch went, and the continued traffic and usage thereafter is a very good thing to have if you want a true record and scale of the results of your very hard work.
Enter Umami Metrics System
“Google, how do I get usage metrics without using Google Analytics?”
I didn’t actually know what was out there, but I thought that perhaps I’d be able to get some sort of free online service, ideally one that’s not from the US.
What I didn’t expect was an open source one that you can self-host with a server!
Umami: https://umami.is/
INFRAAASTRUUUUCTTUUUUREEE!!
Without a second’s pause, I just HAD to set this up. Usage metrics that aren’t feeding into the baby-crushing machine? I can get metrics from my things to us with no middle man? No selling of information?
I love it. Lo hoo hoove it.
Came together simple enough; it’s a low cost system that only really needed some processing power and a database. I ended up piggybacking it with one of my virtual machines that had exactly that already.
With some simple propup in your site’s boilerplate, you can send basic usage metrics to your service on a per-website or per-link basis. It has some sort of “heatmap” special functionality that takes some extra setup; A little too much for our needs right now, though.
What I didn’t think of when I first looked into it is that you can actually set up metrics in a “Single Page Application” format.
By setting up your own events and data around those events, you can track “page” navigation even if the actual application isn’t refreshing itself between each “page”, as it’s obviously being changed by programmed systems and all that juicy systemic stuff that goes into app development.
This basically exhausts all our needs for basic metrics tracking to support not only our soon-to-launch project, but all our sites, tools, and services moving forward.
Relating to Game Releases
This sort of tooling is actually incredibly high value to a game launch as well.
A common thing in business development is what’s called a “funnel”. You’re basically drawing users in from a wide-reaching scope, and slowly stepping them through the funnel until you get a “final” set of users that stuck through the funnel and are actually mobilizing your “call to action”.
The call to action is the thing you’re actually asking them to do with the effort you made to sway their interest in you.
For a lot of game projects, this means:
– You have a game website with a super easy-to-use link.
– You boost that link in all your media. Giving a controlled place for anyone to come to.
– This tight webpage funnels people through the interest your project covers, then RAPIDLY calls them to wishlist on Steam.
– That link to steam is a tracked link.
You now know how effective your funnel is. You can see the traffic entering the site; this can be from OTHER tracked links, like from a youtube trailer or facebook link. You see things like the bounce rate: who came in and left on the same page. And then you see how long people were on the page, and how many got the final “click through”.
Whether you’re setting up your outreach directly to Steam or through this self-owned liaison is up to you, but the simplicity of the domain name: “game.com”, and the ability to control every aspect of the content of the site gives you some very unique strength over dedicating your efforts only to Steam.
You also get Search Engine positioning for your game, and can update the site whenever, however you need. Especially when you’re referring to your traffic metrics that reveal nuances in how people interact with the page.
Maybe not something that everyone needs. But these sorts of things are professional and serious ways to build up a foundation of understanding and deliberacy in the work you’re doing.
You are expected to keep metrics of your social media for investors. You’re supposed to keep metrics from your Itch pages and your Steam pages, etc. Why wouldn’t you formalize this need and ensure you have metrics through everything you’re doing? It speaks to the details you’d otherwise be ignorant to, and allows you tangible information that can further prove your capacity to accomplish your work intentionally.
More deliberacy? Actually use your tools.
This probably comes off dumb, but in the franticness of working on a business like ours, we propped up our server services to the barest level of realization. There are plenty of cool things and features one can use, but that would have eaten more and more of my time.
Wellp, as we continue to be more public-facing, looking for clients, working with collaborators… the lack of features can really erode at your time in their own ways.
So I finally set up e-mail proxies for all the services. Our very own “noreply” e-mail! How professional.
As with everything in the IT side of things, it’s pretty straightforward to do, but still a fussy, messy slog when you’re just learning and trying to get it to work so you can move on. You gotta make sure you can do SSL/TLS connections, that each machine and service is properly configured to access the email settings to actually use the account… Booooring.
But this enabled notifications in tools like Gitlab; it enables being able to send account activation emails to the colleagues you’re onboarding. Before, I had to copy-paste their account info to them directly.
No longer. Infraaaaaa!
We also enabled and put to use some latent features, since I actually stopped to do the effort of reviewing what’s possible beyond the bare functionality of the service, which ended up yielding some cool things.
Appointment booking is a fun one. You can expose your working schedule to external users and have them select and book an appointment with you.
You can set limits on the time between appointments and windows before and after that need to be free. It’s really cool!
Then I documented all the setup steps for the various features. Don’t need to learn it twice.
More legitimacy? Official web domains. Payment processors.
It never ends… I’ll keep this brief.
Get the domain for the thing. It’s just way better to have a clean and clear domain. Just do it.
We found a Calgary-based payment processor. If you’re looking for donations, pay what you want for something you’re offering… E-Store processing. Maybe skip Stripe or Square and support Canadian!
All this, purpose built for future clients.
A lot of this infrastructure was, beyond helpful to us, in order to possibly offer some of these services to interested clients. Some incoming funds would help offset subscription costs and business expenses like those domains you totally bought now that I told you so.
And it worked out pretty good! Got to do a tour, show off the functionality, stuff I only learned about the day before, haha.
Even if it doesn’t yield clientele, it was a good stabilization and feature pass that enables us ever more capacity.
Incoming actual game work? No way.
Yes way, I finally cleared out many tasks, needed a break and got to get some work into a way downstream GS_Play feature. GS_Juice: The effects and polish module!
It was a pretty basic pass, as it was so far based very loosely on the GS_UI Animation system. Finally, I could actually get it to do anything!
I solidified base functionality to reflect the systems we’ve begun using throughout the GS_Play library, using subclasses to allow for universal feature registration for custom functionality that links to the Juice feedback system. We got proper firing, instancing, and overlap logic. Something that gets very muddy quickly if you’re driving 3 independent shake animations on a single element… You can’t have that stuff drift.
I left off with links to the O3DE Open Particle System, which is now exiting preview in the upcoming fall release of the engine. That’ll take some particle authoring to test, and I haven’t had the pleasure of getting to use the tool yet, so wholly new ground on my end.
Our project uses Audio and feedback extensively for the pleasure of the gameplay, so I’m really happy to see this actually exist now, as opposed to being a fully conceptual scaffolding that’s been lying there for months and months.
A game studio head making games? Pffft.
Yeah, how could I be so conceited? Why would I game dev when I have to do yet another very critical part of releasing a project? Distribution.
Distro.
Did I mention that it turns out this stuff can be pretty cool?
Wellp, it turns out that this stuff can actually be pretty cool.
The challenge: You have a small launch to handle; there’s no reason to think you’ll need to subscribe to something like Amazon or cloudflare hosting to distribute it… But that then makes things dodgy. If you’re giving out the domains of your company infrastructure, you’re leaving yourself pretty wide open for hostile parties to come knocking at your doorstep.
So how do you obscure that?
I don’t know the name exactly, but you handle it in your routing system. You can make a public domain and path and point it at your infrastructure, then when your routing service catches the link, it pipes it to the inside guts that work out your hosted file, then changes the outgoing path to match the public URL. All of a sudden you have a CDN (content delivery network) at your disposal that properly masks the underlying system and instead serves up your publicly accessible content. Super cool, and super helpful in keeping our costs low while we can still self-host this stuff.
This was an upfront effort that ends up paying in dividends moving forward. Through this, we are not only able to handle hosting files, but also create a clean throughpoint for our deployment pipeline.
Our automation can build and publish our projects, label them, add them to a path directory file, and have the site dynamically read that directory to serve up the “latest” release, as well as show an archive of all past releases.
Even better? We made the dynamic website functionality its own module that we can use across multiple websites for distribution handling.
An awesome thing to set up early, an awesome thing to have as you continue to develop and serve up new tools and work. And ever more work that shows we are ready to step up, make our workflows and pipelines potent and well realized, and can do the same level of work in everything that we do. Reduce labour of our human team, formalize processes that are well worth the upfront time cost, and make things ever easier moving towards our future. We will no longer be reacting and putting baseline things into place; we will instead be refining and expanding our infrastructure and work capacity ever onward.
I love that stuff. I love that I get to actually put it to action, too.
Before we close out, some fun side things!
I’ve been staying steady on trying to point my off-time work towards fun side projects that have no impact on the business stuff constantly looming over me.
To those ends I’ve been churning away at rebooting a bunch of legacy website things and kickstarting a bunch of dream goals I was never able to do back in the day.
To start it off I worked out the brunt of the Some People’s Kids interactive website! It was originally carrying a bunch of out of data javascript that was making it insecure and unable to run as an https:// connection. Additionally, and I only found this after the reboot, it was recording an 8 year long log of php depreciation warnings and page errors… Well all of a sudden that file drops and my webhosting is completely crushed. It was 40 gigs. Of pure text. It was an incredible little mess that showed its head exactly as I was bringing out the new website to full functionality.
A classic. Still full of content ready to explore.
https://spk.genomestudios.ca/
And, with it I was able to tackle the first of my dream goals. Achievements. Now defined as “Unlockables,” these are little data modules that can be triggered from the GS Infinite-enabled websites to activate all sorts of things. As a baseline, there are Achievements and Items. There are incremental hidden unlockables that, when you get them all they trigger an actual Achievement or Item.
One of which was completing the “Invasion” interactive site campaign.
Fun factoid that came up was that there was a long-forgotten comment in the campaign code, all the way back in 2017.
“//GIVE USER CREDIT FOR COMPLETING THE STORY”
And 9 years later, I was actually able to do exactly that.
Another long-time dream was to make a dynamic theme for the site. I have taken photos of beautiful Edmonton skies over the years and wanted to capture an entire theme of colours and backgrounds that shift in a schedule to the time of day here in Edmonton.
Using the same scheduling system that drives Wolfgang and Hayes around their apartment, we got fully realized dash skies! Complete with matching Primary colour palette!
The funny thing about this entire media library and theming system is that I was doing this as a core pillar of Genome Studios’ aesthetic: Transparent Black panes that use the Projects colours for the vividness of the theme, way, way before dark themes for websites were normalized. This was amply in the Facebook is Blue and white, and there’s no changing it territory. I was doing it before it was cool!
And finally, a real gem.
I was able to reboot Gladiators as well. https://gladiators.genomestudios.ca/
This, like the spk site, was about replacing all the deprecated, unstable JavaScript from 10 years ago, getting the new infinite dash and tooling added, and actually getting into functionality that I’d never had the time to try to make.
All of these efforts have been based on doing it for exactly as long as it’s fun. Cutting every corner and whatnot if it means a tedious and un-fun process. Why I haven’t rebooted the HD Remaster of the comics. The Gladiators work was an absolute pleasure.
I’ll summarize some of the work in burst fire:
I upgraded the entire Start -> Play Pipeline with a dynamic map selector, player roster, and improved play board. Including Settings to speed up things like the between-rounds event visuals.
I revamped the Editor, expanded some of the most important features, and added a ton of quality-of-life measures to make it far easier to author with. We can even save the map data as a custom Unlockable.
And I was able to start setting up in-game computer players. They were terrible to start, and diagnosing all of it was incredibly ambiguous. So I ended up with a replay tool that can replay the entire game back, in order to be able to visualize automated games that play without the actual visible game board. The game itself was made super entrenched in the gameboard elements (because it was a decades-old game I programmed), and so translating the game state into data was a wholly new thing, but critical to CPU awareness and for the playback visualization.
Including a really cool feature:
Turns out Gladiators is a “Single Page Application”, and because of that, I was able to connect not only the basic navigation of Game -> Editor -> Game. I was able to create a feedback card that runs after the game is over. It allows you to rate the CPU’s performance and give feedback. This then gets piped into the Umami metrics page for Gladiators and allows me to evaluate the replay+ratings to identify patterns where the CPU players break down. It’s soooo coool.
One dream for Gladiators captured, and it turns out that this data-driven system and playback system are perfect prerequisites for Multiplayer games! A second dream I never would have imagined I could work towards. I hope to be able to show that working soon.
Next month maybe.
Wai, wai, wai, wai, wait. About that Legitimization.
I wanted to firmly clarify. This “legitimization” effort is not driven by “the passion of creation” or “dedication to your vision.” It’s not “pushing through adversity”, or “I’ll do these motions, and then the success will come.”
Nothing about our legitimization work is based in mercurial, open-ended, artsy vibes. It is all based in tangible, verifiable, and learned measures. Things we’ve already done in the past, things that have been proven to work for our betterment, things that are regularly spoken about in conferences and by mentors.
We may not be perfect, certainly not, but the sudden “realizations” we had on how to improve our efforts around our projects, like the metrics, while a eureka, were not sudden fits of fancy. They were realizing that a technical measure that could be there was not, and then executing to bring it around.
I say this because it can be exciting to hear about analytics, or a server computer and all these cool services. I still think it’s all so cool. But we are actively using and expanding our capacity through these means. We’re using automation, we’re using documentation. These metrics will give us strong feedback on improving our site’s efficacy, and we will follow through on work that improves them.
I have many colleagues who are not using any of these things, and they are doing fine enough anyways. Large chunks of these systems would likely be wasted on them and go unused, simply whirring on their server using resources.
They are using the “direct-to-steam” marketing, driving their call to action to wishlist directly from their promotions and social media outreach.
That is perfectly valid, and doesn’t speak poorly to the extent of their measures. Whatever is working can work and be perfectly sufficient for accomplishing your goals. Their legitimization is delivering strong media, making a concrete and high-quality game, or demo. It’s getting all the art and design done even if you’re just using Google Docs.
Maybe a good step would be to track tasks and work with a free task management plan like Jira… A meaningful stride, but again, only valid and legitimizing if it actually emboldens your workflows and yields better work as a result.
Just because you can doesn’t mean you should.
So yeah, words of warning, rant over.
And that was the month!
A lot of culmination took place this month. Bringing so many things up to a working speed, filling in necessary gaps in our work and projects.
It was all very cool work, and strides that bring us ever closer to that one turning point of doing a full-blown, full-scale release of work we’ve been aiming for for so long. Our list is shrinking, and the actual quality of our release is growing as we get there. Something we’re very excited to be realizing, and something I hope serves us in this and future releases.
We’re incredibly close.
Thanks as always for coming along for our months of review. Stay tuned for some really exciting work coming out… any minute now.
See you next month!
Btw, you can now rep Genome Studios on Discord with our brand new shiny server tag! Every bit counts!
P.S. Did you know you can keep up with our Month in Reviews by signing up for our newsletter? Just check below!
Want to keep track of all Genome Studios news?
Join our newsletter!











