An attempt at the Bullet Hell genre

first run of gameplay before the player was implemented

I figured I would scratch the itch of making something quick by taking part in a game jam. I opened up itch.io's list of ongoing and upcoming game jams and started loking for one that sounded like a new challenge. One of the first ones to grab my attention was the Bullet Hell Jam. I'd never made a bullet hell game and I immediately thought I could use it as an opportunity to learn some of Unity's ECS. It was settled, this was the jam I planned to work on that weekend. A day or two later, the game jam began and they announced the limitation/theme 10 Seconds. After a few ideas, I landed on trying to make a wave-based bullet hell where you had to survive 10 second rounds of bullets flying around an arena, then you spent the next 10 seconds shopping for an attribute to increase, and then you'd face another round of bullets. 10 seconds on, 10 seconds off. I didn't exactly know what attributes the player would have the option to alter, but I knew I'd get there sooner or later, so I created a new project in Unity and got to work.

The Arena!

I started off by thinking through what the level would look like and how it would function. I started to think of a sci-fi themed level with equipment that would emerge from the environment via the opening of panels and such. I'm not much of an artist or animator and would never claim to be one. Knowing this, I knew that my environment would have to fairly simple with an easy solution for entities like turrets to appear from. I imported ProBuilder, a hybrid 3D modeling/level design tool acquired by Unity, into my project, created a probuilder cube, subdivided the face that I planned to use as the floor and slapped a prototyping grid texture on the cube so that it would line up with the new faces of the geometry. By extruding one of these faces by 0units then moving it down, I created sort of "slots" for my turrets to sit inside of. After I had a simple pattern of turret holes, I covered them with the panel I planned on using as the "door" for the turret enclosure.

single turret tile tweening open and closed
all turret tiles tweening open and closed

The Tweens!

If you want your game to look and feel smooth, there's nothing like throwing a ton of juicy tweens to make your scene a bit more alive! I really like the functionality of a particular tweening library, DOTween by Demigiant, so I imported that into my project and got to tweening. I messed around with a few different door opening styles before I landed on this one on account of how quick it could make way for the turret and the round could start. A shakey, mechanical drop followed by a brisk slide over and out of sight. Using a few dust/cloud sprites, I threw a quick particle effect on there that was triggered at the start of the tween of the door opening and the end of the door closing. I had a very similar process when working out the tweens for the turrets emerging out from their enclosures. But tweens aren't the answer to everything!

Well... that didn't work.

One thing I severely underestimated was the time I would spend trying to get the turrets to shoot in interesting patterns. I was originally just spawning bullets from each of the turret barrels sequentially, but that created areas of the environment that the player was able to just hunker down and sit still for the whole round. You can see that in the image to the right. I wasn't a fan of it. So I thought, well what if I also rotated the head of the turret in one of a handful of predefined trigonometric function-based rotations (sin, cos, tan(additive rotation), or just linear) while shooting in one of a handful of predefined firing patterns (shotgun, burst, full auto, etc.)? While this definitely made the bullets less predictable, I don't know how I expected this to result in patterns that made gameplay any better. There were just bullets everywhere at this point. Not a terrible thing for a bullet hell to have, but I felt it was too random. I feel that my the few solutions I tried weren't bad, but I may have been mixing too many variables. Turrets with multiple firing points and timed/function-based firing patterns may have been too much to result in patterns I had expected. I ended up coming to the realization that the best approach would be to hand-design sequences for these patterns. Something that I just didn't feel I had time for if I wanted something playable for the game jam. So instead I ended up planning on giving the player the ability to dash through a series of bullets if they found themself in a pickle.

turrets popping into the arena