Every adventure game needs bad guys. As you wander around in the world of Mario you’re presented with anything from weird shaped Mr Potato Mushrooms to Giant Spike Turtles that fly around in pirate ships. What kind of bad guys are we designing today? And what inspiration can we draw from?
Mario has some stellar enemy designs! Turtles that can get back in their shells – shells which are actually available as a weapon if you boop the turtle out of them – dumb koopas which just traverse a patrol route, turtles that throw boomarangs, footballers that charge you, giant slow angry cannon balls that can crush you, and so many more. I really wanted some cute enemies that were a nice cozy vibe, not too scary, just clearly enemies.
Some kind of floating spikey cactus guy, because why not? There we lots of choices… Slime, mushrooms, fruit-based, animals, various monsters, etc. Plenty of weird stuff on the Asset Store, but really I wasn’t particularly drawn to any of them. The cozy cute vibe just seems non-existant outside of anime based slime creatures which were just kind of disappointing overall. It’s amazing the impact that Mario has in the ‘feel’ and ‘design’ community, but not in the ‘art’ community. Even when people execute similar art styles or fan projects its simply not mimic’d like the amazing design features of Mario are.
I settled on a kit that had some pokemon-like monsters and their weaker ‘evolutions’ were somewhat applicable to the theme I was trying to go with so I got them rolling in.
We’ve got booping from above, boops from below, damage, chasing, patrols, and a few more knick-knacks. This part was a little bit tricky because you need support for jumping on top of enemies to get rid of them, but you also need to be hurt when you touch them. Balancing these hit-boxes has been a regular challenge and I may need a fancier way of doing it altogether because the trigger volumes are super tedious to mess with and get perfect.
I also added Crazy Chickens that work like Mario’s turtle shells. Oh – and you can pick things up now. Like, crazy chickens and boxes. I don’t know why, but you can.
Eventually when I got the enemies chasing me around I wondered how to design them to be flexible enough to work anywhere in the level. I added some steering features and just made the ai functionality basically just use the locomotion that the player uses, so it just inputs steering vectors to do what it wants. If the target player is higher than it and there’s something in the way, it’ll try to jump over it.
This was way easier to implement than I expected it to be. They definitely get stuck in some places, but there’s no NavMesh requirements, no crazy A* algorithm, no design requirements, just some dude steering around the scene and trying to jump if he needs to. I’m pretty stoked at the result for the amount of effort it took and I should be able to sort out the getting stuck on walls and stuff.
There’s also a “Debug” world, and some easy toggles to get there which made testing much simpler. I think that it’s really helpful to design whatever you’re doing in a way that lets you test with minimal effort. Just press play and poof its just there and working. Throw things in, they work. Drop a player in, it works. Assign control to a mushroom, it works – wait, what?
I was also impressed that in Mario games there’s really no Human enemies. I remembered some interview about it where the quote was something like “humans shouldn’t be fighting other humans” and I think that was a really interesting design pillar to have, so I’ve started designing enemies with a similar idea. It’s also really cool in some games where passive play is entirely viable (undertale) which opens up a lot of creative ideas which are actually much more mentally stimulating than “shoot the enemy to win”.
Maybe these observations are something that makes Mario games to appealing in the first place?
Chuck the Beetle made an appearance too! Here’s the last one for today.
Chuck was an interesting one because he has several different sub-phases required to do his thinking (note the indicator over his head for debugging). Once he is engaging the player, he will 1) pause to think, 2) rotate to aim, 3) charge! If he hits a wall, he’ll stop for a moment and roll back to 1 and think about his life choices before trying again. While hes charging he has only minor control over his steering as the turn speed is reduced while charging. Normally his turn speed is average, and since I didn’t want to have his charge be completely straight, he’s got some control but not enough to make him an unpredictable chasing mess of a monster.