Me parece que no os he hablado de este
game engine tan especial para Linux, Windows, OSX y —por supuesto—
Dreamcast.
Como ellos mismos lo definen tienen la potencia y flexibilidad de uno moderno pero está diseñado para máquinas con recursos limitados. Lo llaman el
game engine portable.
Kazade, su autor principial, no es desconocido en la scene de la 128 bits de SEGA. Ha trabajado ya en varios proyectos y a mí ahora mismo me viene a la cabeza que le sigo porque estaba portando
SDL 2 a la DC.
Y sí que le había echado un vistazo hace un tiempo a este
Simulant, a ver qué tal pintaba y si pudiera tratar quizá de hacer al menos un Hello World. Lo que recuerdo que me echó para atrás es que aún no tenía implementado el audio en la consola de SEGA, así que había que esperar un poco para desarrollar algo
homebrew (porque tirar de juegos mudos no era plan).
Y le perdí un poco la pista, si os soy sincero.
Lo del audio ha quedado ya solventado, de hecho usa un audio API que parece realmente bueno actualmente. Han implementado
ALdc 1.0, escrito desde cero para tratar con el Yamaha AICA (de hecho igual se puede usar hasta con KOS).
Otra cosa que me ha resultado interesante, y que creo que no estaba aún cuando yo lo miré, es la posibilidad de usar
VQ compression en la texturas de la DC.
Y por supuesto, como veis en la captura que puede trabajar con 3D, algo que no sé si lo he mencionado.
Todo esto viene a que la
versión 21.09 acaba de ser lanzada con estos cambios:
Citar:
There are a couple of big features in this release, and the usual scattering of smaller features, bug fixes and improvements. Here are some of the highlights.
The MeshInstancer Stage Node
Up until now there are have primarily been two methods of displaying loaded mesh in your game scene, these are:
Actor - a fully dynamic stage node that allows behaviours, multiple levels of detail, and an array of other features. To support all this, Actors are very memory-intensive.
Geom - a completely static stage node, attached meshes are compiled on construction. Usually used for level geometry.
There are times though when you need some middle ground: you want to spawn multiple instances of the same mesh, but you don't want to have to take the overhead of creating an Actor for each one. And that's where MeshInstancer comes in!
The new MeshInstancer stage node is a fully dynamic stage node (it can be moved, have behaviours etc.) but when instantiated with a mesh, it doesn't immediately render anything. Once you have created a MeshInstancer you can then spawn multiple instances of the mesh over and over again at relative positions around the MeshInstancer. The mesh instances that are created use very little memory, and are incredibly fast to render. MeshInstancers are ideal for spawning things like foliage, trees, rocks etc.
In 21.09 we have implemented a first-pass at the MeshInstancer, but in following releases we intend to add levels of detail like actors, and much more - while ensuring that things remain fast and light.
A Stream-based JSON Parser
Up until now Simulant bundled in Jsonic, which is a very small JSON library and this was used for parsing material and particle script files, among other things. It wasn't a publically advertised API though so unless you went digging around the Simulant codebase you wouldn't know about it.
Jsonic (and many other JSON parsers) suffered a flaw though that was catastrophic for low-memory environments like the Dreamcast: it would load the entire JSON file into RAM.
Simulant 21.09 now includes a custom public JSON parsing API which uses an underlying file stream to move around the file data. This allows minimal memory usage even with massive files and it's resulted in much lower memory usage when loading materials and particle scripts.
Faster UI Widgets
UI widgets have been cleaned up, many bugs have been fixed, and they are much more performant. This is the result of increased user testing and feedback on the UI subsystem. Newlines in text are now also handled correctly without causing a crash which had been a long-standing bug.
The UI subsystem is still very much a work in progress, and we welcome testers and contributors to help build it out into a first class part of the engine.
Miscellaneous Improvements
There have been a number of bug fixes and improvements including:
The Simulant test suite now uses far less memory
A performance issue and potential memory leak in the physics subsystem has been fixed
We've continued our drive to factor out C++ exceptions where they aren't necessary, using smlt::optional<T> returns instead
The SmoothFollow behaviour has received some improvements, including the ability to pause and resume following
Console logging now uses ANSI colours for INFO, WARN, and ERROR levels
You can now force a texture file extension when loading 3D models - this is useful to force a platform-specific texture format (e.g. .dtex on Dreamcast) even if the model file specifies say, a .png
GLdc has been updated and this has received a lot of performance improvements recently
En fin, que si queréis echarle un vistazo podéis hacerlo aquí:
https://simulant-engine.appspot.com
Lo cierto es que este proyecto luce cada vez mejor. ¿Veremos juegos comerciales en un futuro cercano usando este
game engine?
P.D. Olvidé mencionar que al parece es compatible también con Android y PSP.