Realm of the Ghost King Postmortem

With the release of my first Commercial Indie Game comes the release of my first Commercial Indie Game Postmortem. It's a rite of passage for indie developers, I think. Even small, unsuccessful ones such as myself. I'll be partially following the standard software development postmortem formula, which asks the three questions. What went right? What went wrong? How can we learn from this whole ordeal?

What Went Well

This is the fun part because I get to talk about all the good things! So let's talk about what went right.

I finished a game!

My main goal from all of this was to actually make a thing and release it. When you build a small-ish game there are lots forks in the road. You work on it for a while and add all the fun and exciting stuff and then you can pretty easily get bored and never finish it. The saying about the last 10% of a game taking 90% of the game's development time is entirely true. Games go from horrible and unplayable to good pretty suddenly, but the transition from "good" to "I can release this" is long and slow.

Another path that's easy to take without realizing is one where you infinitely rewrite portions of your game over and over. It's satisfying to a point, because you can see major changes and improving on your old busted functionality is always nice. However it's also a path to ruin since you can basically rewrite everything a million times over an never, ever be done. I tried to stay away from this mentality with ROTGK but I still ended up rewriting some basic things multiple times. I tell myself these were sound decisions and beneficial in the end, but I actually have no idea.

I released a game!

The second part of finishing a game is actually getting it out there. If you have $100 and some time you can put it up on Steam, and if you only have the time you can put it up on Itch (itch.io). Steam gets you a massive and fairly mainstream audience that you will have no idea how to tap into. Itch will give you a much, much smaller audience, but one that enjoys quirkier games. I almost feel like my game is too plain for Itch's more popular fare, but I really like their site, tools and pretty much everything about them as a company. Plus it's free and easy to throw a game up there so you may as well do it.

Also life is short. There's no point in worrying about how good something is or how many people will play it. If you want to create things there are avenues to put them out there and you should do it. Don't spend four years working on a game that could have been done in two. You'll regret it more if you don't release it, probably.

I'll also add that the first time I saw my game's page on Steam, or was able to search for it and have it show up in a list of results, was very satisfying. It changed my mentality from "I'm just some dope making a game" to "hey this is a real game, I guess?" and that's a cool transformation.

Some people bought, and I assume, played it!

I don't know if you know this but it's hard to get people to actually play your games. There are a lot of games out there and plenty of developers have name recognition, marketing budgets, time to devote to promoting their game, publishers or whatever other means. I have just my own time, and while I certainly understand the value of promotion, it's ... not my favorite way to spend my time. It was incredibly time consuming and I didn't even do a huge amount of it (more on that later).

Even so, getting your game out there will get you a couple sales as long as your game isn't a disaster. My initial goal was to sell one copy to someone I didn't know, with secondary goals of making back my Steam submission fee and making enough to pay for the next game's submission fee. I was successful in all three of those goals, so I guess the release was a success? My metrics are pretty bare but I think this counts.

Some websites covered it

I emailed a handful of sites I thought would cover it. It first got picked up by IndieGames.com, a small offshoot of GamaSutra dedicated covering indie games. That was super cool to see! It was also put into Unknown Pleasures on Rock Paper Shotgun, which is a weekly(ish) feature that showcases a handful of recently release but unknown indie games. Since I emailed a very small number of sites, my success rate was fairly high, so I'm pretty happy with these results. RPS is also one of my favorite gaming journalism sites so that was pretty awesome to me, personally.

RPS also moved the needle in a fairly significant way. The trailer that they posted has far more views than any other video I've put together and there was even a slight bump in sales for the second week after launch.

An awesome streamer played it

I spent a lot of time agonizing over streamers and while I do think my game is enjoyable (for the most part), it's maybe not super exciting to stream. Or maybe it is and I have no idea what I'm talking about? I'm sadly a few years too old to have ever gotten into the streaming thing. I think it's cool and I understand why people like them, but it's just not something I can get into with any regularity.

