Worklog for RonTek - BlitzX: The Next Blitz3D?
Tweet blitz3d blitzbasic blitzplus worklogs
Finally I got something up to get started on getting this site's own Blitz3D version. Nothing really concrete, but the premise is very similar to existing next Blitz3D projects out there, and this time my take on this would be to make sure basic things should work out of the box (installation and beginner) and at least make it 99.9% compatible (or at least the critical or most used features ). In case this topic have gone or went under the radar, I did plan and mentioned this a few months ago here along with other stuff.
As far as underlying engine tech goes, nothing really new or cutting edge, in fact it will be using existing 3D frameworks, but should now support modern 3D engine features like textured shadows, gpu and game features, material and postfx shaders which Blitz3D is lacking.
I have not made up any licensing details yet since it is too early to decide, but for sure on the end-user side it will be free as in freeware with full features. With that in mind, the first order of business is to strip out and replace FMOD which has some proprietary licensing issues. I have already tested several alternatives out there which I am going to follow-up and present some demos with my next worklog update.
As for supporting the project, we can worry about that later on. The first and foremost goal is for this community to hopefully gather up new indie coders who are familiar and interested with anything Blitz3D, BASIC and BlitzBasic style approach and would like something more. As for backward compatibility, of course we'll try to support and make it run old code as well as present new and extended Blitz3D features.
We'll go with BlitzX for now as far as naming or branding goes. It does not imply or making it cross-platform is not what I have originally in mind, but it will be one more major goal to have on the wishlist.
More ideas left and thoughts to talk about and so I thought I should make this intro post first to jump start this project and site's very own Blitz3D version.
This is BlitzX, a.k.a Blitz3D: BlitzCoder Edition.
I have started diving into the terrain component with the most common setup.
What's also nice about Ogre3D's terrain system is that it supports terrain groups, paging and normal maps from the get go!
Terrain blending is also supported with a height based and custom blend map option so no need for excess work or computations from the devs.
I have started combing through what functions would make the cut and what will be deprecated. Mostly that will be the MD2 model commands and other specific functions that does not apply to a modern 3d renderer/engine.
For compatibility, I was also thinking of still adding most of these function with a no operation or empty call or just emulate the nearest command (Ex LoadMD2 = LoadMesh)
..and yes, BSP levels and commands can be included since it is also supported by Ogre
Back to 3D! I have now started working on building the API and wrapper from scratch.
For the preliminary test, I have added the most basic test commands to the API, Graphics3D, CreateCamera, UpdateWorld, RenderWorld, LoadMesh and TurnEntity.
Thinking of having a new name for the project as well, but for now we'll go with BlitzX
Took a very short break with extending the 3D wrapper and decided to put up some basic 2D stuff with the planned SDL backend to handle the 2D features among other options, came up with some simple image loading to start with.
Tested in my clean XP installation to make sure the build is right and simple with a single exe and does not need any external DLL dependencies.
Just some test that I have been doing lately. With Ogre3D's typical SDK releases has a bunch of DLLs, this is a simplified single exe version that loads and plays a 3D model animation (Sinbad).
To update what's up with the project, I'm still following most planned libraries to include..
- Blitz/Blitz3D like syntax (transpiled)
- 3D Renderer (Ogre3D) 1st choice
- Sound (OpenAL)
- Input System (OIS)
- Built-in GUI Functions
- World Editor
- Image Based Lighting / PBR
- Basic 2D Functions/Support
- Cross Platform Support
I may have spoken too soon, but a week of testing out some stuff, I feel that I might continue this or use the same name. This is still moving away from Blitz3D code base and will start with BlitzMax mod and then move with something else that is more flexible.
I believe that variety is the spice of life and would be giving away to the Blitz3D-NG project since they are very similar in goals.
On the brighter side, I will be jump starting a new project that is much closer to me and would still be 3D related and will involve both BlitzMax and later Blitz3D (hopefully Monkey-X too).
After some long pondering and observation, I decided to put the complete rewrite and change of toolset at the back burner and try again to move forward with the changes on the current code base. This time I am thinking of making small changes that will make it different along with some noticeable improvements.
Some items on the top of my head now:
- Use OpenAL (or OpenAL Soft) as the default instead of FMOD or SoLoud sound. After some research and tests, I find it to be a really great choice for both 2D and 3D sound. Cross platform is also greatly supported, think web first. Other game engines also preferred OpenAL for their sound component.
- Add IncBin feature just as we have on BlitzMax. I did some initial tests and it seems to be going smoothly.
- Shared user contributions over the years that are great candidates for feature inclusion.
Long Term and Cross Platform Goals
- Use OpenGL or an existing renderer engine that supports it as the default renderer. Stripping the DX7 legacy features while trying to maintain compatibility.
- SDL2 is still a key component in making it crossplatform or use GLFW3. They are both emscripten (web) ready.
- A MinGW/GCC build, prepping for cross-platform
Just for compatibility reasons, this will remain or probably have a version without it.
To Be Updated
Some (big) update and a huge turn of direction (not gonna lie, lol) while rolling out and testing a few concepts here and there over these past few months..
Nothing impressive with the boring screenshot above, I know. :P This is just to demo and make sure most essential features are working and good to go (in this case, 3D skeletal animation and mouse picking ) There's also that text on the top left side with Blitz TTF font there loaded with some filtering. Bonus hardware MSAA is also built-in (also in above shot, sorry the jpeg format is not helping :X) if it is supported by hardware and os/platform.
Progress, Features and Objectives:
- Very Lite Base Package, just the essentials (really hate those ~100 MB downloads w/o actually seeing where most files ends up in your hard drive once installed, don't you? ).
- Fast, compact (no bloat) and could be standalone (single exes? again good times!)
- Keep it simple KISS concept (that's how B3D got popular afaik)
- Object Based Programming with added support (still B3D roots, advanced stuff is optional if you would like to go that far, see Roadmap below)
- Platform independent (that sounds cross platform, but with no promises )
- Default engine/module is modern 2D and 3D (OpenGL), and it's leaning now towards cross platform (again, no promises )
- Module based and independent, you can use and bring your own 2D or 3D stuff, pretty much like B3D with the userlib and Blitzmax with mods.
- You can DLL! Static and Dynamic Linking Libraries, at least on platforms that supports it (similar to Blitz3D)
- Blitz3D/BlitzMax commands and syntax with a mix (subject to improvements to make it as close as possible)
- Future Vulkan and Metal support (those nice tech frameworks got our backs?.. I hope )
- Multi-Threading and 64-bit support (it's there, no worries)
- and it's NOT Monkey-X (I wish it is! I still consider it the next Blitz3D since it is still an awesome cross platform game dev tool and came from BRL)
Since most of the heavy lifting work is done with the help of nice libs and frameworks (huge thanks!), it would also be nice to think long term on some planned features aka Roadmap
- Plugin support (that is aside from DLLs)
- Scripting (ambitious )
- Reflections (optional and very ambitious )
- IDE with module and asset management (ok now we're daydreaming )
I'm quite happy on how this is turning out so far with this project and seeing how easy the overall workflow and pipeline is right now, also making sure that it should be keeping it simple as possible. Another objective is to try and make old code run or at least make a way to provide some conversion or porting tool of some sort, like what the Blitzmax IDE has provided for Blitz code, at least. The important thing here is I have to try this out by myself first if I can work and adapt to this new concept easily since we are breaking out of the Blitz DirectX 7 tool/shell. Eventually, I will be attempting to port a few snippets and if it will go smooth or at least not troublesome.
The other concept that I have done which I have outlined on the roadmap involves scripting and heavily connects on Blitz3D, BlitzMax and Monkey-X plus other options, might be a separate with the above agenda or could be related and might work together in unity (no pun intended).
This is just what I have accumulated so far in the past few months finding nice good tech/framework and testing out stuff that will be nice to have and could be BlitzX. Looking at getting into putting up a simple working demo once most command set and features are done.
Looks like the name BlitzX is not bad after all (I also thought out other great and better alternatives in case there will be some conflicts).. until the next update
PS: New sound system stuff will still be supported, like that awesome Text to Speech SoLoud feature there below plus more!
Here are the sound test demos replacing FMOD. I have picked OpenAL, SoLoud and SDL2 sound (not SDL-Mixer) to play around and the demos only covers basic wav/ogg playback functionality focusing on LoadSound and PlaySound command. It seems like SoLoud is the way to go due to its permissive licensing and simplicity. SDL2 is another good option, but a bit hefty with the package. There's also PlaySpeech which could be added as a new or extended command and has basic Text2Speech functionality included only in the SoLoud demo. Type something to try it out!
BlitzX Sound Demos (OpenAL, SoLoud, SDL2)