Modular Bullet Hell System?

I’m creating a 3d fighting game with a Tohou-like bullet hell system. I don’t want to hard code each pattern because each one will be linked to a modular spell system that use ScriptableObjects and allows multiple characters to use the same spell. I want each bullet attack to be modular and easily customizable via the inspector or a custom text file. I’m experimenting with BulletPro right now, but I’m worried it won’t end up meeting my needs. (For example, I doubt I’ll be able to make the bullets work in online multiplayer with Mirror) How do I create a system that allows for modular bullet hell patterns?

Modular implies there is a module to be … modeled.

In a bullet hell game, what would you consider a module?

In my experience it would be some type of pattern and frequency of shots definition, perhaps one that can be looped on a pattern at a higher level.

For example:

  • fire 3 bullets at player, middle bullet at him, left and right 10 degrees off axis of middle

  • repeat that 7 times every 0.1 second, each triplet aimed at player

  • rest 0.3 seconds, repeat

  • every 4 seconds, wait for three seconds and give the player a break

That is super-ultra simple, but it give you some options to think about. What of the above would you consider to be a “module?” Do you include the final rest?

And what is parameterizable? Speed of bullet steadily increasing? How is that modularized? Per time? Per wave? On a per-enemy basis? etc.

There’s no single answer, but at least it gets you thinking.

The first step is obviously to make the bullets and the shooter independent. For example, you don’t want a module that says “shoot bullets in a spiral pattern, and have the bullets decelerate”. Rather, you want “shoot the bullets in a spiral pattern”, and worry about what the bullets actually do separately.

Secondly, we can generalise shooting patterns. My first guess would be

  1. Arms - How many separate streams of bullets are there?
  2. Rate - How fast does each arm shoot? (Note: a non-constant rate can be simulated with multiple arms)
  3. Rotation - How does each arm rotate? It can oscillate between 2 angles or rotate at a constant speed
  4. Movement - How does each arm move relative to the shooter? This one might be unnecessary.

Thirdly, we can generalise bullet trajectories. You can probably guess these (think acceleration, rotation, expansion, whatever). You can even just use animations for each bullet type.

And lastly, put all of this into a finite state machine, or a linked list or something. Maybe your data structure can look something like

public struct ShootingModule
{
     float duration;
     ShootingPattern pattern;
     Bullet bullet;
     float exitTime;
}

and in your Shooter class, have a list of these. I am definitely missing some details, but these ideas should get you started :slight_smile:

Thanks for the advice so far, but I’m going to need something a little more specific.

This is what I was using when tooling around with Bullet Hell Patterns and whatnot… easily make new patterns, change them, and spawn them using Prefabs is what I did… might not be everything you want, but it is a free solid starting point for expanding upon.

Edit: put the wrong link

Thanks, but this uses 2d sprites. I should have mentioned in my first post that I want to use 3d meshes instead of sprites.

fair enough, but its fairly versatile… shouldn’t be too hard to convert it to 3D with a little trial and error

Upon inspecting this, I found that the system you suggested seems to support only one player and uses prefabs. Also, the process of creating patterns seems a little too complicated for me. I want (to learn how to make) an easy-to-use system that uses ScriptableObjects and allows multiple players to fire their own patterns.

The product I am aiming for is a game similar to Senko no Ronde or Maiden & Spell, but with a deckbuilding element where each card represents a different spell, or bullet pattern, that a player can launch. I will attempt to modify the system WhipJr suggested, but I am still open to other tips and suggestions!

Whoa, Google just decided to show me this:

http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/index_e.html

They say:

BulletML is the Bullet Markup Language. BulletML can describe the barrage of bullets in shooting games. (The storm of Progear, Psyvariar, Gigawing2, G DARIUS, XEVIOUS, ...) There are many advantages for using BulletML.

AND… straight into Unity with:

https://pixelnest.io/docs/bulletml-for-unity/

The BulletML plugin for Unity costs money. I’d prefer something that’s free.

Also, I would like a system that can work with online multiplayer via Mirror.

Bumping this.

BUMP. To recap, I am looking for (instructions for creating) a bullet hell system that uses ScriptableObjects, allows multiple players to fire their own patterns, and is compatible with online multiplayer systems such as Mirror.

Also, the system should have the ability to fire 3D mesh bullets and create lasers.