Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

Separating abilities from upgrades

Previously it worked like this. There were three abilities: Sensor, Rocket Pod, and Minion. Each ability had two levels. You had to buy level 1 before buying level 2. You started out with Sensor level 1 already purchased, since sensors are how you collect energy.

I realized that the level 2 upgrades were completely unrelated to the level 1 abilities. Furthermore, enforcing a certain order of upgrades limits the number of meaningful choices you have. And having the player start out with an ability by default is like making a choice for them; there should be many viable ways to purchase upgrades.

I flattened out the leveling system, so now you can buy any upgrade as soon as you can afford it. And if you don't want to buy the Sensor upgrade, you can buy something else and rely on other ways to get energy.

I also changed "Sensors" to "Collectors". Makes more sense within the new fiction.

Containment field changes

That brings me to containment fields. I made them work both ways, so you can use them to keep an enemy in or out, depending on the situation. I'm just calling them "force fields" now.

Anyway, previously you would buy an upgrade that would add these force fields to your minions. The problem is, minions are cheap. I wanted them cheap because they're super fun and cool, but this made it easy to suddenly fill the level with a confusing smear of transparent spheres. I decided to make force fields another spawn ability, just like collectors, rockets, and minions.

Here's the new spawnable force field. I'll redesign the model later.

New problem: I now need to map four spawn abilities on to three gamepad buttons: X, Y, and B. I already tried the "press Y to switch active ability" system, and hated it. I really like the three buttons, not least because three is a major theme of the game.

I decided to limit the number of spawn abilities you can purchase to three. I map the abilities to buttons in the order you purchase them. I thought this would be confusing but it's actually not bad. We'll see if it sticks.

More balancing

I realized that minions were seriously over-powered, because they were the only way to destroy enemy collectors. If your enemy captures all or most of the energy ports on the level, you have to buy the minion upgrade to re-capture them.

I made it so that you can destroy collectors on your own. They're pretty tough to hit, so the minions are still really helpful. But to make the minions even more useful, I made them attack the enemy, where previously they would only attack enemy collectors. I had to slow down the projectile and the attack cooldown, and add a cooldown UI bar. We'll see if all that sticks as well.

A* optimization

A* was taking up to 20 seconds in some cases, causing the AI player to sit still in the middle of combat and think really hard. Turns out, I didn't have an efficient way of determining if a node was already in the A* search queue or not. It was just a linear O(n) search. I already had a data structure to store per-node metadata, so I added a boolean flag indicating whether the node was already in the queue, and that brought the worst-case A* search time down to 1 second.