Morrowind Online


A traveler has arrived in Seyda Neen. Normally you would take a passing interest in this event, but there is something unusual about this individual, it seems to have a mind of its own! Exploring the world, amassing equipment and wealth, even offering to trade the spoils of its adventures! As long as you stay on its good side you will find a capable and intelligent companion, otherwise you would do well to watch your back as there's no telling where you might be ambushed, the whole island of Vvardenfell may become your arena!

Technical Details
There was a time when the mere mention of "multiplayer" on the forums would be met with chiding and repose. A majority of the community had accepted its impossibility to the point of denial for what they had always desired deep down: A friend to keep them company along their journey through a rich and captivating yet somehow desolate world.

I had been lurking for nearly a year until catching wind of a "Script Extender" in development, which was essentially a debugger that could manipulate compiled opcodes at run-time with memory addresses outside the application stack(a "trainer" in gaming parlance.) I got the contact of the author and requested that he add several features which were logical extensions of what he had already made, but with the intention of using their synergy to open a network pathway between scripts running in separate instances of the game.

It would not be so easy though, due to the lack of a compiler I had to brush up on my Assembly Language skills and manually translate my code into machine language for insertion into the plugin files using a hex editor. Every time I tweaked the script I would have to re-translate due to the shifting address space. Eventually I succeeded in getting an NPC to cycle through a list of coordinates that were accessable to modification by external applications.

At this point I hit a roadblock: It would be incredibly boring if all you could do was watch a "muppet" NPC wandering around in plain attire where another player happens to be standing; a great deal more information needed to be sent over the network. Not only that, there were thousands of user-made content modules that had to be taken into account! I had a plan...

A previous project was brought to the forefront of my continuing effort, it was a resource scanner for compiling distribution packages of modules created by other developers(another immensely helpful contribution to the community: see Overunity.) I combined this with a compression library and a peer-to-peer networking application I had also developed previously and created a lightweight content synchronization tool. Now two players could seamlessly equip and trade all of their custom(user-created) gear or items.

Some time after perfecting the content synchronizer a compiler was released for the Script Extender, which enabled me to extend the functionality of the run-time portion of my networking app. True to my nature as an "enabling influence", I set out to create not just a Multiplayer Mod, but a complete Networked Scripting Protocol so that anyone from the community could write their own multiplayer addons. This consumed the greater portion of my time on the project, but it paid off when the base functionality for a simulated player character had been condensed to using only a handfull of extended function calls.

The next project using the Networked Scripting Protocol was a portable chessboard that could be played asynchronously, much like a game of Correspondence Chess. A few additional scripts were developed by other scripters that were enticed by the idea of player interaction at a distance.

One of the people I tested with let the cat out of the bag early. The community reacted violently, both in praise and protest, even lingering disbelief(which was quelled with an early demo release...) Production of the actual multiplayer mod was halted to address a flood of feature requests and support issues. I was just happy that it worked... Then a sequel to the RPG came out and eclipsed the whole situation with all the hype it generated.

The end?

Initial Test