Recently I finished the enemy robot rework I was planning to do. It was successful, the first type of robot is mostly finished, and the other types can be more easily added later, now that I got the basic framework down.
The old enemy was a lot simpler but had its downfalls. Due to its 3d model it only allowed the full-body animations, without any separate moving parts. Its audio system spawned sounds at the location, which meant they wouldn't travel with the robot if it moved after saying a voice line.
Traveling itself was very limited too. Robot would move between 3 hard-coded points in space when there was nothing else to do and would not chase player during an attack task. In general, task following was done through some state checks and would be hard to test and maintain on a larger scale. This and other things basically made the old robot into a training dummy with no character and very basic interactions.
In comparison, new robot Toaster gets a lot of improvement, and there opens up a potential for new enemy types down the line. Toaster now has a different type of 3d model that allows it to have a wider range of animations. Its audio system is more complex: some voice lines take precedence over others and will always interrupt any other voice line. Any spawned sounds now travel with the robot and get a chance to be skipped on repeated tasks.
Movement is less restricted - idling is now completely random within boundaries. Each robot gets its own small area where it can move between any randomly chosen positions. Moreover, robots can now recoil after taking damage and get temporary invulnerability (with a subtle visual cue) to prevent them from getting kebab'd with bullets. And to top it off, they get the ability to dash around after shooting their shots and continue to chase player if that one dares to run away.
Task following is now done through a mix of behavior trees and states. It is much easier to debug and extend functionality for any potential new entities. Overall, Toaster is much more defined character-wise. This is the first type of robot to meet the main character and, while it might seem dangerous at first, is more of a menace to itself and other robots than to the player.
This is reflected in its special ability during which Toaster "breaks": it becomes inactive temporarily and starts shooting harmful energy bursts, dealing damage to itself and everyone around it.
For now, this is all I wanted to do with the enemies for the demo version (besides polishing the changes, of course). Next thing I'm planning to do is reworking player abilities - I had a lot of time to think through my ideas for those and take into account players' feedback.
0 comments