Idle Overlord (Unfinished)

Play Idle Overlord (Unfinished) in your browser here.

In 2019, I went to a GDC talk about Idle Miner Tycoon and Brawl Stars. There’s a writeup of that talk here. Afterwards, I picked up Idle Miner Tycoon and played it religiously for about a month. Thinking back to the lessons learned developing Superhero City, I realized there was probably a lot of potential in building a version of Idle Miner Tycoon for an older and more niche audience. Unfortunately, the project was ultimately abandoned, but it’s now available to play in an unfinished form on itch.io.

High-Level Pitch

The basic pitch for Idle Overlord was Idle Miner Tycoon meets Mafia Wars. Pretty simple, right? Well, not quite, because actually fitting those elements together in a clever way was going to be more complicated than you might think.

First, a quick synopsis of both games.

https://www.youtube.com/watch?v=8bgW5ziCPsY
Gameplay video of Idle Miner Tycoon

Idle Miner Tycoon by Kolibri Games (formerly, and I’m not kidding, Fluffy Fairy Games) is an idle game in which the player runs a mine (obviously, right?). A “mine” consists of multiple levels of mines, plus an elevator and a warehouse. Each of those elements has a level that gets increasingly costly the more it’s upgraded, and can also be staffed with ‘managers’ that provide production bonuses. It is a remarkably simple, clever, and polished game, and it makes quite a bit of money.

Gameplay video of Mafia Wars

Mafia Wars was, loosely, an RPG on Facebook developed by Zynga. Players have ‘energy,’ a currency that recharges over time, which they spend on missions that reward cash and player XP (among other things). They can use the cash to buy weapons for their ‘mafia,’ which consists of recruited friends (actual friends from Facebook) or hired mercenaries if there aren’t enough friends to fill all available slots, which increase with player level. Mafia size and weapons come into play when fighting bosses or other players in battles that are decided on the server and visualized with a simple readout of who won and how much damage was done by both sides. There were a bunch of other mechanics that Zynga added over time, but this is the core. In its heyday, Mafia Wars was one of the pillars of Zynga’s massive revenue growth alongside FarmVille and Zynga Poker.

So how would these ideas be combined?

First, the player would have an underground base, with each level representing a different line of illicit business. Mimicking Idle Miner Tycoon’s mines/elevator/warehouse dynamic, Idle Overlord would have floors/vault/laundromat, where money could only move from the floors to the vault at a certain speed gated by the vault’s level, and could only move into the player’s cash balance at a speed gated by the laundromat’s level. Replacing Managers would be Minions, randomly generated with four attributes: Evil, Devious, Sneaky, and Charming. Minions would be generated with random crime-themed names and four rarities: Common, Distinguished, Exceptional, and Legendary, and would provide production bonuses based on one of their four stats when assigned to manage a given floor.

To bridge the gap into Mafia Wars’ territory, there would also be a Missions system that had timed missions instead of requiring an Energy resource. Missions require a minion to be assigned to them, with minions receiving XP to level up from missions that will increase their utility in managing floors.

At some point, the idea was to add some kind of combat mechanic (PvE or PvP) to make use of the minions’ stats in another way, and I actually wrote a spec for doing that in the context of a ‘city takeover’ mode but never got around to building it. There’s still a button for it in the UI though!

Startup School and Building a Community

Wanting to start the project on the right foot, I set about building a Discord community for the game before there was anything playable. The r/incremental_games subreddit is a great place to find fans of idle games, so I announced there that I would be building an idle game with a community on Discord and asked for interested folks to fill out a survey and provide their email addresses. I then emailed out a link and ended up with about 60 members.

I provided frequent progress updates to the community and tried to stay active and responsive… but learned quickly that out of such a small community without a playable product to bond over, engagement was mostly driven by just a few people, one of whom was an absolute weirdo. I tolerated them for a few weeks, then banned them after they asked me an extremely inappropriate personal question.

Meanwhile, I had been accepted into YCombinator’s Fall 2019 Startup School program. This is not to be confused with YCombinator’s actual ‘batches’ of startups that receive funding; Startup School is an online-only program that lasts a few months and provides a framework for weekly check-ins, courses, and communication with other founders.

One of YC’s most common pieces of advice is to talk to customers early and often, to collect feedback, and to make changes to your product roadmap with the goal of pivoting as quickly and efficiently as possible to a direction that results in growth in customers and revenue.

This advice is great for SaaS products (YC’s bread and butter) but got games it can be a bit more difficult, since games often require a certain level of polish before they’re even fun enough for players to come back. I also had some trouble with the peer discussion aspect of Startup School, as I felt pretty well-equipped to talk to most founders about their startups (having done a lot of reading about tech startups and having plenty of programming and product design experience), but most of the founders I spoke with had very little experience or interest in games.

