Illustration by Sunless Design
Keeping an MMO alive is tough. Unless you're World of Warcraft, the cost of producing new content, patching bugs, providing customer service, and maintaining servers starts to outweigh the money trickling in, especially if your game is built around the outdated subscription model. In recent years, games like Star Wars Galaxies, City of Heroes, and LEGO Universe have all bitten the digital dust, their plugs pulled despite the best efforts of their small but dedicated fan bases. Disappointing as it is, it all comes down to money, and within the MMO space, there's only so much to go around.
The death of an MMO isn't always the end of its story, however. After the official servers go down, we often see fans step up to take the reins, dedicating themselves to preserving these games they forged so many precious memories with. Private servers, reverse engineering, protocol decryption: Resurrecting an MMO is not an easy task, demanding countless hours of work for something that could, at any moment, be struck down with a cease-and-desist letter—MMO emulation is technically in breach of a game's Terms of Service, after all.
Still, this hasn't stopped Rajko, a young, talented software engineer, from spending the last seven years working almost single-handedly to crack one of the most arcane MMOs ever programmed: The Matrix Online.
In the early 2000s, games modification—typically referred to as modding—was a foreign concept to many gamers. Aspiring game designers were already transforming DOOM into Aliens and Quake into Team Fortress, but these were niche projects, confined to hardcore fan sites and PC magazine demo discs.
One of the first games to buck this trend was the slick, neo-noir shooter Max Payne. Bundled into the PC version of the game was an option to install the Max FX tools, a suite of modding utilities that let players build their own levels and change the way the game played. For Rajko, a young gamer with a keen interest in the inner workings of computers, this was just the invitation he needed to dive into the challenging world of games modification.
Rajko's first mods were small and simple, but it didn't take long for his ambitions to grow larger. He set his sights on Quake 2, which had just released its source code for people to poke around in. Rajko did just that, teaching himself how to read and write computer code in the process.
In mid-2004, Rajko stumbled across a banner ad for the beta of The Matrix Online ( MxO). He joined up and was immediately hooked. Compared to other MMOs like World of Warcraft and Lineage II, MxO's rich, player-driven narratives and the constant cycle of new stories spun by its in-game live team kept Rajko enraptured.
His interest in MMOs grew, and he started digging into the concept of MMO emulation and keeping MMOs alive after they'd been officially shut down. It intrigued him in the same way that modding did, and to get some practical experience, he began intercepting or 'sniffing' the packets of data being transmitted between his computer and the MxO servers. This technique is a crucial part of MMO emulation, as it is typically the only way to reconstruct the server code that is rarely ever released to the public, even after an MMO is shut down. Without the server code, an MMO will not run. Rajko wasn't about to let that happen to the only MMO he'd truly enjoyed.
By 2007, Rajko had managed to reverse-engineer the encryption protocol the MxO world server used, allowing him to see what messages were being sent between his computer and the MxO servers when, for example, his character jumped or talked to an NPC. It wasn't much use yet, but this kind of data would be crucial when it came time to rebuild the server code.
That time would come sooner than Rajko had expected. By June 2009, progress on the packet-sniffing front had waned, and Rajko was starting to lose interest—until he received a fateful email from Sony Online Entertainment.
The Matrix Online was shutting down.
One month. One month was all Rajko had to wrap up his attack on MxO's server code. After that month, there'd be no more packets to sniff, no more data to collect. If he didn't act fast, MxO would be lost, forever.
Rajko dove back in with a vengeance, spending entire days at his computer deciphering the last major hurdle standing in his way: the login system. Just four days before the shutdown, his dedication paid off. He cracked the login protocol and grabbed the packets he needed just before the server went cold.
Two weeks after The Matrix Online had officially shut down, MXOEmu was born. Headed up by Rajko, MXOEmu aimed to bring MxO back through the power of emulation, and to prove it wasn't all hot air, Rajko released a proof-of-concept MxO 'server' constructed from the packets he'd collected. Players couldn't do much other than log in and look around, but that didn't matter. Less than a month after it had been disconnected, the Matrix was back online.
I'm not sure what to expect as I jack into MXOEmu for the first time. Wireframes? Pre-alpha placeholders? An error message? No; I'm greeted instead with the familiar green glow of The Matrix's binary 'code'. As the binary fades away, I'm struck with a feeling I seldom experience in modern MMOs: helplessness. There are no tutorials to greet me, no NPCs with exclamation marks above their heads, no waypoints to follow. I'm utterly alone.
I decide to play things safe and seek out a tutorial on the MXOEmu forums. In its current state, MXOEmu requires that pretty much any action other than moving be typed into the message chat, kind of like the /dance command in World of Warcraft except with more hex values.
Despite being slightly cumbersome, it feels fitting for a game based around hacking a virtual world, reminding me of the 'lots of guns' scene from the first movie. '&playanim 0e39' unleashes a barrage of gravity-defying kicks, while '&setmask 58000192' turns the default avatar into Seraph, the Oracle's bodyguard. I punch in both commands before picking a random direction and striking off into the grand emptiness of MXOEmu.
Excitement surged through the early days of MXOEmu. Buoyed by Rajko's success, many of his fellow modders decided to split off and build their own MxO emulators. One of the collaborators, TasteeWheat, focused on getting MxO's doors to work properly by analyzing the packet data Rajko had collected. Doors might sound simple, but in MxO, doors are incredibly complex: To open one door, you need to know the location and rotational properties of every door in the game. TasteeWheat did not effectively account for this, and soon abandoned the project completely.
Another ex-contributor, Arcady, tried to get combat up and running, again by analyzing packet data. Unlike other MMOs of the time, combat in MxO wasn't your standard turn-based affair. Ranged combat was more like a third-person shooter, while close-quarters combat turned into a pseudo-fighting game, the camera shifting to a single plane and players engaging in grapples, combos, and flashy spin kicks. With such a complex combat system, Arcady didn't make much progress. He, too, gave up on the project, and soon Rajko was the only modder left standing.
As days became weeks became months, a grim realization stole over Rajko: Analyzing the packets simply wasn't working. The Matrix Online was different to other MMOs, and in a big way: Most server-based games use static data structures when communicating with players' computers, sending the exact same data packets every time a player sits on a chair or talks to an NPC. By looking at the differences between those packets when, say, a player chooses one line of dialogue versus another, someone like Rajko could puzzle out how to build those packets from the ground up, paving the way to a fully-functional emulated server.
But that's not how MxO works. To conserve bandwidth, only the bare minimum of data is sent between player and server, reflecting just the changes made to the world since the last communication. This prevents any sort of comparison between different player actions; when a player chooses different lines of dialogue, the two corresponding streams of packets will be completely different every time. Think of it like trying to figure out how a car works just from its GPS co-ordinates; the necessary information just isn't there.
This was a tough realization for Rajko. He faced two choices: Abandon MXOEmu as it was, a fake world where punches don't hit and existence has no purpose; or throw the whole thing out and start from scratch.
It wasn't much of a choice.
To do MXOEmu right this time, Rajko shifted his attention from the packets to the objects they represented. If he could understand how the game stored the data for, say, a door, he'd have a better chance at figuring out how that door's packet data was constructed. That was his hope, at any rate.
His first target was the game's maps, the blueprints of MxO's city. Deciphering these complex files took many long months, thanks in large part to the proprietary Discovery engine MxO was built in. With no published documentation, and a coding style that Rajko describes as 'extremely obtuse', Discovery caused Rajko no end of frustration. He often found himself 'chasing trails all over the place' just trying to figure out what the code was doing. Unwilling to admit defeat, he pressed on, and his persistence eventually paid off. He cracked the map files. MXOEmu 2.0 had a city. The only problem was, it was a city without anything in it.
MxO stores its objects in a file called, strangely enough, gameobjects.gob. Like the rest of the Discovery engine, this file is a complicated beast, but Rajko eventually busted it open—and hit the jackpot. Inside gameobjects.gob was not only information about each object, but the rules for how to construct their corresponding packets. With these in hand, Rajko had everything he needed to restore MXOEmu to its forbearer's glory. To celebrate, he posted an announcement on the MXOEmu forums, proclaiming a 'New engine coming soon.'
That post was made in 2011. In the five years since, no new engine has been released.
Emptiness surrounds me. Barren courtyards sigh with the voiceless breeze; hollow buildings pierce the haze of a featureless sky. A lone street vendor lies crumpled at the base of a stone monument. I cannot trade with him; the code for that simply doesn't exist. I keep walking.
As I roam the streets, performing bombastic flips over every car I pass, each flashy maneuver only adds to my sense of loneliness. I have no one to share this goofy trick with, no audience to impress. I can type in console commands to punch and kick, yet it all serves no function. What good is the ability to dodge bullets when there are no bullets to dodge?
Desolate streets stretch out before me, stitching together this dead city with the faintest pulse of life. My surroundings feel almost apocalyptic, a vision of post-humanity truer than any Fallout or Wasteland. There is no one to talk to, no quests to take, no enemies to fight.
As I wander aimlessly through this forgotten place, I catch echoes of the life that once thrived here. I enter a nightclub sheathed in neon, where a thumping bass line drives away the cemetery silence of the city outside. NPCs mingle by the bar and get groovy on the dance floor, re-enacting memories of a time long past as if to bring it back. Compelled to oblige them, I step out onto the dance floor and strut my stuff, posing for the DJ as he spins the same records he's been spinning for over ten years now.
A peal of laughter knocks me out of my groove. I spin around and come face-to-face with The One himself, Neo, his black trench coat rippling with recent movement.
This is no NPC.
Neo greets me, revealing himself as a fellow wanderer fascinated by this undead place. He tells me this is his first time here, and asks what there is to do. I break the news to him: this simulation is strictly look-but-don't-touch. Disappointed, he sticks around anyway and we chat for a while, discussing what drew us here—for me, research; for him, entertainment. We banter idly for a few more minutes before parting ways. He logs out soon after.
Leaving the club and returning to the streets, I feel like the city has changed in my absence. It seems more vibrant than before, its emptiness dulled by my encounter with another human being. I trot forward and a flock of pigeons scatters into the sky. I'm as startled as they are: This sudden burst of life is a keen reminder of what this place once was, and what it might be again someday.
On March 19th, 2014, Epic Games released the fourth version of its popular Unreal Engine to the world. Unlike its predecessors, UE4 dropped its million-dollar licensing fees in favor of a more modest monthly fee, aiming to appeal to developers of all budgets.
When Rajko learned of this, he knew immediately what he had to do. Progress on MXOEmu's updated engine had slowed since its announcement years earlier, thanks not to problems with packets and game objects, but with the MxO client itself.
The client—the 'game' part of MxO that runs on players' computers—suffered from numerous graphical bugs and compatibility issues on modern versions of Windows, and Rajko had been contemplating scrapping it entirely and rebuilding it from the ground up. With the arrival of Unreal Engine 4, Rajko had an even better option. He'd rebuild MxO in UE4, taking advantage of all the extra features and modern enhancements the 10-year-old Discovery engine had lacked.
With the MXOEmu community in firm agreement, Rajko set about the lengthy process of preparing MxO's various components for export into UE4: level maps, pre-fab structures, animations, collision detection routines, waypoints, object models, textures, shaders—the list goes on and on. Now, in late-2016, only one big obstacle remains, and that's the FX. Deconstructing effects like lighting and anti-aliasing has proven quite tricky, and Rajko is currently looking into building a crowd-sourcing application to collect the data he needs.
These days, MXOEmu leads a double life. In its playable, pre-2011 form, it's a digital mausoleum, a shrine to a dead world silent but for the /whispers of memories lingering at the edge of hearing. In its unreleased, UE4-powered state, it represents the promise of the immortal MMO, preserved not as it really was but as you remember it being, with time's rusty touch polished away.
This duality speaks to a larger challenge the games industry as a whole faces: How do we preserve for posterity experiences so defined by their time and place? Do we strive to recreate them exactly as they were, hoping to recapture their original spark? Or do we aim instead to fulfil the promises they made so many years ago, smoothing out their rough edges to meet modern expectations? MMOs, after all, are as much about their people as their polygons. Without a thriving community, even a 1:1 recreation won't feel the same. Are these games doomed to obsolescence, their legacies confined to blurry screenshots and a handful of boisterous Let's Plays?
MXOEmu might still have a ways to go, but even in its ghostly, pre-UE4 state, it's an invaluable slice of video game history we can't afford to lose. We need people like Rajko, the ones willing to devote seven years of their lives to saving The Matrix Online from permanent disconnection. They are the Morpheus to our Neo, opening our eyes to the real world. Without them, our past would be as much a dream as the Matrix itself.