I started writing this online journal post to procrastinate solving a bug that only rears its head with multiple people playing in my Arena Defense Roblox project, not to discuss the bug or much around it really (after a shower mulling it over in the shower I’m pretty sure I know what’s going on and how to fix it), but rather to sort out my thoughts and observations about Roblox Development in general. While learning an entirely new engine (for me) that’s uniquely suited for online multiplayer experiences was suuuuuper exciting… I’m having a hard time finding a realistic Roblox path to a reliable source of revenue (aka: helpin’ pay them bills and rent). Things have changed in the Roblox environment since this post, contrasted with other things that didn’t change in a way I expected which may have given solo devs like me a little bit of an advantage.

Arena Defense

The project idea itself is pretty simple: a combat game where players defend against increasingly difficult waves of enemies, get defeated, rinse/repeat. Many years ago a small team of us (3 dedicated devs, a couple part-time helpers) put together The Last Stand for Dawn of War 2, as an homage to that fantastic time I used it as inspiration for the general theme. Added in a monetization route and simple drop in/out play more friendly to Roblox with rogue-like mechanics helping the simple core loop flow.

It also has some really cool elements, overall the polish level is quite low, I emphasized figuring out the difficulty of expressing game mechanics in Roblox over the polish/presentation of those mechanics – lots of rough edges in there that need smoothing (hint: unless I’m proven wrong about how this won’t help pay the bills them edges probably won’t receive the smoothing). ANYWAY the cool stuff!

  • Unique Tools (weapons really, ways to defeat enemies and progress with different styles)
    • Each tool has uniquely available upgrades/bonuses that can be chosen between successful waves
      • Bonus unique upgrades can be purchased/unlocked with GG Coins!
  • Fun/Silly enemies
    • I was testing enemies who were just basic geometry with my own image attached (Rolly!) when our resident 7yr old (at the time) asked if they could make an enemy
      • While the art was being constructed I quickly put together my own 2d art and experimented with how to present it with aFace
      • Resident 7yr old art complete! Combined it with my strategy found for aFace to create the Fire Cpirit
      • Seeing it live in the game sparked excitement from Mom! Mom put together art for EyeCU and Polka Dot
    • Took a unique AI approach with “Stacked” behavior which I haven’t tried before
      • I’ve built adaptable/modular AI before (The Last Stand AI was written by me in Lua, it was able to competently use any/all abilities a player may uniquely obtain through their choices during Wave 16’s Clone Wave)
      • This extends that mentality, not only is the AI extensible by adding or removing different behaviors (ex: ‘Movement’ or ‘Targeting’ or ‘Attacking’ or ‘Helping’) but those behaviors can be “Stacked” to temporarily change (or adding if that type of behavior didn’t exist) based on various circumstances
        • Ex: Equipping a tool may add a permanent ability type behavior (with its own conditions and evaluations when it’s best leveraged), while engaged that ability may change the movement behavior to something better fitting for the ability for the duration of that ability, when the ability is finished it’ll remove that unique movement behavior from the stack reverting to the previous one
  • Robux (real-money) purchasing flow
    • Okay this might not sound as cool as the above stuff BUT let me tell you that to make something purchasable for Robux I…
      • …didn’t have to run each individual item through 2+ departments
      • …didn’t spend more than a couple minutes for each item to enable purchase-with-Robux (instead of GG Coins)
        • from the moment the bonus is created and functional in the game it’s only minutes away from being added as a purchase – to contrast this, working with real-money transactions in even small companies requires several hoops to jump through even if you don’t consider the social/hierarchal hoops
      • …didn’t have to make considerations for multiple platforms! (no iOS, Android, Windows, or Steam integrations, if it’s available for Robux it’s available on every platform Roblox is available on)
    • That’s really about it – aside from the fact that this is a crucial step to converting the stuff I make to money that can pay my bills (so the fact I could streamline it down to minimal effort is actually really, really cool)
  • Reusable Roblox Systems!
    • Roblox may not be a path for payin’ the bills but it has great potential to make fun multiplayer experiences as a solo dev – if I find a sustainable way to get the bills paid I’d love to dedicate time to making fun unique things for Roblox
    • Sample of some completely reusable systems I ended up building: AI, Display Helpers, Asset Management, Inventory, Store/Merchant, Dynamic Gameplay Text, State-full and Stateless Progression, Dynamic Probability System, Choices (same principles as the core choice mechanic of Read Play Game! very generic, used by players to choose initial tool and bonuses), and Conditions
    • Handful of super handy utility bits that saved me a bunch of time

