Q2 OOP died in infancy a long time ago and appears to have been based on Quake2 v3.14.
http://www.planetquake.com/q2oop/news.shtmlQuake2 .NET was little more than a concept paper written to demonstrate the extensibility of OOP and to prove that .NET based code would not impact performance but it seems it was hardly worth the effort. In fact the paper clearly states that the game played at 85% original non-.NET speed but "The performance of the managed version was acceptable and testers did not notice a difference between the two versions."
http://codeproject.com/managedcpp/quake2.asp?df=100&forumid=16192&exp=0&select=579771In many ways Q2 is already OOPish. Monsters and items "inherit" or more properly "share" certain attributes and structures and they are instantiated as entities and entity states. The fact that the compiler does not "enforce" these features as it would in C++ doesn't make it less OOPish. In fact, if you look at the .NET code above, most of the work was touch-up and reserved keyword cleanups and fixing forward declarations to structures that existed in DLL's but not in the main engine mostly "cosmetic" changes. In many ways Q2 is a demonstration that one can code an object oriented style program without using the features or enforcements of an object oriented language. According to the article, the hardest part was getting the compiler to stop complaining about the typing of many function arguments, a problem fixed by casts to the proper types, a practice that is questionable since proper function prototyping and use should have been enforced first. Casting can introduce subtle bugs that are hard to weed out.
If one wants to code a game in C++ one would be better off starting from scratch or borrowing only a few principles from Q2 and creating a better game.... but then it wouldn't be Quake 2.
