
the engine I'm developing:
Nytro GameEnginescreens:
http://7thfactor.ro current features :
- plugin based architecture;
- module servers, the graphics server, input server, dynamics server, sound server, script server, network server, the engine is not bound to a specific API like OpenGL or DirectX, but it loads the required server plugin specified in the configuration file;
- abstract and highly independent classes, with a clear hieracly;
- base class for runtime type check, usage count, property manager, auto-naming;
- every class can have its own properties list, wich can be used in the editor for user-friendly modification like in Visual Basic or Delphi properties page;
- assets manager for one-time loading of the same asset file, so no duplicates are present in the loaded data;
- scene managers for generic scene graph renderers, so you can plug in any kind of rendering algorythm, built in being an optimized octtree renderer supporting thounsands nodes at playable frame rates (tested with 5000 objects with a grand total of 2.400.000 triangles, 300 - 1500 objects were visible at a time );
- all visual or in-scene objects are derived from Visual class, wich incorporates position, rotation, scale, pivot, dynamics properties, bounding box, automatic
look at direction vector, hierarchical parent-children transformations;
- the rendering in the engine is done trough VertexBuffer class, provided by the current graphics server wich acts like a class factory, so any graphical entity
will provide to the scene renderer a list of its vertex buffers wich needs to be rendered, so the scene renderer will take care of the sorting and other operations;
- shader architecture has support for both fixed pipeline and shader programs, shader settings resides in special *.sh text files, editable by any text editor;
- multiple rendering windows and multiple viewports in a rendering window are supported, a viewport has a special wireframe boolean setting, and when is on it will summon all shaders so they will force wireframe rendering with wire color taken from the object's editorColor, good for debugging and testing the world;
- texture switching its done only if the previous texture is different and if the texture wich has to be set is not a static one, in this way a lot of AGP overhead
is reduced;
- the game server takes care of the game's logic, so modding is possible;
- the script server can wrap any scripting language, the game itself it is not affected by the change of the script server, only the script must be rewritten in that new scripting language, the engine comes by default with a LUA scripting language server;
- cross platform is sustained by a low level C interface for the most common functions like file system, internal clock, logging, memory management and leak report, CPUID, file search, console, etc.;
- file access it is done trough a File class, wich has support for disk files and also archive files like ZIP and RAR, wich are currently supported, the switching between these two modes its just another parameter in the Open method, being the Archive pointer;
- the engine can set a global data path so any asset wich will be load will compute the given relative path into the data directory as an absolute path, knowing the data directory path;
- image loading and saving it is also wrapped around a specific library, the Image class takes care of it, curretly DevIL is used, so JPG/PNG/BMP/GIF/TGA/TIF image formats are available;
- memory functions and classes includes array, queue, stack, table(2D matrix) template classes full of friendly C++ operators, for easy and clean coding;
- each vertex buffer has a render priority flag wich tells the scene renderer in wich order to render the mesh, default, predefined values are for opaque meshes, transparent and additive, the order of rendering being the same, with additive blended objects at last;
- the beauty of the engine and the whole system is the nytroStudio game editor, world editor, wich is very extensible trough new tool plugins, like 3D Studio MAX;
- the game levels resides in world files, edited by the world editor, *.w files; the object properties can be saved with full info about their name and type into the world file so when a new version of the object is used it still can load old properties data even if they are not existent in the new object version, so we have backward compatibility with old world files;
- skeletal animation, exported from 3DXMAX, Character Studio and Skin, animation blending, actions, etc.;
- for vertex buffer export there is a 3DSMAX 6.x utility plugin, wich exports *.ms files for use in the editor, this file format contains information about a sigle mesh, with submeshes their textures and shaders;
- powerful particle system with dozens of parameters to set, various particle generation shape, random particle texture, loading/saving to human readable settings file, collision with objects, attractors, gravity, wind, etc.;