That said, I knew it was important to get streamers to play your game, so I set out looking for streamers who played roguelikes. Eventually I found this awesome guy named Nookrium who plays lots of strategy games and roguelikes and has a pretty dedicated following, though not a massive one. More importantly to me is he's a nice, respectful guy. He's cultivated his audience with his positivity and enthusiasm and the audience really reflects back on that. It was super important to me to find someone like that.

He wrote me back a little while later to say he'd check it out for his Roguelike Month feature, which was a couple of months after release, but obviously I wasn't going to say no. His video (as seen above) was great and some people in the comments even seemed to like the game. It's quite gratifying to know that someone spent their time playing your game on a thing that takes up their own time and contributes to their income. Honestly I probably needed him a lot more than he needed me, and my game didn't get anywhere near the views his more popular ones get. I'm truly grateful for his time and effort spend recording a 20 minute play-through of my game.

A very small number of people play it every day

One of my biggest inspirations for game design is Spelunky, which (I believe) pioneered the "Daily Challenge" that a lot of games with procedurally generated content now have. Since making Realm of the Ghost King's levels repeatable via a RNG seed wasn't a huge amount of work (though there was a lot of other stuff to consider), I added a Daily Challenge early on. Daily Challenges are mostly a great replay feature. I have hundreds of hours logged in Spelunky purely because I would start up the game every day for a few years just to play the Daily Challenge.

And I guess it worked! A small handful of people (myself included) pop on almost every day to play the Daily Challenge. It's not a huge group of people (three or four semi-regular names), but it's really cool to know I made something that's even a small part of someone's daily routine. Prior to release my assumption was that there'd be a small amount of people playing it around release and then it would slowly peter out until nobody really played it. It's six months after release and it's going stronger than I had hoped, and that's really been awesome to be a part of.

I updated a game!

This is something I wasn't necessarily planning, but I successfully released a fairly major update to the game six months after its initial released. Post-release I patched out some of the inevitable bugs and added some requested features, but the 1.1.0 free update added new characters, new unlocks, and I even made the level rendering a little nicer. I think part of it was a sort of long goodbye to the game. Since I had been working on it for so long and not working on it (or knowing it was waiting for me to get back to) was kind of strange.

I kind of doubt I'll ever release another major update for it. I'll patch issues and bugs as they are found, but 1.1.0 is probably the final state of the game, for better or worse. That's fine. I feel like it was a nice epilogue to the story.

What Went Poorly

My time as a software developer has taught me that the most effective way to find out why something went wrong is to keep asking "why?" every time a reason is given. It's called "5 Whys" but sometimes it takes more than five. This is usually done when you're doing a postmortem on a major outage or some sort of bug that cost you money. Realm of the Ghost King of course has its failings, but, honestly, given my goals, they're not too disappointing.

I took way too long to make it and release it

I touched on this earlier but I spent almost four years making this game and that's probably way too long. That includes some breaks where I didn't work on it for months at a time, but overall I did work on it pretty consistently. If I'm honest with myself I probably could have finished it in two years. I touched on why it took so long in the "what went right" section, and it's mainly those rewrites that didn't need to happen. I will say I left in a lot of bad code purely because I wanted to finish the game, and as a result a lot of the code is ugly, convoluted and not really reusable for another game.

Why so many rewrites? Again, if I'm honest with myself, it's because I wanted the game to be as good as it could be, but also because in the back of my mind I knew it would delay having to deal with a release. Releases are hard, but most of all getting feedback and having people play it is nerve-wracking. I've never really done this before! I'm hopeful I'll be better about the next one.

It didn't sell very well

This is, I guess, the main failing of the game. I could go into any number of reasons why. The main one is the game is kind of niche. It exists between the world of hardcore roguelikes such as Nethack or Brogue or Cogmind, and less Rogue-ish games like Spelunky or even Crypt of the Necrodancer that are more real-time or added procedural elements to a new genre. There's also the marketing angle, which is to say I had barely any.

