I have to say, I am rather impressed with your project. I feel I am trying to achieve similar things with my own, though the way I am going the engine is now specialized towards completing my thesis in Adaptive AI for a Bullet Hell game. In any case, it would be nice to have some help in improving my Warlockery Engine for future work. Also I have a XML data-driven set up for scripting my bullets, bullet patterns and enemies. I am curious if you were planning anything similar for Bloom Engine. In that regard, I am wondering about the "ZUN design" you mentioned in the original post.
I considered it but didn't think it would be too necessary given that there's a live sandbox mode and it's easy to script bullet patterns without using many loops and wait()s.
It shouldn't be too hard to add and I can work it into the resource system so that patterns can be referred to by name and be automatically guarded from unnecessary repeated loading.
A few things I am curious about as a fellow developer.
Last time I stress tested my system it started dropping below 60 fps at around 2500 bullets. I have yet to multi thread my system either. I'm curious if you've used an object pool to help with the system having to allocate/deallocate tons of bullets.
I use simple global objects list (System.Collection.Generic.List) and when an object is deleted it has a flag set and then at the end of the update all objects with that flag set are removed from the list in a loop. Not exactly fast if you, say, delete thousands of objects per second, though.
Most of time when a game lags in the engine it's from too much rendering. I use the MonoGame built in spritebatch to do rendering of objects, with depth sorting disabled and opting for multiple "layers" instead. It doesn't sound like this would help too much but it made all the difference in handling a lot of bullets at once.
Yes, as I've developed and tested more and more things going on at once I have seen a decline; before I estimated around 8000-9000 bullets at 60 FPS but that has since dropped to about 6000-7000 at normal operation with some effects and basic 3D backgrounds thrown in (specifically the demo in the main screenshot I have up right now.)
As for my computer I have an AMD FX 6300 GPU and an AMD A8-5557M CPU, and I'm running Linux. I can't play anything anywhere near modern games on minimum but it's an okay setup.
I particularly want to know a bit more how you did the Bend class for the curved lasers. I did a cubic hermite spline for the enemy flight paths, is that similar to how you use points and angles to set paths for your curvy lasers?Given that, how do you handle the collision. Sorry if I'm imposing here. I am simply a fellow developer hoping to learn how the heck to do curvy lasers.
It's just a simple primitive with the vertices placed at each point, offset with cos and sin using the angle of that point.
Visual example:
http://pix.toile-libre.org/upload/original/1483577102.pngAt the moment the hitboxes are placed at each point (generally they're closer together than in that example) but with really fast lasers this could lead to not getting hit when you should, so I might change how I do it.
Will this have the capability to develop non-danmakufu style games?
Do you mean scrolling shooter games in general? It could be used to make something like Dodonpachi or Gradius though it's made to be easiest to do 2hu style games.
It could theoretically be used to make mainly 2D non-scrolling-shooter games too such as RPGs and platformers but I'm not sure I recommend it. You'd probably be better off using an engine designed for the type of game you want to make, or making your own engine.
Reasons being that it has no built in tile rendering system, grid-based collision checking, or many other features that are great for genres outside scrolling shooter/bullet hell games.
I'm extremely sick right now so I won't be doing updates for a while and I might be late to answer questions.