This is for the open-source version of Bungie's Marathon engine, Aleph One. Bungie has also released the Marathon Trilogy files as copyrighted freeware.
I'm hoping to write a renderer for it, or at least a viewer of its map files, using Crystal Space, but there continue to be some things that remain obscure to me. Note: I intend to do everything programmatically, without loading any CS data files, as far as is feasible.
Visibility. Is there any way within CS of checking on whether some surface polygon is visible? I've found iWatchQuestTriggerFactory in the Crystal Entity Layer, and that likely uses something or other in the CS engine itself, but I'd have to hunt through the iWatchQuestTriggerFactory source code to find out.
I would like that for constructing the engine's automap, a common feature of extruded-2D engines that has fallen by the wayside in full-3D engines. Automaps are good for solo or cooperative scenarios, because they can show where one has been, making it easier to navigate highly nonlinear level designs.
Geometry: static or dynamic? I'm currently thinking of dynamically generating the Crystal Space geometry, but updating only sectors that have changed. How feasible is that in CS? Each sector (map polygon) has a simple geometry (an extruded polygon), and since each side is individually textured and lighted, each side may be a separate mesh.
In particular, with a dynamic approach, I can handle platforms by changing the platform sectors' vertical extent, with appropriate adjustments to neighboring platforms' geometries, and I can handle liquids by dividing a sector into an above-liquid and a below-liquid sector.
A static approach would require defining movable platform and liquid meshes that would fit into sectors.
Glow mapping. I'd implemented this in A1's OpenGL mode by rendering a normal texture, then a glow texture. The normal texture is subject to ambient lighting, while the glow texture is at full brightness. Is there some simple way to do this in CS?
Sprite selection. Like other engines of its time, the Marathon engine uses 2D sprites / billboards for all its inhabitant objects, selecting which one by view direction. The walktest demo contains an animated 2D sprite, but is it simple to choose which image one wants in a sprite? I will be supplying the images, complete with direction calculations; it's getting them into CS that's the problem. Also, is it possible to use non-power-of-2 textures in CS? My A1-OpenGL support had involved composing power-of-2 textures and placing the sprites in them.
Animated wall textures. Another A1 feature I'd implemented. It ought to be easy to update a mesh's texture after creating that mesh programmatically.