There's also the potential that the game just isn't very good. I got feedback from a few people during development and it was generally positive so I'm more of the opinion that it exists in the world of "pretty good" or thereabouts. It's sort of a hard sell if your game is just "pretty good" because there are a ton of pretty good games out there, or even "okay" games that look nicer or otherwise have a more interesting hook. I don't really have a solution to this aside from "make better games". Make game prototypes quickly and trash them if people don't fall in love with the idea. If that's sustainable for you.

I'd also say there's no real hook to the game. My original idea was "roguelike where you can blow up the walls and stuff" which is fine for a game jam, but maybe not a selling point for a commercial game.

I can also touch on the game's name. Realm of the Ghost King is a fine name, though not a super interesting one. Naming things is hard! If you're tiny you probably want to pick a fairly unique name, which I... didn't. After I had already committed to the name I discovered Realm of the Mad God, a much more popular online game, which, um, also contains a Ghost King. This makes actually finding my game a little harder, and it's confusing. So when you finally come up with a name for your game, don't marry yourself to it before doing a little bit more research. Lesson learned.

The Numbers

Now for the juicy part. I said that the game didn't sell well, but exactly how not well did it sell? I often hear the whole "indies who sell 2000 copies consider it a failure" line, and I am shocked! I would have considered 2000 copies a massive success! Heck, even 500 copies would have been great.

(Also for what it's worth I understand this is for indies who are actually depending on game sales as their main source of income, so my game being a failure isn't a big deal.)

Steam Sales

On Steam the game sold 121 copies from January 16th though July 5th, which includes the launch sale (10% off) and the Steam Summer Sale (25% off). Here are the numbers by the month:

  • January: 72
  • February: 17
  • March: 9
  • April: 4
  • May: 2
  • June: 14
  • July: 3

There's not a ton to talk about. January was the launch window and then sales petered out to nearly nothing. The jump in June (and July, since that only accounts for 5 days) is due to the Steam Summer Sale.

Steam sells games by just existing. Everyone who plays PC games has Steam, and Steam makes it quite easy to buy them. Steam does encourage some odd behaviors though. Most people know your game will go on sale eventually, so they will just add it to their wishlist and wait until it's sufficiently on sale enough (which could be never). While Realm of the Ghost King isn't setting any sales records, it's been on nearly 800 wishlists (though it got removed from around 100 of them). If you assume the ratios are the same for most games, you end up with a wishlist audience that's 6x the size as your paying audience. However there's no real way to reach people who have wishlisted your game outside of putting it on sale. Steam will send people email about wishlisted items when they go on sale, but otherwise they just sit there, waiting to go on sale.

Itch Sales

Itch is a great, great place to sell your games, but the exposure is far, far lower. For me it's been about 10x smaller than the Steam audience. As of right now I've sold 12 copies of the game via Itch! That's not really very many copies, even by my standards. The majority of the sales were during the first month or so of launch (9 copies in January and February) and just two were sold during the summer sale in late June when the game was 25% off (just like Steam).

Conclusions

Okay, so what did we learn from all this? Well, first off, marketing is important. So important. If you're not going to hire someone to do at least a little of your marketing you need to pretty much throw yourself into it the last few weeks before you launch and then continually after launch. I emailed a small handful of sites, sent keys to a few streamers, but I didn't dedicate nearly enough time to it. Also, I get it, making and releasing a game is probably way more fun than doing marketing if you're a game developer. You'll never really find an audience if you don't do it to some degree and that really does include being a crazy self-promoter at times. Also I don't have a lot of good advice beyond "dedicate lots of time and effort" because those are things I didn't do. I recommend doing as much of them as you can though.

Make a cool game that people think is amazing! This is, like, the most obvious thing, but if you want your game to be a success then it needs to be a thing people love. Something they pick up and don't want to put down. Or maybe it just looks really awesome and makes great screenshots or gifs. Either way, if your game looks cool or is super fun, that's a big help. If it's not, that's fine too, but there are a lot of other games out there that people will pay attention to instead.

