Robot Auto-Battler Game
Vulduin GameDev DK30 Fall 2022 3 2
Description
Going to make a game and plan to submit it for the game jam! I’m a bit ill prepared for this DK30 as I haven’t settled on a game idea heading into it but I will try to work that out over the next few days. I do have a few game ideas that have been kicking around in my head for a while now which I might pursue, but I’d like to keep the scope as small as possible this time around so I’m not sure if any of my existing ideas fit that criteria.
Recent Updates
Update #2: 11/22/22
Well, I unfortunately wasn’t able to finish my DK30 project by the deadline. Life just kind of got in the way this time around so I had a lot less time to work on it than I expected. I missed a couple of weeks worth of work due to an unexpected trip (which was a nice surprise!), getting sick, and a couple of other things that came up. Nevertheless, I’m pretty happy with the progress I made in the time I was able to work on the project. I still like my game idea and I expect to keep working on the project so at least my efforts won’t go to waste despite not finishing in time to enter it into the game jam. That said, I still want to share the work I’ve done since my last update because I have a bit more to show!
Most of the time I’ve spent working on this project since my last update has been on the robot AI. It was a bit tricky to design since it has to work for robots that have modular parts with different functions that may change the desired behavior quite a bit. For example, a glass cannon type of robot with long range weapons and low defense should behave very differently from a more durable robot with powerful melee weapons.
The system I came up with is basically a finite state machine where the transitions or dictated based on the priorities of all of the potential states, but I call the states “behaviors” and their priorities are calculated dynamically. Also, the set of behaviors that a robot has varies based on the modules that the robot has equipped. For example, the plan is to have several different types of “mobility” modules which change how the robot moves around. One of these mobility modules is the spider-legged one that all of the robots currently have because it’s the only one I’ve implemented so far, and this module’s strength is that it can move at full speed in any direction. This makes it good at kiting since it can face it’s target and move away from it at full speed, so equipping this module gives the robot AI the “Kite” behavior. Another robot with a different mobility module, such as a wheeled vehicle that can only move at full speed when driving forwards and has no lateral movement ability, might not be very good at kiting and therefore won’t have the “Kite” behavior.
Each behavior has a set of actions that are executed every frame. So the kiting behavior for example is comprised of three actions; a “move” action, a “face target” action, and an “attack target” action. The target position and target enemy of these actions are set each frame by the containing behavior before the actions are executed such that the robot will move away from the enemy being kited while still staying within attack range and attacking the targeted enemy.
So far this system seems to be working pretty well. I still have some work to do to make it more extensible and able to support all different types of behaviors, but here are the results so far with a very limited number of modules:
Lastly, as you may have noticed from the above video, I added a system for items! Right now there are only items for restoring health, but the plan is to add items that do all sorts of different things like boost speed, attack damage, give temporary invulnerability, etc. I’m not positive if this system will stay in the final design but I think adding some randomness to the environment might help keep the AI behavior from feeling too repetitive or predictable. Another way to do this that I’m considering is adding dynamic hazards to maps, such as explosive objects, areas that can flood with water/lava, etc.
Update #1 10/25/22
Today marks the end of the first week so I figured I should probably start posting some updates!
I went into this project not really knowing what I was planning to do so this first week has been a mix of brainstorming ideas, fleshing out the design of the idea that I settled on, and dipping my toes into learning some new things that I’ll need to know in order to implement my idea.
I think the best way to describe the game that I settled on is that it’s a mix of a battle-royale and an auto-battler where players assemble robots from modular pieces and pit them against each other in a tournament. The tournament is round-based with each round ending after half of the participants are eliminated. Whichever robot is the last remaining wins the tournament!
Since it’s an auto-battler, the player won’t have any control over their robot during the match. The players’ opportunity to influence the outcome of the match is between rounds where they are able to upgrade or modify their robot by choosing between sets of pseudo-randomly selected parts.
Ideally this game would be full multiplayer with a large number of participants but for the sake of the game jam I am going to make it single player with enemy robots being built by simple AI players. Even with this concession I think this game idea is a bit large in scope for the time frame.
I’m a programmer by trade and my art skills are pretty lacking so I typically try to keep my game ideas limited to things that I can make with third-party assets, but in this case that’s a bit harder to do since the robots need to be modular so different components can be swapped in and out. This means that I had to think of a way to create my own sprites/models that was doable for me. Luckily I stumbled on a tool called MagicaVoxel which I hadn’t used before but am finding to be quite intuitive and fun! It’s basically like building 3D models out of Legos or Minecraft blocks which is perfect for my needs. Outside of brainstorming, most of the actual work I did this week was making my first robot in MagicaVoxel. Here’s a render of it:
I’m pretty happy with how it came out! Since it was my first one I looked up some screenshots of some voxel robots that other more talented people made and based it on one I liked, but I made some of my own modifications and will continue to do so as I mold it into something better suited for my game (modularity is key!). I also made a few weapon attachments for this robot which can be seen below:
Heavy Guns
Flamethrower
The next step was getting this guy into the game. Right now I have it so he can walk around the level and fire his weapons, though this all has to be done manually as I haven’t written any AI code yet. Here are a few videos of it in action:
Movement
Cannon
Guns
Flamethrower
The VFX are from a low-poly asset pack I picked up a while back. Ideally I would do voxel VFX to lean into the voxel style but the low poly effects look nice so I’m going with that since I already have them.
The spidery leg movement is done with a simple form of procedural animation where the legs move to follow the body but only move one at a time with the farther legs having higher priority than closer ones. This was a fun thing to implement and I think the final effect turned out pretty nice :)
That’s it for this week! I’m happy with the progress I’ve made so far considering I had no idea what I was going to do at the beginning of the week. My plan for next week is to probably make a few more parts for the robot and then start working on the AI so they can actually battle each other.
Estimated Timeframe
Oct 19th - Nov 17th
Week 1 Goal
Week 1 Milestone - TBD
Week 2 Goal
Week 2 Milestone - TBD
Week 3 Goal
Week 3 Milestone - TBD
Week 4 Goal
Week 4 Milestone - TBD