Hello all and welcome to a brand new Month in Review! For the first time this year, this month felt like an age, with no signs of “too fast” in it at all.
Although that now makes me terrified about how much work was done during this millennia.
I guess we find out today!
The theme of the first part of the month? Theming.
That’s right. As another side project I started to tackle, I finally breached into giving the conceptualized Theming System a go.
Thankfully, there was a long chain of precedence on how to do it, already established by past contributors. This meant that we were really just waiting for the Qt6 system upgrade for the engine to come through so we could do the labour work. It was getting CLOSE, so I thought I’d poke around on this follow up feature.
For those of you who do not know, “Qt” is a software interface solution that O3DE uses for all of it’s engine and tooling GUI’s. Qt5 is falling into outdated obscurity and it was very necessary to make the leap to future proof the engine. That of course, meant that the upgrade would touch basically the entire engine, which is very high scrutiny and requires dedicated effort.
Back to the theming system: The brunt of the effort is just scrubbing the entire toolbase and finding EVERY style and hard coded snippet involving the Qt interface and instead give it a $token. A marker that, on initialization of the software, it gets replaced with that formerly hard coded value. These values had changed from Qt5 to Qt6 which was why we wanted to only do the work once.
And it actually went of super easy for the most part. You wouldn’t know the interface was now on a theme.
Soon after, crisis.
This crisis was also a learning experience in a lot of additional axes not necessarily directly around the feature/issue itself.
First of all, no matter how hard you try, there are parts within a project, be it games or software, where corners have to be cut. The very reason why I introduced the Entity Activation System was because what was there was very destructive and required an excessive amount of compensation to get controlled activation handling before my feature submission.
Because of this, there were Multiplayer Systems, which required a lot of entity activation control, that were manually implementing their own means of compensating for that destructive handling of state.
Unfortunately, their functionality didn’t immediately pop up when we were running tests at the time we were getting ready to submit the activation work.
This, of course, meant that we messed up a LOT of assumptions and contingencies put in place in those MP systems.
Back in the day, it would have been better to have the activation system different back then, but you are the team that’s gotta make multiplayer, so do what you need to get it going, regardless of if “the activation system works flawlessly” or not.
This inevitably ends up resulting in a lot of carnage and confusion down the line, as we’d encountered at this time. All necessary to the evolution of the engine, but still a great deal of upheaval.
Then there’s a further side effect around this, not entrenched in the code anymore, but in the people who learned, intimately, how to work the Multiplayer systems within the constraints of what has been there up till now.
For someone to come swooping in and get a massive change like the activation system merged in that ends up shaking the foundations of the tools you use is incredibly jarring and alarming. Whether it was good code or not, motivated by nuanced views or not, the truth is that people have worked with the systems extensively, and to change that renders them with a hole of understanding where before was intimate knowledge.
This means that for any well-intentioned effort to expand the engine, embolden and refine the tools and features, and bring the engine forward in common industry compliance, better boilerplate functionality, new features, improved old features… You aren’t going to get a standing ovation for every one. Without a doubt, some of your goals will freak people out. (Or be downright wrong.)
What’s important is that this resistance can come with some solid insights that you may not have factored in; it may come with additional systems that may be intertwined in what you’re doing; it may bring up context as to what was being decided on to have come to that final state of what you intend to change.
It’s really good to work your best with that input, as you will invariably come up with an even better solution than you would have in a vacuum.
But also. It means that there are going to be times where you need to stand your ground and work with the resistance of others and put them at ease. Assert your motivations and purpose in making the change, take your work seriously, and get that upgrade in and serving the community.
Community-led means that the community makes the improvements to the engine, and if nobody is willing to make changes and contribute it to the community, then there is really no engine at all.
It’s a tough line and very much steps on toes, and definitely relies on you having a sensible and well-informed stance on why you’re doing what you’re doing…
Ahaha, I don’t know how to give the advice to be firm but not a brute, and be informed, even when feedback will give you more knowledge… It takes some grace to find that medium… (Which I was stumbling around in a panic, to be sure…)
Moving on for now.
While in this panic, I wanted to tackle things I knew would be positive and doable and that would make me feel a little more in control of my world, so I tackled some more 1000 papercuts. A lot of them have been SO close to submission, just pending a few additional fixes and reviews, and getting it into a PR and ready to come through the gates.
This time, I resurrected my “Keybinding consistency” work. There are many times in the engine where Ctrl+S doesn’t take, or Ctrl+D duplicate doesn’t do anything.
So I slowly and meticulously catalogued every tool that had those inconsistencies and worked towards making all those common inputs do the same thing on every tool.
There were all sorts of little differences in why any would or wouldn’t work, but I managed to tackle the functionality and get it ready for review.
Alongside that, I introduced a painfully needed component menu upgrade for the legacy game UI system, LyShine. It had an old dropdown menu that, with my Genome Studios components, was spanning the entire screen. Any longer and you’d have options going off the bottom of the window.
Not only that, but no search, no category sorting. It needed this upgrade yesterday.
Got it through!
Class Wizard got some final TLC as well!
As a side effect of the looming Qt6 upgrade, I also finally got the chance to actually start making Class Wizard start using the engine-built Python and Qt tooling. It worked out quick enough and revealed a few nitpicky issues it had with using the built-in Python that I quickly resolved.
Because I found myself working on Theme System and Qt6 things and Class Wizard, I also put in a theming upgrade pass to the class wizard. Thoughtfully backward compatible, it has its own local theme to fall back on, but once available when the Theme System is finalized and merged in, it can pull in the current active theme and paint itself fully alongside the rest of the software. A very exciting homogeneity when you see it in action.
Signature to this month, I was jumping all over the place.
As soon as one thing went, I just started tackling other things.
This time, I actually took a try at working on our secret project. On my off hours… Basically my Second Work time.
This was me rapidly blasting a bunch of lingering features through to get a feel for a fully fledged feature footprint. Made a ton of horrifically messy stopgaps for issues we’re currently resolving, made a ton of random scattershot features…
And it was heavenly. Every piece at play was really showing the whole reason why we’re working on this project at all.
This was pure vibe-coded garbage for the most part, which meant none of the work was actually production-ready. But, as we all agreed, it was an exact spec for the full featureset we want to satisfy; well integrated in the underlying architecture and thoroughly stabilized.
Y’all… It’s going to be SO… SOOOOOO GOOOD.
We’re dying back here, keeping it secret like good little businesses are supposed to. And I can’t even grasp how amazing we’re going to have it with well-engineered features through and through. It’s really cool work, and we’re going to be really proud to get it out.
Engage Burnout Mode
Yup, turns out not taking burnout leave and instead working through your burnout leave suspiciously makes the burnout more worser, not more betterer…
Despite low energy and motivation, I like to try to do ‘anything’ if it means actually doing any work at all, versus dragging my feet and wasting my day pretending to try to work.
So I ended up trying a little more outreach for the very soon upcoming NAGIS conference. With 8 days to go, if I can’t make something go, I’m basically just going there for the fancy lunch.
Not a TERRIBLE way to do it, as I already had the ticket; it would be nice, and it also means I get to meet all my colleagues from around Alberta, but y’know… feels exciting to also try to pull together some opportunities.
Finally hit my limit and ended up taking an extra long weekend. Good. Finally, panic, guilt, and obligation were no longer enough to make me force it anymore.
Then Qt6 dropped!
Holy cow, what a cool stride in the engine. Definitely the largest cluster of community members mobilizing around the finalization and merger into dev in a long time. Catching bugs, catching errors, making sure every last piece of dependent libraries and things were the right version and properly registering across the system.
I was making the theming system and Class Wizard work in part because I couldn’t do anything directly systemically, but instead done to build some hype over this, in a lot of ways, invisible upgrade and how it’ll enable so much cool future work.
It’s always so exciting, as an indie developer, to see some real production churn around a big feature implementation. It’s all hands on deck, some of the top contributors, all rallying around it, and then, as everyone finds themselves with no other things they need to work on, it finally gets announced and merged.
That collective effort, and large-scale realization of incredible tools continues to be such an exhilarating part of working on open source development like this. All hands on deck, and big changes and strides come together where no single group or contributor could have done it. I love it!
Uh oh, then Qt6 Dropped.
Oh right. GS_Play is a massive library of code that was built using the Qt5 version of the engine. All the fun, and I only realized that I actually have to update our entire codebase after I had already downloaded the Qt6 version of the engine and built our internal engine using it.
Yeah, don’t do that…
Fortunately, nothing we were doing so far was so entrenched in systemic functionality that it was being obliterated by the changes. We actually only had to make like 2 fixes. Bullet dodged, Qt6 ready and usable. So cool.
Now for the big work!
All things preceding, I finally had some time to do GS work. As we’ve been remarking over the past little bit, we’re trying to actually mobilize our tooling around methodically starting to satisfy all the needs for a production.
Turns out we did all this so we could make games and media. I know, strange for a games and media company to want that…
Because of this, I took some time to really get my hands into some of the final lingering things we really wanted out of our GS_Core system.
First on the chopping block, and an inspiration totally out of left field, I delved into the project template system. Unlike other templates, this one you build as a project, then ingest it into a template using a converter-like process.
This is a huge one, because so far, EVERY project I’ve had to prop up, be it experimental or a jam or whatever, has involved me MANUALLY configuring EVERY GS_Play setup element every time. Stuff that is literally generic to every project using GS_Play.
I had struggled with the idea of: “How do you make a level preset if you can’t be sure everyone has the same prefabs and project setup to start?”
Project Template, boom.
I was able to get together a raw base version using ONLY GS_Core. Which sets up the common things, level management, startup, options, saving… The stuff every game uses. From there, you can add anything and everything else on top.
Then, I made a level template utilizing this now fully configured starting arrangement. Turns out, not only can you add a level template to a project, but you can also register level templates in a way that DISABLES the prebuilt ones. Most useful for us as the level is identical to the default one, but with the configuration necessary for EVERY GS_Play-enabled level. So double win to make it very clear the levels you will create from scratch.
Lastly, I then took that base template and made a “Complete” version. This time, all the same setup, but with ALL GS_Play features enabled all at once. In this case, you tear down what you don’t need, if that’s faster to handle than starting from the ground up.
But a prefab project is a moving target.
Yeah, we’re in the middle of churning all our tech, and so it’s very hard to say: “Yeah, this is it and needs nothing else”. Because of that, I immediately recognized that as things crop up, we realize the project template is missing pieces, etc. We should be expecting to regularly have to update and re-create the templates, ensuring that they actually are fully capable of running out of the box.
So, I spun up a Project Templating Conversion Utility.
Basically, I took some time to define that:
– The Complete is exactly the Base, but with extra.
– The features and breadth of functionality served by Core is always based in the Base Template.
– The Complete template inherits the base, and overlays its support over top.
Which lands me at:
– Carry two projects, the base and complete versions. These are only for editing the template contents.
– Run this utility that audits the base project and propagates all the files on command, as indexed in a running db of the base version, and its files.
– Then allow editing in the Complete version, now that the data has been synced.
– And lastly, we can automatically bake down the two projects into templates to update our current deployed versions.
A little overhead to start, but should allow us ample ability to bring our templates around with the final standing point of our tooling.
Also means I can spin up projects WAY easier next time. That last one was driving me crazy with the tedium…
Then, 1 Day Before the Conference. Meetings.
Sike. What was otherwise an empty schedule lands a whale, and I was wholly submitted to the idea that I was going to be doing nothing for the conference.
As is the best motivator, that deadline to get anything to show came crashing down in a rapid pass of work to shore up our outward appeal. Not even totally there and ready to show, but the schedule will not budge.
I pulled together a rough implementation of our newly designed logo and brand identity into the GS_Play product site. I think it’s looking pretty good.
Then comes a Tech Pitch Deck. What have we done, what are we doing, where are we headed… WHY trust us… Why O3DE. Gotta get after it. Screenshots, presentation layout… Show don’t tell…
I would say I’ve gotten pretty okay at making presentations look fairly nice.
It was also a really nice chance to reflect on our work. Much like the Months in Review, getting to go over what you’ve done and where you’re taking it really brings the day-by-day doubt and pressure into frame and allows you a moment to take a high-level look at things.
I definitely feel a great deal of gratitude that we’ve been able to contribute what we have to the O3DE engine and community, that we’ve been able to get so experienced in the engine that we’re deploying project templates, gameplay frameworks, handling all sorts of workflows and tools…
Stressors aside, this is all the stuff I love this field of work for. And actually being able to say, with confidence, that very cool things are coming down the pipes in the VERY near term, and knowing that it is, in fact, very cool… It’s an awesome feeling. All things I really look forward to being able to announce in the coming months.
We want to make sure it’s all good before we jump the gun at the last minute, though. Give everything its proper time.
Alright, it’s Tomorrow. NAGIS Time.
First day was not meeting drop time, but I still wanted to be set up with all my presentation equipment… a backup in case the first option didn’t work.. Dress nice, smell nice, look nice.
It’s Genome Studios ambassador mode; don’t mess this up.
During the conference, I was able to attend a couple of presentations. I saw a great one on UX design and the necessity of creating UX and language that describes that UX so developers are able to maintain that theme into their new work within the project.
There were some great notes on how to look at UX experience within games, but it also very much solidified in me the need for those same sensibilities in software and engines and everything else of that sort. A little different, but still important places to define that language soon and ensure it’s able to contribute to decision-making well into production.
Another deeply revealing one was the actual processes most common and successful towards entering a Chinese market. We think so much in terms of promotions, media, oh get the localization, pump out the project identical but localized…
It was very much not the way. There’s an entirely unique type of user interaction and social language when it comes to game projects and how an audience actually uptakes and enjoys/celebrates the media that really resonates with them.
Key bits were that a lot of localization studios actually want to take as much of the source game as you’re willing to provide, and basically remix it to appeal to the Chinese audience you’re trying to connect with. Another is that unlike the west, where you’re standing as a company, and presenting your media through controlled avenues, maybe trying to connect with some streamers or influencers on social media… You’re instead nearly exclusively focusing on virality. Being able to bubble up on the local social media apps, connect with any sorts of streamers, get streamers meming your work, doing video remixes, doing remixes of remixes of mixes… Getting the collective churning on producing and spreading their own interpretations and flavours of your media as a base is the way to actually tap into the market.
It all sounds fairly similar… be ‘viral’, or whatever.. but it was incredibly holistic. Those are THE avenues that build a rapport and draws audiences to your work.
Furthering that communal side of things, having social hangout space WITHIN the project was also part of this entire angle. Making a lobby for users to hang out, show off customization, and stuff. Even if not pivotal to the core game, was a big place for people to do random viral things. Having an impromptu fashion show. Doing a conga line… again, the core was enabling users to make their OWN promotional material of your work. And you, solely, focusing on enabling that, then letting the beast take over on its own… It was very fascinating to see the case studies and the language used to describe the phenomenon and process.
I also had the great fortune of having an incredible Indigenous cusine based 3 Course lunch, hosted by Top Chef Canada, Iron Chef, and book author: Shane Chartrand.
Alongside a buzzing networking party over the evening. One that ended with me getting stranded at the LRT train station one farther than I was supposed to be. Resulting in me having to haul my entire presentation setup on my back for a good couple kilometres, at 2 AM, in dress shoes, in anticipation of waking up at 7 AM and doing it all again!
That same day? An Unreal News Drop from the Heavens…
Finally, after years of my own speculation from articles and news coverage years ago on the direction for UE6, Epic Games came around and said it all point blank.
Entering the age of Fort-blox Un-Meta-real-verse Engine 6.
The news was a massive medley of scattered reports on so many things. Some people are excited for, some people are torn between, others that are dubious and suspicious.
For me, it was exactly why we picked up O3DE instead of UE5 when we were planning on leaving Unity. Closed source, Verse-only front-end, metaverse-focused… Yikes…
This was beautifully timed though. As what’s better at selling an open source, community-led, can’t pull corporate bs at any moment, game engine, than an out-of-touch corporation announcing a bunch of dubious corporate bs on the day of?
So my messaging rapidly shifted to meet the new sell:
“Have you seen the news outa Unreal Engine yesterday?”, “No? Of course, you were at this conference…”, “Yeah, it’s… wow…”
“This kind of stuff can’t happen with an engine like O3DE. It’s community-led; we steer the ship. You can keep working with these companies… and go along with everything they pull. You can be sure Unity will be piping up with their own version of this… Or you can work with a game engine, one made for making games… Made by the people using it, including you.”
And so, Day 2.
As most conferences go, the last day is usually a lot more tepid. Scheduling isn’t up to the end of the day; there’s no more social obligations… Just wrap up your meetings, and you’re free.
There is a reason why, and I was getting every last bit of it.
Carrying around my backpack for 2 days, being on my feet for 2 days, repeating the happenings of GS and the Engine over and over to colleagues, acquaintances, and these prospecting meetings with people was mind-numbing… And body-destroying,…
All in all, the meetings went great! Really, the core sell was: “We don’t need to make plans today. But every time you see yet another move from these companies, just think of Genome Studios. We’ll get you fully onboarded. A little pain, but then you’ll be free from the whims of these companies working exclusively for the stockholder. With each passing month, the engine will only get better, our tools will become that much more realized, and we’ll have more and more published work. We’re not going anywhere.”
Seeds sewn, I hope to see them sprouted one day and ready for harvest.
Then, finally, I got to pay the price for these sorts of events… Absolutely destroyed my body for it. Still dealing with the last lingering bites taken out of me today…
Conferences and networking and all this stuff really is its own full-time job, and costs a hefty sum. Tickets, travel, socializing, pitching… It needs dedicated effort, and needs someone who can tackle all of it together and still perform to SOME degree in spite of it.
It was in my hometown, so I got off easy. But there’s a reason why it’s completely different to found a company with founders than to be a lone founder responsible for everything… Some are certainly better than others for a task like this.
I survived!
Now I could return to the exciting work I spent a weekend talking for hours about. If there’s anything I can say is that I hate talking about things instead of working on them and solving them… Talk is cheap; action is everything.
But I’d like to think that all the pitching and promoting did revitalize me, at least on the angle that the ideas we have and the value we see in the work we’re doing is ACTUALLY real, quality work. It’s not just the ravings of someone too passionate/romantic to see the writing on the wall. We know what we’re making, and why.
Pretty cool.
So back to GS_Core!
Despite it being dryer work in general. It’s been really awesome to get into GS_Core and start tackling the heavy systems things that truly enable a project to start and be viable for production. It is the backbone for the entire framework for a reason.
Now? Options.
Nobody WANTS to do options settings. It’s great to have, makes a project so much more capable of reaching anyone wanting to consume the work… But yeah.. Who’s going to do that when there’s games to make as well?
That’s what GS_Core is for. Let’s not reinvent the wheel. Options are options, are options. Here.
As always, I love the autonomy we have as an independent studio, because in tandem with Options, we are purposefully dedicated to also expose a slew of Accessibility options alongside the graphical, systemic, gameplay options.
Let’s again tackle stuff that should pretty well be in any game possible, and just make it easy to provide and tap into in your projects. The audience will be that much better off for it, and your games will be able to thrive among the people who want to pick it up.
Primo.
This ended up pushing me into breaching yet another system I only dreamed about using, but never actually looked into. IMGUI. (Imajooai? Imgooee? Imigeeyuai?)
IMGUI is an in-engine Utility UI that gets printed over top of your game during runtime. It’s capable of a bunch of things, but that’s the main purpose for it in O3DE. You can quickly make windows, buttons, and visualizations of the data within the game and easily manipulate it during runtime.
This is highly useful for debugging and QA purposes. Something that GS_Play is DEFINITELY supposed to be able to handle for you.
So we finally got to prop up our own GS_Play IMGUI configuration. The menu integrated in GS_Core, allows the Core features, as well as the entire rest of the framework to provide submenus that can service any possible piece of the featureset.
It’s early going but I had the great pleasure to introduce a Phantom Cam camera handler window into the system already. This allows you to artificially take over any Phantom Cam that exists and see how it is set up and alter its configuration. On top of that, we added the ability to spawn a debug camera rig, full of any cameras you want to utilize for debugging, and they become automatically able to be focused from that interface as well. Allowing fly cams and anything else into the mix.
We’re only JUST getting started with this system; it’s only going to get better. Very exciting.
During this general time. The Activation System Crisis was still well underway.
While I got to put it off for a good while, I was chipping at it here and there in the lead-up to the conference, and inevitably had to return to it now, as well.
I attended the next TSC (Technical Steering Committee) meeting that happens every Tuesday. I raised my worries around a growing consensus to potentially revert the entire system until a solution was found and committed forth. This was definitely alarming me, as the alternative was a system that required extensive compensation for destructive behaviour that I relentlessly worked against solving months ago. All with a fairly eloquent solution that was incredibly performant relative to the vanilla implementation. I was quite freaked out, and definitely tilted.
Thankfully, with great precision and stability, I was put at ease around the trajectory of the work and fixes. We were getting to the bottom of the issue; there was no need to make such a massive move like reverting; and once the dust has settled, the fix implemented, then we can return to the topic and see what the community ultimately wants, not under the shadow of an immediate technical crisis.
Phew…
I was grateful to be able to hand off the technical portion of figuring out the fix, as it was stirring up some very low-level processes and was WELL beyond my ability to diagnose and get to the bottom of.
I pivoted my responsibilities instead to introducing a better assortment of Automated Testing processes that serve to highlight any issues with the new methods around entity activation. Hopefully, while considering the incoming fixes not merged yet, this could serve as the early warning system that clearly didn’t warn us earlier when this was first merged into the development branch 6 months ago.
It was far more modest a task, but I hoped that it could at least be a gesture of support over the stuff I didn’t have the capacity to tackle directly. Yet another reason why I find this whole Open Source dealio so cool. There are some incredibly skilled contributors to the project, and you get to work side by side with them, deep in the trenches.
Alongside all this, things all over were coming around!
Theming System was pretty solid for the most part. So much so, we’re now using it in our internal engine for long-term testing.
This is an actual live screenshot of it working. No mockups this time! (Neither were the ones above.)
Likewise, I was getting a bunch of 1000 papercuts through. Many of them needed attention as they, too, were not made for Qt6 at the time of creating the fixes.
Can’t even remember all the ones that came in. But I am nearly at the end of my list at the time of writing this. This will alleviate so many little finicky things forever after.
I also tackled some final bits for the Gradient Global Illumination. Thanks to one of my colleagues for taking on the mantle of running hours-long builds to try out a fix, then more hours-long builds to test the fixes of those fixes… I couldn’t have gotten it as tested and stable without. Only one more thing before it’s ready for submission!
Those automated tests for entity activation made it in as well!
And I was steadily working out Legal stuff I have to keep up with. It’s expensive and really most necessary when we’re done done done and putting our work out… But like most things, it’s probably best to get it done before you are absolutely desperate for it… You never know what can come up.
So have I mentioned that I’ve been burnt out, doing all sorts of random disparate things yet?
That hasn’t stopped yet!
Code reviews kept coming in. Tickets for me to tackle on our secret project needed my attention. Design and branding things are still underway…
All getting done. All making meaningful progress. But it was dizzying.
Quite honestly, it ended up making for me to set some somewhat clearer boundaries as to when I was going to dedicate myself to third work.
I ended up resolving to doing side projects and no-pressure things on the side, unrelated to Genome Studios’ business goals.
One of which was resurrecting an old Genome Studios media library I had been working on in 2018 until I pivoted to 3D game development.
Infinite GS Media Library
Not ready for the big time yet, but look at these screens!
And the dashboard.
The total goal for this media library was to consolidate ALL the GS projects over the years, no matter their medium or platform they were distributed in.
Because I’ve moved away from Patreon memberships for Infinite, it was a brand without a product, so I figured I’d move it to this. It was what the membership was dedicated towards anyways. Now, we can handle it completely how we want, no need for membership.
It was a lovely little journey. As part of the work, I actually had to review and go over the Get Rich comic and website, the original name for Some People’s Kids.
What a trip down memory lane. What prompted me to do this project at all is that Wolfgang and Hayes hold a special place in my heart. And I’ve been longing for the stupidity and comedy around them and their sagas.
It may not be direct new work, but I am excited to bring them back into the limelight and showcase some of the lost comics that lived only as strips on social media posts.
I even found myself enjoying the most recent release: “The Republic“, despite absolutely abhorring it upon completion.
As we wrap up the month…
Our Core work is well underway. The reason for the firm motivation around it is that we’re working on starting up a project we made a demo of in the past, and actually building it out for a dedicated production. If you were at the local demo presentation not too long ago, you’ll recognize the project…
This is finally putting the onus on the GS_Play tooling, and already stirred up a handful of meaningful updates to serve the purposes for the production.
Use testing is a massive one for tools like this, so we’re really excited to actually put it to the fire and work out well-considered tools and get production work to a place where we can start up any projects with ease and consistency.
Similarly, we’ve had the great fortune of actually showing off our super secret project to some colleagues, and we’ve been met with overwhelming excitement and eagerness around its release. Great signs. The kinds of signs that we saw in this demo game project, and shows us that our trajectory and the work we’re prioritizing is far from the “Trust Me Bro” goals I once held in droves.
We have market validation. The work rings on its own, no explanation required.
All that’s necessary is to actually follow through, with tact and high-quality work.
… The hardest part…
And that’s a wrap!
It’s definitely been quite a month! Happy to be on the other end of it, but no doubt a really impactful one nonetheless.
As has been the object of comfort, and terror, we’re steady-on forward. We simply need to deliver on what we’ve already got going.
Which will be the subject of next month’s review!
So until then, have yourself an exciting month, and we’ll be back then to tell you how it went!
Cheers!
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!

