Aside from the things that can be experienced in the game I got to personally refine and improve some of my development skills – regardless of the tools, platform, or language, some skills are universal.

Next Steps

Right now I have guesses that the Roblox advertising ecosystem is far too competitive to get a reasonable return for my effort. Unlike social media platforms (like Twitter) Roblox doesn’t offer ROI predictions (ex: how much you spend vs. how many people will see vs. how many will click through), this lack of transparency is already eyebrow raising.

Aside from that, one of the advantages I saw as a solo developer on Roblox was that there was a massive marketplace of assets made by other developers, much of it made available freely. One of the other advantages I saw was that there seemed to be rampant copyright infringement which would likely start drawing attention of copyright holders now that Roblox is a multi-billion dollar ($38 billion USD according to google as of me writing this) publicly traded company.

…I tweeted out this snip the other day

worth noting Squid Game was *released* on Netflix September 17th 2021, it is currently October 26th 2021 – looking at the most popular games none of them are associated with or have a license from Netflix (the property owner)

So turns out I was completely wrong on the whole part where copyright holders would vigorously defend their works. I guess that’s just for EBay, Etsy, or small-time developers. Without action from copyright holders, assets for popular things get hyper propagated on that developer marketplace, this is colliding with entire studios of teams cranking out games heavily inspired by mobile monetization trends. Many of these games are asset swaps of previous games, this asset swap process kind of organically has the developers iterating on their core game experience as well creating a bit of a competitive snowball effect.

Basically, what originally looked like a very promising environment for small (or independent! like me!) developers has rapidly evolved via a snowball-like-effect where bids for advertising are heavily influenced by the current highest-earners on the platform or well-funded new studios.

My guesses could be wrong, so I’m going to find some validation for’em first. In my past professional experience one team I was on tested a theory: a pre-release game (in this case, ‘beta’) is less likely to convert free-play users to spenders, and that the ones converted are less likely to spend money. Seemed like a solid theory, why would people put trust into something that isn’t “complete”?

Welp, we were paradoxically wrong but also the success of our Retention, Average Revenue Per User, Average Revenue Per Paid User, and Life-Time Value metrics were attributed to the fact that it’s because “it’s in beta” and apparently users willing to participate in a beta will be more loyal. Or something. Doesn’t matter, that was the excuse why the project was canceled despite exceeding targeted Key Performance Indicators (above in bold) ¯\_(ツ)_/¯

Anyway. The point is we learn the most when we identify we can be wrong, so what are my next steps despite my guesses?

  • Change anything giving the impression it will be a ‘full game’
    • This could be true one day if I invest months of full-time development effort on it – but it’s not looking likely if my guesses are validated
    • I think it’s fair to call it a playable experiment, and if fun is had there’s still opportunities to support it with Robux purchases
  • See how far $40~ will take me with Roblox platform advertising
    • More money would provide more reliable data, but also my savings are dwindling and I’d like at least one more kick at this bucket, it would take orders of magnitude investment to get incrementally more accurate predictions to results from spending more money
    • There’s hints that could be found even with this minimal investment as to whether I should look at a next-step in advertising spending
  • Attempt to bring in organic players to the playable experiment
    • This is not my forte, in general all advertising streams are so integrated (including what seems organic, like through influencers) with… well integrated with everything, that spending floods out traditional ‘organic’ where (depending on our echo chambers) up to more than even half our interactions that seem organic are actually fueled by some kind of funded marketing or PR campaign
    • I’ll make the cost-less attempt though, found a subreddit community for Roblox that may be interested in trying a unique Roblox combat experience

Roblox provides Developers some basic metrics, I should be able to combine those with community interaction to see an impact from the above. Expectations are low given the incompleteness of the experience, but hey, any data is better than just assuming I’m correct. If I can get any traction on an experiment, or if that traction indicates enthusiasm, then perhaps my guesses will have been wrong and I’ll dive in and dedicate the time required. Otherwise, I think this experiment may simply end up being a positive learning experience while I pivot my energy back over to the project I put on hold to explore Roblox.