I have been staring cross-eyed at the source code for IW for about two months now, trying to decide how best to get this project going again. Here is what I’ve come up with.
Phase 1: Infrastructure Overhaul
The current game server is hosted on some Russian server that we don’t even have full administrative rights over, and communicating with the Russian admins has been… difficult. The first step is to migrate to a new server with better system resources and availability, this alone will improve game performance measurably. Plus, I will then have full admin access over the server environment which is a must for a developer to have.
With this will also come a brand new website for Impressive World. A new domain and hosting has already been acquired, I will be spinning up the new server in the next 24 hours, and you can expect to see at least the beginnings of the all new IW website by the end of the week.
Phase 2: Recompile
Once the new server infrastructure is in place, I will need to recompile the game source code to complete the migration to the new platform. This will provide the first working update to IW that you will actually be able to log into and play to experience for yourself! Don’t get too excited just yet though, you will not find any content updates or even bug fixes in this initial release. You may notice some performance improvements from the new server infrastructure but don’t expect to see a drastic transformation of the game at this point. Rest assured though, the completion of this phase means we are primed to start making some real changes and improvements to IW!
A caveat here, while C++ is an old friend of mine, Ogre3D is a stranger to me and this is my first foray into working with this graphics engine. While I think the engine itself is capable after spending some time with it now, the way it was implemented into IW is less than fantastic. IW relies on an outdated Ogre3D library which has given me difficulties getting the source code to a point where I am even able to recompile at all. I basically had to downgrade my entire development environment to use an older compiler just to accomodate the existing source code. Given some of the uncertainties working with outdated Ogre3D libraries, considering I also still have a day job to worry about, and barring any sort of unforseen disaster or act of god, I am aiming to have the new game server recompiled and running by the end of the month.
Phase 3: Source Code Cleanup
Once we are recompiled on our own server, it’s time to really get down to business. To be perfectly blunt there are some really dumb flaws in programming logic in the IW source code that will be fairly easy to clean up and should improve performance dramatically. (warning: nerd talk ahead…) For example all user accounts and character info in the game is currently stored in the filesystem, a separate file for every user, and every character every user has. This amounted to literally hundreds of thousands of files on the server! Not only is this incredibly inefficient and slow, it is also not very secure. There is an extremely obvious and simple solution which is to migrate this data to a database. This should provide a major boost to server performance and loading times.
I am certain I will find plenty of other stupid quirks and bugs as I move forward. My goal is to patch the biggest, dumbest, most obvious flaws and get the existing code running stable as quickly as possible so we can move on to what everyone actually wants to see – new content. I know these sort of infrastructure updates are not very exciting by comparison, but they are definitely necessary. I can’t provide a timeline on the complete source code cleanup with any accuracy at this time, but once we get to this phase, you will start seeing updates to the server with new fixes and improvements coming regularly.
Phase 4: Engine Replacement
So about that new content. Just so everyone is clear, the Ogre3D graphics engine that IW runs on currently isn’t even technically a game engine at all. This has factored in heavily to the difficulties with taking concepts and ideas for new game content and making them a reality in IW. Features that would be easy to implement with an actual game engine have to be coded from scratch instead with Ogre3D. This means a drastic increase in development time for new features, and in most cases they will be less robust and more buggy than the same solution implemented in a proper game engine. To that end, in order to both improve the quality of the game and the frequency new content is added, I plan to replace Ogre3D as the engine running IW.
Just like in a car though replacing the entire engine is no small task. Every game engine prefers or even demands you work with a certain programming language, so a migration to a different engine can mean refactoring the entire codebase for the game. I considered Unity, but I am not a big fan of the fine print in their licensing agreement and I would be forced to work in C# instead of C++ which also does not agree with me. My top two considerations currently are Panda3D or the Blender game engine, but I have not come to a conclusive determination on which to go with yet.
The Blender game engine seems like a logical choice, when many of the game models are already being made in Blender it seems that this could streamline workflow between graphics and code. Blender will work with C++ so most of the the existing code should be reusable, however the Blender game engine interface itself has a pretty steep learning curve. This may be a fine solution for the long term, but this learning curve will impede the initial migration and early development on the new engine as I get up to speed on the platform.
While you many not have heard of it, Panda3D is backed by Disney and Carnegie Mellon and under the hood it shows. It will work with C++ code but really shines when working with Python, which would be my preferred language. This will allow me to reuse as much of the existing code and assets as possible while transitioning over to working in a language that I am more proficient in, meaning faster development for both short and long term.
I am still weighing the pro’s and con’s of both, but have pretty well narrowed it down to one of these two options. I can’t really give any decent estimate on timelines here whatsoever just yet, my focus right now is to make it through Phases 1-3 as quickly as possible so I can fully focus on Phase 4 which is the real future of this game.