Very unlikely I'll have a testing release tonight, but I'd say so far the progress is pretty good.
Jesus dude, I wasn't expecting a working beta for weeks ...
Well, I don't want you guys to expect something too soon ... like I said before I only really have time for this on the weekends (and that's only after I get more important weekend activities out of the way, like sleep).
Here's a summary of the progress so far:
- Basic Structure:
- Basic setup of class structures for Objects and Object Types.
- Rendering Engine:
- Window setup and SDL/OpenGL initialization.
- Temporary code to draw a triangle for each Object.
- Execution Engine:
- Basic setup of class structures for Script containers.
- Coded variable lookup and assignment.
- Started work on core execution engine.
- Other:
- Simple angle & speed movement for Objects
Basically, it's a lot of back-end work that needs to be done, but ultimately isn't worth showing off. :V
Note that, when I say "Execution Engine", I'm referring to the code that actually executes scripts. This does
not include parsing script files - at this point the script has already been converted into a simple, almost assembler-like code that is very straightforward to execute in realtime. Right now the only instruction it knows is
add, and it can only do it with numbers right now (plan is to use that same function for string concatenation and boolean OR, and well as to convert an int/bool to a string to concatenate to another string). So, here's the 'script' the program has hard-coded into it right now:
Initialize:
add global["a"], 1.0, 1.5Tick:
add global["a"], 0.1, global["a"](This isn't what it actually looks like - really it's coded in by directly assigning the pieces of the script instruction array - really ugly to read and completely temporary for testing purposes)
In other words, it starts by setting the global-scope variable
a to 1.0 + 1.5. Then, each frame, the tick function adds 0.1 to it. Currently, the game spawns two objects, so thats a total of +0.2 per frame. Combine that with a temporary display of the value on the title bar to make sure it's working. Wheee~
If it were an actual script language, it would probably look something like:
Musuu
Script[ScriptType]
// 'a' is a global variable
global a;
// Define an enemy boss object type
Boss "A Boss"
{
// Define the initialization script
Initialize
{
a = 1.0 + 1.5;
}
// Define the tick (per-frame) script
Tick
{
a = a + 0.1;
}
}
Of course, this is purely speculative syntax at this point. The first line indicates that it is a Musuu no Danmaku script file, which the second line indicates the script file's type (as in, what syntax the file will have); this will allow multiple different script formats to be supported easily.
For the angle/speed movement thing - All Objects have an angle and speed parameter, which can be set to give them simple movement. More movement options will, of course, be added, but this was simple enough to throw in there right away.
There's still a ton of things to get in before any sort of testing release ... notably:
- Finish the Execution Engine
- Load and Render Images, as well as finish other touches of the rendering system
- Collision Detection
- A Menu to Select Scripts
- Input
- Parsing an Actual Script Language (unless you people are crazy enough to try scripting in pseudo-assembler)
... did I miss anything critical?
... at this rate I'm actually going to have to script something in Danmakufu before it becomes obsolete!
Going by Drake's offer, obsoleting Danmakufu is going to be necessary if I ever want to finish my biggest Danmakufu script ever, so, despite leading this effort, I'll probably be one of the last ones here to fully switch over. :V