Engineering Update by Arc, Chief Architect
Hello all. Although it has been a while since you have heard from the engineering team, we have been making significant progress--all things considered. The economic slow down last year hit us hard, as it did many people and companies. A lot of our engineering manpower has been drained in our efforts to recover. Nevertheless, we survived the worst of it and are now making steady progress in our efforts to complete Atriarch for release. Trust me when I say that no one is more eager to get the game out there than we are. Now for the update.
For the last couple of months, the World Fusion Engine (code name: Volcano) has been "off its wheels" as we have conducted a major rewrite of the 3-D graphics and persistence subsystems. This was necessary to eliminate a nasty client-side lag problem and enable significant performance optimizations that will shortly be achieved. As you know, most 3-D games, both massively multiplayer and single-player, manifest various kinds of lag. Although many players assume that most lag is due to a slowdown in the actual rendering of the graphics, lag is usually caused by persistence: the loading of 3-D geometry and texture data. Level and zone-based engines typically resolve the persistence lag by loading as much data up front before each level or zone is activated, causing the players to stare at a frozen display while this occurs (the all too familiar LOADING... PLEASE WAIT...).
From the onset, we have designed the World Fusion engine to support seamless worlds such as Atriana: a spherical, truly three dimensional world with no zones whatsoever, neither above ground nor below. Achieving this requires a very different approach to the persistence mechanisms used by the 3-D subsystem. Data is only loaded as needed, piece by piece; there are no preloading stages that cause the player to wait. Therefore, data loading has to occur in parallel to all other game activities: user input, rendering, sound, animation, physics calculations, and artificial intelligence. Multithreaded design and programming is very helpful, if not essential to this task.
Unfortunately, multithreading has been key to our lag problems for some time. Although, the entire foundation of software that the World Fusion engine is built on has been designed to support multiple threads of control, one critical piece has had trouble doing so: the persistence subsystem, i.e. the database system. In this case, we also got hit with a double whammy because the only part of the engine that was built on commercial software was--you guessed it--the database system.
As it turns out, the vendor actually fixed the problem with their database system that was preventing multithreading from working. Unfortunately for us, they did so in a subsequent release *after* changing the licensing agreement. That is, the original version was royalty free, whereas the version that is fixed requires a royalty for every single user--and not a small one at that. This is a very common situation known as the "vendor lock-in" antipattern. I firmly suggest to anyone developing software to avoid this type of hostage situation at all costs.
Having experienced this sort of problem many times in the past, all of our application code has been protected by an isolation layer that keeps it from being directly dependent on the API of the vendor's database product. Instead, we have created an abstraction that conforms to the ODMG (Object Data Management Group) standard and written a Bridge (design pattern) to the database product. Nevertheless, we still had to conduct a nontrivial ongoing effort of replacing the implementation of the database system. I can reassure you however that our new solution utilizes open source and free software, as does quite a bit of the engine already. Some examples include TAO (the ACE orb), PostgreSQL, libpng, and code from the Graphics Gems series of books. On the servers and development tools side we already use open source and open standards all over: OpenGL, GNU/Linux, GNU Make, GCC (C++ compiler), GDB & DDD, ViM, VNC; and the list goes on and on.
That's the report for now; I hope I haven't bored you to death. Now I have to do some more eXtreme Programming so we can get this game out there!