Or maybe just make games for fun and enjoyment and don't worry about paying the bills with them? I don't have anything against charging for a game, even if you're not trying to make a living from it. Your time and effort are worth something for sure, but know what you're getting into when you start. It's perfectly fine to make games just because you love to make games. It's fine if your game only sells dozens of copies at best. You made some people happy, hopefully, and you built a neat thing, but either way you did it and you got it out there. That's the reward for me and it can be for you too.

Perhaps that's just a cop out for unsuccessful people, but I don't know. I don't regret my time spent making this game and I don't regret any of the decisions I made about the game, marketing or anything else. It's all been rewarding in different ways, and I learned a lot along the way. In the end it's been a great experience and I can't ask for much more than that.

Realm of the Ghost King 1.1.0 Is Out!

Log into Steam or your itch.io app to grab the latest version of Realm of the Ghost King. 1.1.0 is a totally free update with new features, general improvements and bug fixes!

Additionally the game is on sale for 25% off on Steam and itch.io! The sale lasts until July 5th for both storefronts.

Read on for the full set of changes in 1.1.0!

NEW FEATURES

  • UPDATED LEVEL RENDERING. Added a background fade effect.
  • NOW PLAYABLE: The Ghost King
    • To Unlock: Defeat The Ghost King
      • Will be unlocked if you've already done so
    • Special Attack: Teleport to safety and leave a bomb
    • Passive Ability: The Crown Protects
  • NEW MONSTER: Swamp
    • Unlocked by doing 80+ damage in one run
      • Will be unlocked if you've already done so
    • Special Attack: Clone yourself (up to three at once)
    • Passive Ability: Enemies attacking you will take damage
  • NEW MONSTER: Phantom
    • To Unlock: Freeze (Icecap), slime (Glob) or turn (Vlad) 40 total enemies
      • These are newly tracked stats, so you'll need to accomplish it!
    • Special Attack: Possess closest enemy for 10 turns (costs 3 souls)
    • Passive Ability: Start with one soul
  • FULL GAMEPAD SUPPORT:
    • Auto-detects your controller once you press a button
    • Button graphics for XBox 360, XBox One, Playstation 4 and Switch controllers
    • Menu option allows you to select a specific button graphics if you want
  • ADDITIONAL FEATURES:
    • Daily Challenge countdown clock (or countup if you already participated)
    • Player highlight is always on
    • Added new resolution: Massive (1440x1080)
    • Steam Version: Eight new achievements
      • 6 regular, 2 secret!

GAME UPDATES

  • Updated titlemap colors
  • Improved camera movement/following
  • Revised the way controls work (if you rebind movement the menu controls will match)
  • Simplified keyboard controls menu
  • Status changes (frozen, slime, possession/turning) now tracked
  • Small balance tweaks to The Depths (level 7)
  • Updated to latest version of Electron

BUG FIXES

  • Fixed specific cases that caused camera jitter
  • Fixed cases where Moai and exit would be spawned in the same place
  • Fixed rare case where Moai could block off part of the map
  • Improved text caching

1.1.0 Free Update: June 21st

To my tens of loyal Realm of the Ghost King fans. the long awaited 1.1.0 free update will launch next Thursday (actually more like Wednesday night, but close enough), on June 21st.

Realm of the Ghost King 1.1.0

I can also confirm that the game will be on sale (on both itch and Steam) for the first time since launch! The game will be 25% off, so if you're looking to snag it for cheap then this is a great opportunity!

If you already own the game it will be a totally free update, so all you have to do is start up Steam or your itch.io app and wait for those sweet, sweet bits to download. If you use the DRM/Steam-free version and don't use the itch.io app (and you really should) then you'll need to pop over to the game's itch page and download a fresh copy.

