Couple of suggestions, sorry if it's a bit late as I just noticed this thread as I was perusing around the board. I know this has been attempted in the past (RIP OpenDMF) so godspeed to you for working on a new replacement.
FYI - I had been tossing the idea around for literally weeks before I even posted about it. I wanted to make sure I had the available time in the long-term to be able to support this the best I can.
1) I wouldn't use C# for this mostly because although Mono is great, I wouldn't rely on it for graphical programs. WinForms and other GUI things work DRASTICALLY different on Mono than on Windows .net to the point that you might as well use a third party toolkit, negating the whole point of using .net in the first place. Also SDL is pretty crappy on all platforms, only really useful for having a single target to hook a window to for OpenGL (which after reading is all you're using it for anyways). I would honestly look into using an existing crossplatform 2D/3D engine like Irrlicht or CrystalSpaces (definitely recommend CrystalSpaces) and just focus on coding the actual danmaku and hitbox framework.
I know you already got some code down but honestly maintainability in the long run will be MUCH easier if you stick to a preestablished engine and just code in C the object logic/patterning and hitboxing. Especially for crossplatform compatibility and just future compatibility even in Windows (look how many issues DMF has :|)
As far as using C#, WinForms and such don't even come into play in my code here; I already knew they don't work (at all, if I remember correctly) on Mono, so I don't touch them.
SDL is pretty limited for graphics itself, which is why I'm using it just to set up an OpenGL window like you say. But at the same time, it makes dealing with input and audio a lot easier than anything else I know of.
As far as preexisting engines, keep in mind that it would create significant lag-time in startup, and likely at several points mid-development, due to learning how to work with the engine and such. For that amount of time, I think it's easier for me to throw together my own code, which gives the advantages of not being limited by what's "under the hood" (since, if it's not there already, someone can just put it in) and having the engine custom-tailored to our needs.
Also, I get the impression that most game engines are optimized to deliver a set game speed, regardless of framerate. This is rather unlike what I think we want in a game like this (the official games, for instance, play at the frame rate) because, usually, varying frame rates gives rise to inconsistencies in how the game behaves each time - due to, for instance, one time the frame landing on timestamp 5.443 and another time the frame landing on timestamp 5.445.
And, of course, there's always licensing concerns. While most things are probably fine, we do need to keep an eye on things, so we don't go pissing people off.
As far as C vs. C#, I've done similar things in C++ before (for intance, my currently-on-hold-due-to-lack-of-ideas STG SphereTide Gunner), and it was a royal bitch keeping things organized. C# is a much cleaner language in this regard. Plus, automatic garbage collection = no worries of memory leaks.
2) Yes use an existing scripting engine/language rather than invent your own parser/lexer. Lua was designed specifically for this, and it's stupid easy to embed it or something like Python or Ruby. It's infinitely easier to just use an existing language and have people learn to use it rather than invent and maintain your own parser and lexer. Maintainability comes back into play here, as you won't have to worry about making code binds for every little thing. You just have to code key functions you want to expose to the scripts, and let the language handle the flow and logic.
I don't really have much knowledge of Lua and such. I should probably look into it.
Main concerns would be syntax of the script file, with the ability to keep related scripts together in an organized fashion.
By the way, I hate Python. Indentation as syntax is a horrible idea, in my opinion.
![Angry >:(](/forum/Smileys/default/angry.gif)
Ruby, on the other hand, I have no experience with.
Plus with older DMF scripts you can just build a conversion tool and then just hand-fix any oddities rather than trying to match DMF's syntax and usage word for word.
Certainly doable, but would be hell and a half to implement. Especially with some of the differences in how things are structured. (Which were restructured as such to simplify scripting and eliminate some of the unnecessary limitations in Danmakufu)
Basically what I'm trying to say is, it's great you're doing it, but you really don't have to reinvent the wheel. Using already built stuff like the game engine and script language will let you focus more on what actually matters, coding the danmaku framework and script bindings, and will be much easier to maintain and complete and make crossplatform.
The thing is, I already know a good amount of OpenGL/SDL and C# development, and the entire engine structure came together mentally in maybe a day or two of mostly idle thinking about it. On the other hand, like I said before, I generally have little to no idea about interfaces, APIs, etc. regarding already-built engines and such.
btw - please don't think I'm trying to be disagreeable here. I'm just stating my side of things. Feel free to counter-point and such, as you see fit.
Good luck, and if you'd like some help I'd definitely be willing to throw a few programming hours into it, although I don't really have much time right now to devote to it. I'd be willing to setup Mercurial repository and bugtracker for the project so people can collectively work on the source and contribute as necessary rather than forcing the load just onto you.
Thanks. While it might seems a bit selfish/arrogant, I'd like to at least get this thing to a working, stable point before I start posting code/builds. Right now it still needs some stuff added in, notably:
- Input - simple task, maybe a couple hours of coding at worst
- Reading script files (Either proprietary or pre-defined script format) - depends on where we go with this. Probably the biggest unknown, since either I'm using ANTLR to generate a parser (which I started experimenting with already), or I'm going to be reading up tutorials on Lua.
- Execution Engine (may be rendered moot by script language selection) - not as long as it sounds like for a basic, yet "full" set of features.
- A script selection menu - probably a couple hours of coding to get it to a decent-looking point (save for actual images, since I suck at art)
- Font rendering - the only real weakness in OpenGL's drawing setup, IMO. I may be able to hook into SDL.Net's font functions to generate an image-based font internally, though.
It wouldn't really be a problem of balance.
Actually, I would argue that balance is the primary concern with this idea. Most player/shot types have specific strengths and weaknesses:
- ReimuA - homing shots and small hitbox, but low power shots
- MarisaB - high power and really awesome bomb, but needs to be directly aligned with targets (and moves so fast you can't dodge accurately if you suck
like me
By allowing the player to switch out characters/shot types at will (which is how I understand your idea), it would allow players to easily break this pro/con setup by swapping to characters whose disadvantages aren't a concern at the moment.
Implementation-wise, though, I doubt it'd be too hard to do. Just swap the current player object with a new one for the new player type.
Also, and this isn't any kind of important issue, but was there any specific font style you had in mind for any in-game text? I know a few Touhou games had their own custom-style font sets, and was just wondering if you had any ideas on that thus far.
I don't really have any ideas in this regard yet. My biggest concern is actually getting font support in order, for which we may have to rely on an image-mapped font. This is the only significant disadvantage of the OpenGL/SDL setup that I know of, since OpenGL doesn't have good/any font support.
However, I might be able to abuse SDL.Net's font class to generate an image map font on-the-fly ... I should look into this.
EDIT:Due to an unscheduled lack of commitments and other crap, I'm actually at my desktop, and I just got in a mini-update to the program - it now reads inputs.
Currently it's limited to the default keyboard inputs we all know and love/hate/feel indifferent about; configurable controls can be added in later (it's already half setup for that - just need to add in storage to hold the control configuration and processing for controllers).
I'm also spending a bit of time looking at scripting languages, font support, and such.
Please note that this is an exception to the rule - most weekdays I'll be too bogged down with stuff to do much more than stopping by here on my laptop. Weekends should yield more positive results.