Anyway… back to development!

Not Going It Alone This Time

My previous indie dev projects (Troll Farm, Stranger Cubes, Blob Catcher, etc.) were entirely solo projects, save for the UI art and design on Troll Farm. I wanted to find some folks to work with to fill in the major gaps, but I also didn’t want to invest too much time and money before testing with a real audience. I settled on finding programming help by hitting up some old friends I used to work with at EA (first one, then another when the first got too busy). I also felt that the game would need to look compelling even if I wasn’t ready to invest in UI art yet, so I contacted an artist I had found on Reddit to do art for rooms and minions. (Ultimately, that artist had to back out of the project for personal reasons after completing five or six pieces, so that’s why none of their art is in the final game.)

The GDD

Knowing I already had collaborators and also wanting design feedback from some other trusted friends, I wrote about 14 pages of game design documentation (including UI mockups), and many more pages of informal notes and a complete breakdown of the internal data structures that would drive the game.

The idea was basically to flesh out the earliest, most essential stuff in the game as quickly as possible, and then to outline the ways in which the game could evolve. To release the game as quickly as possible to get feedback from a small community, this was the way to go.

I won’t link to the complete GDD, but here’s an excerpt:

City Screen Functionality

  • By default, player starts each city with $100
  • First floor is always available to build, but will take a few seconds
  • Player is forced to build the first floor, then the vault, then the laundromat
    • This is where some tutorial text goes later on
  • Floors are restricted to build in order (IE player can’t build floor 3 without first building floor 2)
  • Each floor is associated with an Evil Attribute (Evil, Devious, Sneaky, Charming)
    • The Evil Attribute is the icon at the upper right of each floor
  • I’d like to experiment with gating some floor builds with items from missions
    • Balancing and pacing this is going to be really tough
  • At upgrade increments (specified in data), Trusted Minions will be randomly dropped. For instance, at upgrades, 25, 50, 75, and 100 of every floor, a minion will appear.
    • This happens only the first time the player unlocks a floor in a given city (in other words, when they Cash Out and reset their progress, they can’t get minions again at the levels they already got them at)
    • Trusted Minions have their stats and name randomly generated – more on that elsewhere in this document.
  • Minions can be assigned to Floors to get a boost proportional with their stats in the floor’s given Attribute
  • Only the name of the next available floor is visible; All subsequent floors are basically unknown until the player reaches them.

Notes:

  • The bright green pac-man is a meter that fills to show progress. When there’s no manager assigned to a floor, the user needs to tap the floor. This will start the meter filling up (three seconds, see below), and once it finishes filling, a number will pop up and the floor’s total (seen with the white background) will increase.
  • No minions are needed for the laundromat and the vault. Their meters fill automatically and every time they finish, cash is drawn from the previous item – the vault draws money from the floors (top to bottom – if it can draw 100 and the first floor has 90 and the second has 20, it will deplete the first floor and draw 10 from the second), and the laundromat draws money from the vault.
  • Meters should take three seconds to fill, with auto meter filling staggered so that floors start first, then a second later the Vault starts, then a second later the Laundromat starts.
  • The Boosts button shows the Use Boost popup, but the thing to the left of it is the Currently Active Boost area. Multiple boosts can be active at once on the City Main Screen, and their effects will be additive (IE two 2X boosts create a 4X boost, three 2X boosts create a 6X boost rather than an 8X boost)
  • Floor output doubles at specific intervals. On the first instance of each city (when ResetCount is 0), doubling output also grants 10 premium currency

This is how I like to structure feature spec descriptions: Explain the high-level general-case stuff, then elaborate in notes below.

There’s a lot here that changed based on player feedback, which is a really important part of game design!

  • The vault and laundromat were removed
  • The player doesn’t start with $100 – they start with nothing and have to “tap to do crimes” to get enough cash to unlock the first floor
  • Minions no longer appear at floor upgrade intervals. I realized at some point that this would lead to the player having too many minions, so I moved all the minion acquisition to the Black Market instead.
  • I decided not to force users to tap floors to make them generate output if they don’t have a manager (as in Idle Miner Tycoon), because the game already has two ‘active’ mechanics in ‘tap to do crimes’ and Missions.

All of the changes mentioned above were about refining the experience. That doesn’t necessarily mean simplifying just for the sake of it – it’s about focusing the users’ attention, making sure they understand the specific purpose of each mechanic.

UI Design: Main Screen