If you'd like a list of changes, check out the 1.1.0 announcement post which is more or less 100% accurate! A complete list of changes will be released on Thursday.

Thanks for reading and thanks for your support!

Announcing Realm of the Ghost King 1.1.0!

For immediate release, Mantis-Eye Labs, LLC is pleased to announce:

Realm of the Ghost King 1.1.0

After dozens of sales and a little time away I'm happy to announce the future of Realm of the Ghost King! In the near future an update with new content, bug fixes and other fun stuff will be released totally free of charge to current owners of the game!

Coming Soon!

So what content is in ROTGK 1.1.0, you ask? Well, here's how game development works: you think of all the cool shit you want to put in a game and then you completely cut like 80% of those things because otherwise you'd never release anything. 1.1.0 is my chance to add back in some of those things!

But Why?

Because I can! The game didn't exactly sell like hotcakes, which is fine, but the last year or so of development was quite a slog. It made me kind of dislike the game, and I don't want to end on that note. So I'm adding in a few features that I cut, some other good ideas I had, and tossing in a couple things I knew would be really fun to build. It's an update for me, the developer, as much as you, the player.

So what's in it? Glad you asked!

Graphical Updates!

If you follow me on Twitter you may have seen this tweet with a mockup of some new "lighting". I always felt the levels were a little sparse around the edges, but it wasn't a high priority to fix them. The new look isn't quite as dramatic as that mockup, but I like the final result:

Playable Ghost King

Having the Ghost King be a playable character was something that seemed fairly obvious, but it ended up as part of that 80% I mentioned earlier. A lot of the 80% of stuff cut is for the better, but some of it is just a bummer. Unlocking the Ghost King awesome and I'm glad he's finally playable! Here's his character select screen:

I'll have more stuff on him in the near future. Keep an eye on Twitter where I'll probably post some videos or GIFs about this.

New Monsters

In the above image you might also notice there are twelve characters to pick from now instead of ten (nine plus the Ghost King). This is one of the fun things! Designing new monsters is a lot of fun! I'm so excited that I even made a graphic!

New Monsters

Both of these are still in the pretty early stages of development, and it's possible I won't even be able to pull off Phantom's special ability in the way I want to (which is why I'm being vague with "possess your foes") but maybe announcing it will motivate me.

Like I said before, I'll put stuff up on Twitter when I have something I'm happy with and worth sharing.

Daily Challenge Countdown

This is a small change but I like it. The Daily Challenge starts and ends at midnight UTC every day, which is more or less an obvious time to do it, but it's never actually communicated anywhere. Now there's a little countdown letting you know when the current challenge ends (or when the next one starts, if you prefer):

What Else?

A couple less fun things that are still hopefully good!

I'd like to balance the last (non-boss) level of the game a little bit better. It's always seemed too hard to me. It should obviously be hard but something makes it feel a little too difficult in an unfair way.

I'd also like to add controller support. I'm not sure if anyone actually wants this, but it seems cool to have and I don't think it will be too tough to do... might be famous last words though.

More achievements for the Steam version! People like achievements, right? I thought I would hate them but I had fun implementing them and I'll try to think of a few more that are actually achievable.

Okay So, When?

No date is set yet! I'm hopeful for late April or early May, but I'm not going to promise a date just yet! So, for now...

Coming Soon!

There will be plenty more #content and #announcements to come regarding this version. I'm excited to build some (hopefully) cool junk for this game!

7DRL 2018: Shift Stack

I made a roguelike in seven days! It's called Shift Stack and you can play it on itch.io (in a desktop browser) for free!

I had a lot of fun making this game and I want to go into some aspects of the game I like and some that I don't. I'm going to assume you've played it a little bit, so if you haven't you might want to give it a spin. You don't have to, of course, but it might make more sense to play it and then read this.

About The Game

