
Staying unique in a crowded genre
So, I think it’s worth talking about my plan for BotHacker and how it differs from other games in this genre. If you’ve played the game you’ve probably noticed two main differences: No random encounters (wild bots visibly roam the overworld) and the unique energy system used in battle.
No Tall Grass
Player getting swarmed by bots because I set the spawners to high.
I’ve never liked the jarring feeling of running through grass and getting jumpscared by a random enemy, nor the lack of agency of just hoping the RNG showed up with the monster I was looking for.
Giving each bot its own wandering NPC allows a lot of options. For example, you can flee from a battle and come back. Because of that I’m looking into keeping status effects outside of battles and allow them to degrade over time rather than each new encounter resetting some or all.
You can also dodge around bots if you want to avoid a fight, adding an alternate way of getting through a higher-level dungeon than direct combat.
Right now each wildbot has a few values applied to give it a distinct movement style.
SightRange: When do they spot you and change behavior (chase or flee).
Speed: How fast do they move between tiles.
IdleTime: How long after a step do they wait before taking another. DoesFlee: This is just true or false and determines if the bot will run from you or try to attack.
To compare, the player has a Speed of 1 at a walk and 2 at a run an IdleTime of 0, so in most cases a wild bot is going to be far slower than the player. This early I’m making them very slow with only a few being as much as Speed 1, with Pack-Rat being 1.3 only it flees. Later I mean to add more complex things like jumpers that don’t walk, but leap between tiles, fliers that ignore collisions and specialized behaviors like surprise attacks from cover, or a charging state that is much faster but can’t turn or redirect and can overshoot or collide with walls.
Energy
The energy system in battle is somewhat complex and differs between each bot. Rather than each move having a set number of charges to use, they each an energy (EN) cost to use. This changes play so that early level moves don’t get instantly trashed for stronger options because our bot may not have a high enough regen rate to sustain a more powerful move. There are three main stats at play:
EnStart: When entering a battle this is how much energy the bot gets at the start of battle. EnMax: This is the maximum capacity the bot can have. EnRegen: This is how fast the bot can recharge, which happens every turn after all actions have finished.
There’s also two more hidden variables for each, called Limit and ScaleLevel, which define what each of those values will cap out at and which level that will happen. Elect-Ant for example has a Regen that starts at 3 (level 1) and a limit of 6, but will not reach that until level 90. Not great, but early game bots will be weaker.
Compare that with Pack-Rat with a starting regen is 1.8, a max of 5, but will reach that max at level 30. Great for early game, maybe not so great later.
Then there’s Imp, which has an EnStart of 20, a EnMax of 20 and regen of 0! That gives that bot a limited number of attacks before it has no options. That is until we get into positive energy moves. Recharge is a move that grants the user 12 EN. There are also moves that increase or multiple regen rate and those that add EN incrementally over several turns.
I also have a Status Effect called Overcharge that increases regen by 50%, but will damage the effected bot unless they are a Voltaic type. Now, combine that with the move Discharge which has a damage value determined by the total available EN, will use up all energy and also cure the Overcharge status, meaning a bot that can apply Overcharge to itself and has Discharge has a powerful attack combo.
This is an example of how I’m moving Status Effects from being purely negative to having complex interacts. Jamming for example is applied to your own bot, but the effects are applied to it's enemies, while Malware is a repeat damage status, but it can spread if either bot uses a Cyber type attack on the other.
Status Effects
I decided I didn’t want to limit to just one at a time. This may end up causing issues with balance, but I kinda want to see how broken things get. I kinda love a good broken system because ‘broken’ suddenly becomes the new meta. Plus, although other games seem to have only a few ‘official’ Status Effects, there are a bunch of others that don’t get an obvious tag but still play much the same.
Currently I have: Burn, Rust, Overcharge, Irradiated, System Lock, Malware, Jamming, Stunned, Frozen, and Magnetized. That doesn’t include buff and debuff to the stats. I’m working on making each fulfill a unique niche while giving some extra flavor and complex interactions between types.
Element Types
Coming up with a good list of Types that fit this world, offer unique interactions, weaknesses and strengths has been a challenge. Likely this list will change as I go but currently I have:
Hydro, Thermal, Cryo, Voltaic, Polymer, Titanium, Steel, Rust, Atomic, Lead, Magnetic, Sonic, Aero, Cyber.
This provides a lot of great matchups but you’ll note there is no clear or obvious trifecta for starters, and that’s something I struggled with for a while. The classic: Water, Fire, Grass doesn’t exist.
In the end I went for Hydro, Thermal, Polymer with the final forms being Hydro/Titanium, Thermal/Magnetic, Sonic/Polymer, which works out to a complex but effective counter triangle.
Initially I was thinking of my type chart in comparison to other type charts, and ascribing comparisons to each, for example Rust has functional similarity to Poison, but if that’s the case Rust is also kind of Ground because I use it a lot for construction or mining bots in lieu of an actual ‘Earth’ element. Ultimately any comparison falls apart upon examination.
What’s planned for the Future?
Combat Systems
I’m working on adding two-turn attacks for moves that have a charge up turn and those that have a recharge turn after, and also queued actions, attacks that take a turn or so to hit, but the user isn’t locked into that action, can act independently, and the attack will still follow-through even if they were downed in the interim. I have a list of features I want to add for various attacks with unique behaviors. I’ll be working on getting more of those in to add additional strategies. I also have plans for “battlefield effects”. Kind of status effects that alter the battlefield and everyone on it. That system is currently in the planning phase though.
Attack Anims
I reused a lot of attack animations to get the current movesets in for the itchio build, and mean to get more VFX and SFX set up for those. There’s a lot so I’ll be prioritizing early game and animations I can apply (temporarily) to several. Probably one of the most difficult parts of this game was getting GameMaker’s sequences to play nice with my animation system. It has some particularly odd ways of playing and storing data that require a whole converter. If that interests you maybe I’ll explain further.
More bots and Upgrade forms
I currently have 17 bots, 9 tier-ones, 5 tier-twos and 3 tier-threes.
I’d like to finish the forms for the bots I have in game sooner than later. Elect-Ant needs Pupa-Cell (I’ve teased their art a bit) and Elektrosect, Pack-Rat will get Cargo-Cart, Toasty will get Roasty. From there I have a list of 101 total bots I’d like to add from which I will be working through slowly.
Expanding the World
The next area I’m planning is a new town. If you go north from the abandoned Tech Campus, you’ll reach a town I’m calling Malefactory (Malefactor? Get it?) which will be overrun by brigands who use mostly steel types.
This is where I’ll be introducing more battles with other Bot Hackers. How that plays out is going to be interesting because I DO NOT want to do the “you made eye contact with me” thing. They may end up chasing the player like the bots do, or following other behaviors.