Auto Cast
Developed in the Unity Engine, Auto cast is the first game I have released and it served as a learning experience as I delved into the world of game development. This bullet heaven rogue-lite was inspired by the mobile game “Magic Survival,” after it hooked me and had me playing for hours. I wanted to expand on the ideas in Magic Survival, and replicate that feeling in my own game, and I believe I achieved that.
You can find Auto Cast on Steam
Spells
Players gain experience points (XP) by completing monument quests, using certain relics, collecting XP potions, and defeating enemies. When they accumulate enough XP, players advance to the next level and can improve or select one of three spells. Spells can be leveled to level 6, unlocking a unique effect.
Souls
In each playthrough, the aim is to fix the hero's broken soul by finding 7 Soul Forgers. Every time a piece of the soul is fixed, the player can pick from 2 talents, with each fix offering stronger choices. The level 35 talent only offers a 2nd choice when playing on Extreme difficulty (which can be unlocked by beating the previous difficulties), and is needed to access endless mode.
Items
There are 4 unique bosses that appear every 5 levels the player reaches, with each having a different attack and causing a debuff. Defeating an enemy creates a Soul Forger.
Relics
Anvils spawn randomly throughout the world and grant the player the choice between forging a new relic, or upgrading an existing one. The player can only hold one relic at a time, so forging a new one will remove the previous.
Relics can be charged by killing enemies, gaining a use everytime they are charged. The player has to activate the relic to gain its effect, which is temporary.
Core Mechanics
Bosses
Chests found randomly in levels hold various items. Some items work well with spells, while others are crucial for certain builds. They usually change stats and may have special effects.
Players can only hold 6 items at a time, so they have to choose which items to keep, and which to discard.
Enemies
The enemy wave spawner starts with basic enemies to select from and has a budget. Each enemy is assigned a cost to spawn based on its health and modifiers set by me. The difficulty is increased with time, which adds new enemies to the wave spawner, increases its budget, and overall increases the amount of enemies.
My goal with each enemy was to make them each a unique challenge for the player to overcome.
Design Breakdown
Auto Cast features many unique mechanics that include things such as spells, items, talents, enemies, bosses, and more. This section will try to break down some of the more notable mechanics and give some insight into why I made those decisions.
Holy Smite
Strike nearby heathens with the wrath of the heavens.
Holy Smite is the exception to the idiom “lightning never strikes twice.” Like all spells in Auto Cast, Holy Smite is casted automatically. As soon as enemies gets close enough, a barrage of lighting rains upon them. While this effect is powerful, this spell lacks in the AOE department. Thats where the level 6 talent comes into play.
All spells have a special effect when they reach max level (6), and Holy Smite gains “Storm Surge: Critical hits cause another bolt to strike.” This spell now has the potential to chain infinity, as long as the player has enough crit chance. That encourages the player to look for synergistic mechanics that increase crit chance, such as the item
Stats, Stats, Stats
Given the automatic nature of Auto Cast, most of the gameplay comes from movement and decisions. That's why I wanted to provide the player with as much information as possible to help inform those decisions, but I still needed to balance it so it didn’t become overwhelming.
At first glance, the UI does not seem to contain much information at all, but that's because it's hidden. Players who want that information have to seek it out, which means players that just want to run around and kill things aren’t distracted by it. I just needed to make sure players know it's there to find.
An example of this is the debuff menu. I received a lot of feedback that players were confused when they started sliding around and thought it was some sort of bug, when in reality it was caused by the debuff “Slimy” that was applied when the first boss spawned. The debuff menu existed, and all they had to do was open it and hover over the Slimy debuff icon to learn what was causing their character to lose friction, but many simply did not know there was a menu there to open. To remedy this, I made it so the debuff menu flashed open briefly when a new debuff was applied (if it was not already open), and also added a setting to disable this behavior.
Now players were more likely to find the debuff menu, and subsequently find the other 3 info menus, core stats, inventory, and spells, which are all chalk full of useful information such as crit chance, damage numbers, and targeting priorities.
World Generation
The world consists of 9 large hand crafted chunks. When the game starts, the location of these chucks are randomized, kind of like a rubix cube. As the player moves in a direction, the chucks leapfrog over each other following the player.
For example, if the player approaches the right side border of a chunk, the 3 chunks in the left column move to the last column. The same is true for the rows, and combined they create the illusion of an infinite world.
Celestial Guardian
Ethereal Beings orbit the hero, dealing damage to enemies they come into contact with.
Celesital Gaurdians are pretty self explainitory, and are one of the few abilies that benifit from the player aiming, but the way I handled spawning them is what I found most interesting.
See everytime you level this ablity, the number of gaurdians increases, and this causes some issues when attempting to keep them all spaced correctly. I wanted them to spawn from the player, one by one, and they also move faster when spawning in so they can be active as soon as possible. To calculate the distance they should be from each other, I needed to account for distance from the player (which varies based off the player’s attack range stat), the number of gaurdians, and the speed they are traveling.
This took me a while to figure out, but I think the end result was well worth it, and I think this spell is one of the most visuallually satisfying spells in Auto Cast
Enemy Path Finding
Pathfinding was a bit of a challenge because of the varying environment. There are a lot of rocks, bushes, and trees that the enemies can get stuck on. I ended up using a raycast system to allow enemies to navigate around these obstacles. If I could create Auto Cast again, I definitely would have taken advantage of Unity’s navmesh system, but my system works, and I learned a lot about raycast from it.
While playtesting, I found players would run away from the enemies in search of chest, which meant the enemies would build up and take a while to catch up to the player, creating a lot of down time. To combat this, I gave enemies a massive speed boost and disabled world collider when a certain distance from the player. This made it so the enemies were always on the players heels.
Most enemies have two movement states, move directly to the player, or move towards the player with an offset. This made it so enemies took less predictable paths and could more reliably surround the player, as well as create openings for the player to escape.
Enemy Count
One of the first core mechanics, and biggest failure of Auto Cast was the enemy count system. A dynamic cap on enemies created a different way for the player to lose. Whenever the amount of enemies exceeded this cap, a timer would start. If that timer reached 0, the player instantly lost. This made it so players could not just run away from enemies indefinitely, and gave me another mechanic to play around with when designing enemies, items, and other mechanics.
During playtesting, the only feedback I received about the mechanic was that it was a bit too harsh, so I simply played around with the numbers a bit to give the player a bit more breathing room. However, I’d soon regret not scrapping the mechanic instead.
On release, a lot of the criticisms were about this mechanic and how unfair it felt. After more failed attempts of balancing it, I decided a rework was needed as I could not simply remove it since I had designed other mechanics around it.
First thing I did was remove the instant death and timer mechanics. I realized no matter how much leeway I gave the timer, if the player was at the point where it was getting set off, recovery was likely impossible, delaying the player’s inevitable demise. Next I placed a hard cap on enemy spawns. The cap still increased with difficulty, but with a limit. This ensured too many enemies wouldn’t build up and start causing performance issues. I still wanted to increase the difficulty with the enemy count, so I implemented 2 debuffs that get applied to the player after certain thresholds.
The first debuff was “Riled Up,” which increased enemy damage. The second was “Seeing Red,” which gave the enemies a chance to pierce evasion and armor, completely negating it. Both debuffs scale with the difficulty setting. The intent behind these debuffs was, like the previous system, to kill the player. It scaled the enemies so that they became overwhelming if the player let them get out of control.
The World Is Alive
One of the earliest criticisms I received was that the world felt bland, like it was lacking life. So I set out to create as many interactable objects as I could to hopefully bring some life to the world.
The first object I added were the monuments. They are stone statues that give the player a quest in return for a random stat increase, however they are affected by a debuff until the task is completed, and if they reject the quest they receive a punishment. The main intention behind them is giving the player a side objective to work towards and provide them with a high risk high reward choice. I also tried to give the monuments as much personality as a stone statue can have. While most of their lines involve a rock based pun and often refer to the player as the hero, sometimes their split personality reveals their true intention of harvesting the player’s soul for themselves. The second personality is portrayed alongside red glowing eyes and red text.
Another non-hostile creature is of course the chest giver. This being spawns at the start of the run and offers the player a chest, but only if they successfully defeated a boss in the last run. This stops players from just restarting until they get the exact item they want, while helping them get started.
There are also 3 traps that can randomly spawn, though on face value the Well may not be considered a trap. In exchange for a coin, the Well gives the player either health potions, XP potions, chest(s), anvil(s), or more coins. On top of a delay after receiving the coin, the well distributes the items one by one, causing the player to stay nearby to collect the items, which can be dangerous when you have a horde on your tail.
The next two traps are pretty straight forward. The Turret is camouflaged in the grass, but pops out and fire multiple fireballs at the player when they come in range. Lasty, the Spikes, once stood on, deploy after a delay and damage the player if they are still standing on them.
All of these mechanics help contribute towards a much more chaotic and fun environment.
Noxious Fumes
Damage over time effects have a 15% chance to apply poison when dealing damage. Poison effects have a 5% chance.
Aside from being a reference to Slay the Spire, this item provides a great deal of synergy with a ton of abilities, and even other items. DoT AOE effects in Auto Cast tend to not be as powerful since enemies are constantly moving, but they synergies extremely well with this item since it helps spread poison, which stacks with itself. This item helps transform mediocre items such as Toadstool, which spawns a toxic cloud whenever the player is damaged, into DPS powerhouse.
Was Auto Cast a Success?
Monetarily? No, but I never set out to make millions from Auto Cast, it was my first game after all. All I wanted is experience, and in that sense it was a huge success. I learned a ton on game development and design, game marketing, creating assets, utilizing the Unity Engine, and Steam intergrations. I also learned more about my coding style and what worked for my work flow and what didn’t.
I plan on re-investing any revenue generated into my next project, which is why I charged for Auto Cast instead of just releasing it for free.
Design Document
The design document for Auto Cast is a bit of a mess. It was created as a living document intended for my eyes only, and contains mostly suggestions and concepts, some of which did not make it into the game. The formatting is all over the place as I learned what worked and what didn’t and as Auto Cast evolved. I have since moved to Obsidian for creating design documents.
Regardless, you can find the design document here.