The main idea I had when I started this game was playing with the idea of "depths" in traditional roguelikes. Generally there are some number of levels you traverse down into, and in some cases you can retrieve something from one of the lower depths and then go back to the first one to win the game. Hoplite worked with this formula very well, and one of my favorite iOS roguelikes, MicRogue (which I can't find an offocial website for, so I'm just linking to the App Store and Google Play Store), used this as its main goal.

The main mechanic of Shift Stack is that you can warp between depths (or levels) pretty much at will. There's a limit to how many times you can do it and yu can only warp to adjacent levels so it's not completely free, but it feels like a worthwhile limitation.

The second mechanic I ended up adding is making the player helpless, so to speak. You can warp levels and move around but otherwise you're powerless. No attacks, no abilities, no spells or anything like that. This ended up happening because I wanted the focus to be the level warping and not just wrangling enemies so you could punch them in the face.

So then how do you win? Rather than collecting a single treasure from one of the levels, your goal is to defeat all the monsters. Since you can't attack them, monsters are more dangerous than a standard roguelike. While you can end up adjacent to one and never get attacked, you can get trapped and since you ony have two health you can only really sacrifice one hit point most of the time.

Things I Like

There are a lot of things I enjoy about the design of the game. I really like the main mechanics and the concept of a stacked set of levels that you can sort of see. I like having a player character who doesn't have any means to directly attack monsters and must use the envirornment to their advantage.

I think the thing I'm overall happiest with is how seamlessly enemies and the player interact with the level's tiles. Enemies will avoid directly walking onto traps in the current level (aside from some edge cases) but can also steal your power-ups.

While Realm of the Ghost King did use an entity-component system, it was never as refined as I wanted and I decided to not revise it in order to actually finish the game. Shift Stack gave me an opportunity to rethink parts of it that I wanted to, so I ended up with very clean entity definitions. Here's the player:

player: {
    width: 16,
    height: 16,
    components: {
        Player: {
            power: 3
        },
        Renderable: {
            size: 12,
            color: "#0000C0",
            sprite: "player",
            shadow: true
        },
        Movable: {
            moveSound: "step"
        },
        Hurtable: {
            health: 2,
            hurtSound: "hurt",
            deathSound: "player_death",
            onDeath: function() {
                App.Game.setGameState('gameover');
            }
        }
    }
}

The only real difference between the player and an enemy is that the player is controlled by input. The "Player" component is a small differentiator but that coule easily be (and maybe should be) a "PowerUser" component that would signify the ability to use the power charger pickups but also give the entity an inventory of power they could use. There's also an "Enemy" component that dictates enemy movement.

The final part to this system is that every tile has a function triggered whenever an entity enters it. Tiles have properties denoting that they can heal, recharge or do damage, so whenever an entity enters a tile one of those things happens (it could also be all three but no tiles in the game have multiple properties).

Things That Need Work

The main issue with the game is I feel like it needs more variety. Once you figure out how it works it just becomes a matter of plotting a course that lets you get rid of all the enemies without running out of health or power. I almost feel like it would be better as a series of authored puzzles rather than a set of randomly generated levels. It could be interesting to play with grid size as well as the number of levels. It also could potentially scratch an itch I have for making something with authored content, so maybe I'll revisit that at some point in the future.

Also due to the design of the game it's easy to get stuck. The game attempts to account for the most obvious case: when you run out of power and there are no charging stations on the current level. However it's also possible to get trapped by enemies with no way out (due to being blocked from warping to the next level). The game does not account for that issue, which is why I added the "Murder Scientist" button, which is a kludgy solution. I could certainly add detection for when the player is trapped, but leaving that out was mostly due to the time constraints. The "Stranded" scenario (running out of power) was only added in the last day and actually introduced a bug where you could beat the game but lose because you used your last teleport to kill the last monster in a level with no power stations.

Final Thoughts

Overall I had a lot of fun and in all honesty being able to submit a mostly finished game was a great boost. Like I said I don't think the final product is perfect, but being able to get something done was awesome!

«
»