The second game made with the Dreaded Portal Engine was aptly called "Dreaded Spectre" and was a multiplayer First Person Shooter very much like the old quake games. The game could spawn bots players could play against and featured three weapons and three maps that would rotate whenever a player reached the kill threshold set on the server.
Here are the three maps with the NavMeshes the Bots would use rendered on top. The left-most was probably the best and featured a day / night cycle (of 30 seconds no less!) as the 'sun' and 'moon' would rotate over the battlefield and cast different shades of lights and shadows. The middle one was 'The mountain temple' and was quite tricky and easy for players to fall out of! The right-most one was 'The Factory' and featured some neat Volumetric lighting that came out of the floot below, very nice :).
Humble beginnings
Before the levels were made Dreaded Spectre looked very differently and virtually had no lighting (apart from ambient). Dreaded Spectre was developped with the intention of improving the underlying Dreaded Portal Engine and it did so. Got better lighting, multiplayer, sound, improved NavMesh, AI Bots, and much much more!
Before I started to work on my own Editor I used Blender to create levels and used a script to export them to a plf (portal level format). A fileformat of my own design, it stored everything in human-readable characters so it was easier for me to debug. It contained all the vertices, normals, textures, etc. one problem is that I did not find a neat way to encode game-specific objects like ammo and health crates, player spawns, lighting, etc. so in the code I had to do this manually! Since I only had 3 levels it was not really an issue but still quite annoying!
Improving the rendering
After some coding I had the graphics where I was pleased with them. I am no artist so quite a few textures could be described as 'programmer art', I did rig and animate the player characters, which again... it works but will probably not land me an animation job any time soon :P.
Multiplayer
To enable multiplayer and have AI Bots mixed in with Human Players I created a server that used an 'action queue' to determine what should happen next. All actors would send action commands to the server who would make sure they got executed at the time step requested. This allowed clients to simulate all inputs directly and the server would allow commands up to x ms to be executed. If a client got out of synch because some commands never reached the server or the commands were too delayed the server would correct the client by sending the position / orientation it should be. The client would barely notice as we interpolate these changes smoothly.
Because we use the same interface for players and AI bots it was very simple to replace humans who dropped from the game by an AI bot without anyone being the wiser. Also, we could record all inputs on the server and play an entire match back by just reprocessing the inputs. It was easier than expected and it worked pretty smooth.
I have to give a big thanks to Nikhil for tireless playtesting this game as it was in development.
Features
In the end the game had the following new features (on top of those available in the 3D Engine at the time):
- AI Bots.
- Three weapons (Grenade launcher, plasma gun, rocket launcher).
- Three levels.
- Multiplayer (tested up to 5).
- 3D Sounds.
- Post processing (e.g. tune mapping, bloom, full screen effects).
- Spectating mode.