The original UI flow as designed

The game went through a few iterations of UI flow. The original idea, based on Idle Miner Tycoon, would feature a kind of ‘mode switch’ paradigm, where the player spent most of their time on the City Screen and then flipped over to the Missions screen as needed. As things progressed though, it became clear that the ‘tabs at the bottom’ paradigm was going to be a much better fit so it would feel much more ergonomic to switch between City, Missions, and the Store, with the unfinished “Battle” tab representing the City Takeover feature, and a currently-useless Cities listing as the way for players to see the full scope of the game and switch between the various unlocked cities (never implemented).

The final game layout as it is today.

Notice something missions from that screenshot? That’s right, the Vault and Laundromat features were cut as well. While they’re clever throttling mechanics in Idle Miner Tycoon, Idle Overlord already has a lot more to do (via Missions) and didn’t need the extra fluff. Plus, players were confused, and I didn’t feel that it was a wise use of time to get the feature to the point of it being visually super clear and polished what exactly was going on between the floors, vault, and laundromat… and anyway, it’s far less intuitive than what Idle Miner Tycoon was doing, so they were cut. Here’s the original mockup:

Original City View mockup. Notice the “OUT OF DATE” banner; I try to make it clear for people reading documentation what’s still relevant.

UI Design: Missions Screen

Mission in progress mockup
Default mission view mockup
Mission ready to collect mockup
Mission in progress and default mission view
Mission ready to collect in game

Mission layouts were far simpler, though the descriptions ended up being too long to fix with the button on the right so I moved it to the bottom. (By the way, I contracted out the writing for the missions to David Varela, who understood the tone I was going for immediately and cranked out some great mission descriptions pretty quickly!)

The layout here still isn’t quite perfect, as you can see by the overlapping mission title and “Story Mission” tag in the last screenshot. I would call this UI art “passable temporary,” as it is visually pleasing enough to be playable but still clearly not very good. If the game had tested well with the early users and been released publicly, UI art would be one of the first things to get a complete overhaul!

Designing the Game Economy

Perhaps unsurprisingly, building an idle game requires lots of spreadsheets. All data was consolidated into my ‘Design Master Sheet’ google doc, which consists of 13 tabs of data that are all designed to be exported to TSV directly into the Idle Overlord Unity project.

To give an idea of just how much data the game requires, the tabs are:

  • Cities
  • MinionSpawnData (odds of different rarities of minions spawning from different types of briefcases)
  • GeneratorBalance (from the screenshot below)
  • GeneratorData (Names and stats associated with different room ids)
  • QuesetItems (this was going to be used to gate generator unlocks using items dropped from Missions)
  • MinionSeedData (names and prefix/suffix nicknames for random minion name generation)
  • Skills (skill names and associated attributes)
  • Missions
  • Boosts
  • LootBuckets (sets of random drops by name, ie “All Mission Speedups,” or “Any Boost Green Or Better”)
  • LootTables (names, contain one or more LootBuckets, referenced by name in Missions data)
  • Goals
  • Upgrades

Here’s how the generators are balanced:

Generator cost and generation values

Generators, in this case, are the floors of the underground base. This is where the core of the game economy exists, so it had to be airtight. The key thing about idle games is that the player is always balancing upgrading existing generators with buying new ones, and that balance isn’t interesting unless there’s some conflict between how efficient it is to buy vs upgrade.

To keep this conflict interesting, there are a few factors at play:

  • The first level of each new generator generates cash less efficiently as a ratio of cost to cash generated than the generator before it (column J)
  • Each upgrade increases the generator’s output by its initial output, but costs 1.15 the previous upgrade cost (column C) – so each upgrade is less efficient… this means that the advantage of upgrading vs. buying new diminishes after a few upgrades
  • However, generator efficiency doubles and premium currency is awarded at upgrade increments 10, 25, 50, 100, 150, 200, 300, and 400 (this is defined in the Cities tab). This means that there’s still an incentive to upgrade rather than buy anew, at least until a certain point is reached

I’m no math expert, so rather than starting this from scratch, I used the work I had done when building Troll Farm as a starting point. Because Troll Farm was meant to be self-contained and Idle Overlord is supposed to be an infinitely-long experience, though, the balance had to be much simpler and more consistent, with times between new generators getting longer and longer as the player had more things to do and theoretically turned the game into a daily habit. That’s generally the formula with hit mobile games: The first few sessions are dense with new concepts and have lots to do, then eventually players settle into a routine where they can open the game fairly often but for relatively short sessions.

Missions were balanced in a similar way, with completion times staggered within a range that increases as the game progresses. The screenshot below shows some of the missions tab:

A slice of the Missions tab

A few key features of Missions:

  • Missions have a ‘mission required’ column that allows missions to unfold in a mostly-linear fashion
  • Missions have a required generator, which should encourage players to continue to build new generators instead of focusing on upgrading existing generators
  • Missions have a tagged Skill, which determines which assigned minions get bonus XP for completing the mission
  • Loot tables are referenced by name instead of id so design can be done in the spreadsheet itself
  • Some missions are repeatable. This gives players something to do if they’re blocked by a mission that requires a generator they cannot yet afford
  • Very importantly, mission payouts are actually dictated by generator payouts instead of being absolutely defined. This is beneficial both for saving time balancing the game and to manage payouts for a later “City Reset” feature (or “Prestige,” for those of you familiar with the term) that would allow the player to start the city over again with increased payouts for everything

City Takeover: The Next Step

As an idle game that’s supposed to be infinitely playable, Idle Overlord needed the aforementioned City Reset feature to allow players to start over with some kind of generator production bonus. It also needed a way to unlock multiple cities somewhat analogous to the way Idle Miner Tycoon unlocked new mines and how Mafia Wars unlocked new cities.

Rather than lean on the generator or mission mechanics to do this, I wanted to add something new to the mix that would do a better job of paying off the minions’ four attributes and that would introduce concepts that would also work in a potential future PvP mode for the game. Unfortunately, I got busy with other things before I had a chance to build it.

I’ll excerpt from my notes:

Goals:

  • Consistent progression
  • Risk
  • Satisfaction of “taking over” a city
  • Use minions in a cohesive way
  • Introduce a combat element

Overview:

  • City is divided into neighborhoods
  • Neighborhoods are gated by missions (and missions are gated by floors)
  • Each neighborhood has N blocks
  • Give feeling of taking over the city, block by block
  • Blocks get progressively more difficult
  • Minions have to rest after attacking a block, rest time is x2 if they are defeated
  • Blocks are occupied by enemies with total stats evil, devious, charming, sneaky

Combat:

Win chance goes through player minion stats in descending order and uses the stats as relative chances for the player minion to win, with the preferred stat doubled.  If the player minion loses, their main stat is divided evenly among the enemy stats and subtracted from them.

Example:

player minion is evil
evil 20
devious 10
sneaky 10
charming 9

block stats:
evil 30
devious 15
sneaky 10
charming 5

roll for evil first
if roll <= 40, player wins (out of total of 70: player’s doubled Evil value 20 * 2 = 40 plus minion’s 30)
roll for devious
if roll <= 10, player wins (out of a total of 25: player’s Devious value 10 plus minion’s 15)
etc.
If player loses all, subtract preferred stat (evil in this case)/4 from each stat of the block. If any block stats hit 0, player wins.

Minion Cooldown (Resting):

Rest time is based on minion rarity

  • 5 minutes Common
  • 15 minutes distinguished
  • 30 minutes exceptional
  • 60 minutes legendary

Can skip rest time with premium currency, skip all at once for a discount. Resting minions can’t be used for missions or floors.

What’s nice about this system is that it accomplishes several things:

  • Finds a good use for the minion attributes as ‘combat’ while implicitly telling a story that minions that are better at being evil, sneaky, devious, and charming can outwit others
  • Allows players to make constant progress even if they don’t “win”
  • Provides some risk/reward via the cooldowns in a way that encourages players to try to use their lower-rarity minions first, with the Legendary minions being a last resort because of the long cooldown time

Perhaps someday I’ll come back to this and implement the feature. This would also provide a great way to gate City Reset and unlocking the next city by setting thresholds at a certain number of blocks for each, perhaps increasing the threshold with each Reset.

The Final Word

What started as an enthusiastic venture into mobile free-to-play gaming as an independent developer ended in somewhat of a whimper. There were three reasons for this: My freelance work on the Garbage Pail Kids Mobile Game was taking up more of my time, I received some publisher interest on my other big independent project, Moustachevania, and (perhaps most importantly), the test audience response to the game was not very enthusiastic. Having spent a few months grinding away at the game with the Startup School “iterate towards customer feedback” mindset and achieving basically no increase in engagement and very little useful feedback, I decided that it was best to put Idle Overlord on the shelf and focus on other things.

Was it the right decision? Well… possibly not. There are a lot of popular web-based idle games that are not visually polished at all, and I think the game could easily have become moderately successful with those folks if I ripped out the mobile free-to-play stuff. And now that the game is available on itch.io, I’ll finally get to see what the general public’s response would be… three years later. Live and learn, I suppose.