My current videogame engine project, Drift, currently sports the following features:
- Parsing of id Software's Quake 1 .map format into dictionaries of key-value pairs, and models consisting of convex solids. However, I am not using the original entity class set.
- Decomposition of this graph into convex regions by way of BSP.
- Manual placement of portals carried out by a deigner prior to map parsing. I believe the method I use is simpler than that of the id Tech 5 editor, since all that is required here is a single point and an axis alignment. The engine works out what shape the portal should be.
- Grouping of BSP leaves into concave cells, with the ruling that a cell cannot include any space that crosses a portal. This enables high-level culling of the scene, performed at runtime.
- Limited collision detection and resolution.
- Designer-influenced BSP and collision complexity. A particular solid in the graph may be considered too small or subtle to have any effect on gameplay, so it can be labelled as detail.
- Object-oriented, serialised archiving system. As of this time, fully compatible with all previous versions of archived data structures. Some standard compression is performed at the common level (e.g. A string re-ocurrence table), and certain classes carry out particular actions to compress their on-disk representations.
- An object-oriented, hierarchical scripting system and virtual machine, which is yet to be fully integrated into the rest of the engine. It is rather similar to UnrealScript (used in Epic's Unreal series of games) and JavaScript, but has a slightly different approach. Plus a rather embarrassing number of possible operations (over 300, and I had to write a separate function for each!).
- Realtime coloured, attenuated lighting. Scissor tests and BSP leaf AABB tests are used to optimise this. Nothing spectacular yet, but I have been working on separate programs that show normal mapping, shadow mapping, and extruded-volume shadowing. The latter of which I am thinking of not using at all.
- Destructable scenery. The engine has a powerful set of CSG tools which are used in this case to naively simulate the fracture of any solids labelled as destructable by a designer. Most obviously, this can be triggered by an explosion. Note that this kind of event will be orchestrated by the scripting system.
I've probably forgotten some finer points.
I will be detailing the progress of Drift's development