How do communities make private servers for games which don’t provide server software?


I’m thinking for games like RuneScape/old school RuneScape where there are multiple private servers, World of Warcraft, BattleForged (Skylord reborn) etc.

From my understanding the user’s only have access to a downloadable client that they use to connect to the main game server, do people reverse engineer a server with all the server side logic?

In: 9

There isn’t just one way. The easiest ones to make a private server are the ones where the game “lives” on the clients, and all the server does is keep the clients in sync with each other.

The other ones take some doing- most games are too big to just run over the Internet, so the game temporarily downloads the actual level you’re playing. Players grab a copy of the temp files while they have them downloaded, and *then* reverse engineer them after making sure they won’t disappear from the computer.

Sometimes, they’re *really* lucky and grab enough code to mod it or make new content instead of just rehost what they already downloaded.

That’s it entirely. Some games it’s easier than others depending on complexity and if it’s obfuscated or not but basically some programmer sniffs traffic, reverse engineers it, maybe reverse engineers some of the client side code as well and writes an emulator.

Modders can go pretty hard at this type of thing, and for relatively popular stuff there’s several people working together and publishing code and resources.

See here for RuneScape stuff for example:

Minecraft, as an example, has a server software, but you don’t even need it. You can open up a game to local LAN. Anyone on the same router as you can play on that world. So you could use a VPN to pretend like you’re on that local network when you’re really not. You can also set up port forwarding (which you have to with the server software anyway) to send all traffic coming externally (as long as it’s addressed properly) to your PC which is hosting the world. Any game that has a local LAN option can be handled this way.

For other/more advanced scenarios, I’ll have to defer to other commenters as I’m no expert on that. But I did teach a class on Ethernet structure, so if you want a guy to go off for an hour on port forwarding, look no further.

This depends on the game.

In the case of, say, *Ragnarok Online*, the official server software (Aegis) was leaked to the public by an inside source.

Of course, even when the official server is leaked, it won’t be regularly updated – at least not in a form the public can access. So what most communities do is study the game’s behavior, figure out formulas for things like damage et al, and kinda wing it: they make their own server program from scratch, and adjust it until the game’s behavior seems to be about right (referencing any official materials like leaked official server code if needed.) They may also fix bugs at their leisure. (In the case of *Ragnarok Online* this reverse-engineered server was called Athena – at least the one I was familiar with.)

It helps if people who formerly worked on the game officially end up as part of the private server community. That can happen.

Most MMOs have the bulk of the game behavior coded client-side and only perform necessary things like item drop calculations, cheating checks, and sync thru the server. This is why so many MMOs are susceptible to hacking, since the hacker is editing the code already on their own PC. Again, good old *Ragnarok Online* had vital game balance-related content in the client, to the point that you could edit your player character’s animation data to skip certain animations and attack stupidly fast.

Years ago I attempted to make private server software for Burnout Paradise and I used a program called Wireshark to show me all the network traffic created by the game. For example as the room host I’d start an event and see what the server responded with. I’d also get traffic recordings from other players, for example if I were to kick a player we’d both record that event and I’d see if there were any differences between the two.

Once you’ve got all the network traffic figured out you write a program to respond the same way as the official server. Unfortunately I didn’t get that far.