Designing bosses (and all challenges, really) for this game is tricky, because the character's abilities aren't bounded the way most platform heroes' are. A lot of standard platformer tropes don't really work. Because Mabel can fly, I can't put her in danger of falling off the screen; I can't put a boss's vulnerable spot high up in the air; I can't assume that the player will stay within a certain distance from the floor.
As I mentioned last time, I also wanted to avoid filling the screen with projectiles; that would make a boss harder, for sure, but it wasn't the feel I was going for in this game. My reference point here was Super Mario Bros. 3, not Ikaruga; I wanted enemies large and small to feel engaging and challenging, but always clear, simple, and readable too.
As I mentioned last time, I also wanted to avoid filling the screen with projectiles; that would make a boss harder, for sure, but it wasn't the feel I was going for in this game. My reference point here was Super Mario Bros. 3, not Ikaruga; I wanted enemies large and small to feel engaging and challenging, but always clear, simple, and readable too.
My initial idea for the boss of World 3, the ocean world, was a classic multisegmented serpent type boss, of the kind seen in countless 8- and 16-bit games; given Witcheye's focus on precise attacks on moving targets, it seemed appropriate and challenging. Ultimately, though, it felt a little too rote (again, see "countless 8- and 16-bit games"), so I decided to save it for a later miniboss, with some little twists, and do something more interesting for World 3.
It occurred to me that an octopus with rotating tentacles could work--a test of how well you could control the character in World 3's water physics, creating a constant threat in a simple, instantly understandable way. Here was my first prototype:
It occurred to me that an octopus with rotating tentacles could work--a test of how well you could control the character in World 3's water physics, creating a constant threat in a simple, instantly understandable way. Here was my first prototype:
Cycloptopus here recoils when you hit him, and the tentacles rotate faster with each hit until he dies.
So, not the prettiest thing, but call it a proof of concept. When I finally had it all rigged up, it was actually pretty fun, but it felt a little primitive, both visually and gameplay-wise. Visually, it's a weird angle to be looking at an octopus, and the concept of moving around the thing a full 360 degrees required that it stay at that weird angle. Gameplay-wise, the rigid sprite-based tentacles felt stiff to engage with, and the fight felt unstructured--just doing the same thing over and over. A song with no chorus, if you will. The distinction between hittable spots and damaging spots also felt fussy and unclear; sometimes it seemed like you were OK, but the space between tentacles at the base was really small, and that made it frustrating.
All that aside, the idea worked well enough that I decided to go with it. The first thing I had to fix was the look. I drafted up a less awkwardly posed body for the boss, and decided to replace the rigid single-sprite tentacles with multisegmented ones (again, a nod to the multisegmented 8- and 16-bit style of yore). I was pretty amazed when my tentacle code worked on the first try.
This was already feeling better, but the problem with a cramped target area remained. I decided three tentacles would be better than four--enough to get the point across, so the poor guy wouldn't look totally disarmed, but leaving enough space to hit his fleshy underside.
So, not the prettiest thing, but call it a proof of concept. When I finally had it all rigged up, it was actually pretty fun, but it felt a little primitive, both visually and gameplay-wise. Visually, it's a weird angle to be looking at an octopus, and the concept of moving around the thing a full 360 degrees required that it stay at that weird angle. Gameplay-wise, the rigid sprite-based tentacles felt stiff to engage with, and the fight felt unstructured--just doing the same thing over and over. A song with no chorus, if you will. The distinction between hittable spots and damaging spots also felt fussy and unclear; sometimes it seemed like you were OK, but the space between tentacles at the base was really small, and that made it frustrating.
All that aside, the idea worked well enough that I decided to go with it. The first thing I had to fix was the look. I drafted up a less awkwardly posed body for the boss, and decided to replace the rigid single-sprite tentacles with multisegmented ones (again, a nod to the multisegmented 8- and 16-bit style of yore). I was pretty amazed when my tentacle code worked on the first try.
This was already feeling better, but the problem with a cramped target area remained. I decided three tentacles would be better than four--enough to get the point across, so the poor guy wouldn't look totally disarmed, but leaving enough space to hit his fleshy underside.
Speaking of fleshy underside, once I saw my new creature in motion, I realized that, obviously, when he was presented at this angle, the simplest thing would be to hit him from the top or the sides, avoiding the tentacle area altogether. That clearly would defeat the entire purpose of the tentacles, so something needed to be done. I added spikes around the top and sides of the head to ward the player off. This had the added benefit of making him look cooler and more regal, like some kind of samurai squid.
On to the question of repetitiveness. What was the right way to vary the tempo of the fight? Was it enough to just have the tentacles speed up as you hit him? No--it felt like there needed to be more of a sense that you were proceeding through phases. Now, an aside here: I don't really like long boss fights. I don't like bosses with endless phases; I don't like bosses that soak up a ton of hits. The bosses in the Metroid Prime games make me want to stop playing. (My fire-button finger is aching at the memory.) When a boss takes ten minutes to fight, the designer also can't make it very difficult, because it would be too annoying to retry. The ideal to me is a Mega Man boss--fast, tough, quick to restart, doable in seconds once you know how.
So I didn't want to slow things down too much. I just wanted to give the fight some structure and make you feel like you were making progress. For the same reason, I also don't like bosses that have long periods of invulnerability (who plays games for the thrill of waiting for a glowing orb to open up?), so I had to be careful about how I did it.
I decided to divide the Cycloptopus fight into three phases; each time you score three hits on him, he'll freak out and thrash around the room in a circle, waving his tentacles, then return to his normal pattern, but moving faster. You can't hit him while he's circling, so I'm breaking my own rule here (OK, it's more of a guideline), but the move is dangerous and fast; it's not like you're just sitting there waiting for him to finish. Here's how it broke down:
HOVERING - SPEED 1
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 2
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 3
score 3 hits -> victory
I decided to divide the Cycloptopus fight into three phases; each time you score three hits on him, he'll freak out and thrash around the room in a circle, waving his tentacles, then return to his normal pattern, but moving faster. You can't hit him while he's circling, so I'm breaking my own rule here (OK, it's more of a guideline), but the move is dangerous and fast; it's not like you're just sitting there waiting for him to finish. Here's how it broke down:
HOVERING - SPEED 1
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 2
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 3
score 3 hits -> victory
This felt pretty good--there was variety, increasing difficulty, concrete evidence that you were making progress, rising tension when you saw how fast he was moving after the thrashy part. One quick tweak I made after a few runs on this version was that it didn't feel climactic enough to beat him. The last hit you had to score, he was moving at the same speed as the previous two hits. So I added a final phase:
HOVERING - SPEED 1
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 2
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 3
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 4
score 1 hit -> victory
This gave you one last scare when he was moving super fast at the end--hard, but you only have to hit him once. I thought that would give the player the feel of a nail-biter ending, while being not TOO likely to kill them frustratingly right at the finish line.
The pacing felt great now, but something was bothering me; it was possible to just hang out at the bottom of the screen invulnerably and wait. Doing that didn't accomplish anything, but it didn't feel active and engaging, either. Plus, I had character to think about. I didn't want it to feel like you, the player, were just going into this creature's domain and beating him up when he essentially had no beef with you. His aggression needed to match yours.
I decided to give him a projectile--but only one, and a simple one. Periodically, he'll fire a wide crescent-shaped beam straight down from his eyeball. That meant that you couldn't just hang out underneath him forever. Suddenly the bottom half of the screen felt like an active space.
Having him fire without warning felt a little unfair, so I made his eyeball flash for a few frames before he fires. He also slows down a little in his endless circling. Both of those effects give you a warning even if you aren't looking directly at him.
HOVERING - SPEED 1
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 2
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 3
score 3 hits
THRASHY CIRCLING
HOVERING - SPEED 4
score 1 hit -> victory
This gave you one last scare when he was moving super fast at the end--hard, but you only have to hit him once. I thought that would give the player the feel of a nail-biter ending, while being not TOO likely to kill them frustratingly right at the finish line.
The pacing felt great now, but something was bothering me; it was possible to just hang out at the bottom of the screen invulnerably and wait. Doing that didn't accomplish anything, but it didn't feel active and engaging, either. Plus, I had character to think about. I didn't want it to feel like you, the player, were just going into this creature's domain and beating him up when he essentially had no beef with you. His aggression needed to match yours.
I decided to give him a projectile--but only one, and a simple one. Periodically, he'll fire a wide crescent-shaped beam straight down from his eyeball. That meant that you couldn't just hang out underneath him forever. Suddenly the bottom half of the screen felt like an active space.
Having him fire without warning felt a little unfair, so I made his eyeball flash for a few frames before he fires. He also slows down a little in his endless circling. Both of those effects give you a warning even if you aren't looking directly at him.
Now things were really cooking. It's amazing to feel a gameplay element becoming more fun as you tweak it; it's hard to believe that you can do it sometimes, but if you're tenacious, all the little changes really do start to add up to an intangible "rightness."
A few more little changes were in order. Because the water physics of this game push you upwards on every frame, you'd sometimes get hit by a tentacle immediately after successfully hitting the boss's underside; the upward push kept you from bouncing safely away. That didn't seem fair or fun, so I did two things: I added a "hard rebound" flag to Cycloptopus's attributes, so that the player's rebounding speed upon hitting him is doubled. That pushes you more quickly out of the way. I also made the collision boxes on the tentacles quietly disable during the boss's invincibility frames, so that if you happen to catch the edge of a tentacle while rebounding, you'll pass safely through. This had the potential to make the tentacle collision feel janky or broken, but because you were getting slapped back downward quickly, the disabled tentacles ended up being mostly invisible to the player--just a little margin of grace to make the experience less frustrating.
Speaking of which, the boss was HARD. I could beat it, but by this point I had played it possibly more than anyone else in the world ever would, so I wasn't a good barometer. (And even then, I still got hit every time.) So the last round of tweaks was simple: I slowed down the boss's tentacles, slowed down his speed while hovering, slowed down the speed of his projectiles, slowed down his thrashy freakouts, and shrank the hitboxes a little on both the projectiles and the tentacles. (As I wrote about here, this last one is a good trick to keep in mind. You don't want to do it so much that the game feels broken, but if you can give the player an occasional feeling of "YIKES I just BARELY missed that"--because the graphic of the damaging object is slightly larger than its effective boundaries--you can make the fight more exciting and less frustrating at once.)
Voila! A boss that's distinct from the other enemies, intimidating, challenging, easily "readable," not a hit-sponge, not a producer of bullet hells, difficult but beatable within 30 seconds with a little practice. It was truly gratifying to start from a simple idea (and a janky test version) and work up to an engaging fleshed-out encounter. (And, PS, I did eventually get my segmented serpent.) Thanks for reading!
A few more little changes were in order. Because the water physics of this game push you upwards on every frame, you'd sometimes get hit by a tentacle immediately after successfully hitting the boss's underside; the upward push kept you from bouncing safely away. That didn't seem fair or fun, so I did two things: I added a "hard rebound" flag to Cycloptopus's attributes, so that the player's rebounding speed upon hitting him is doubled. That pushes you more quickly out of the way. I also made the collision boxes on the tentacles quietly disable during the boss's invincibility frames, so that if you happen to catch the edge of a tentacle while rebounding, you'll pass safely through. This had the potential to make the tentacle collision feel janky or broken, but because you were getting slapped back downward quickly, the disabled tentacles ended up being mostly invisible to the player--just a little margin of grace to make the experience less frustrating.
Speaking of which, the boss was HARD. I could beat it, but by this point I had played it possibly more than anyone else in the world ever would, so I wasn't a good barometer. (And even then, I still got hit every time.) So the last round of tweaks was simple: I slowed down the boss's tentacles, slowed down his speed while hovering, slowed down the speed of his projectiles, slowed down his thrashy freakouts, and shrank the hitboxes a little on both the projectiles and the tentacles. (As I wrote about here, this last one is a good trick to keep in mind. You don't want to do it so much that the game feels broken, but if you can give the player an occasional feeling of "YIKES I just BARELY missed that"--because the graphic of the damaging object is slightly larger than its effective boundaries--you can make the fight more exciting and less frustrating at once.)
Voila! A boss that's distinct from the other enemies, intimidating, challenging, easily "readable," not a hit-sponge, not a producer of bullet hells, difficult but beatable within 30 seconds with a little practice. It was truly gratifying to start from a simple idea (and a janky test version) and work up to an engaging fleshed-out encounter. (And, PS, I did eventually get my segmented serpent.) Thanks for reading!