A few weeks ago, I started programming a server that emulates an old version of the live server of one of my favourite games, the Massively Multiplayer Online Role Playing Game titled MapleStory. You can take a look at my progress here.
Back in 2007/2008, a few friends and I played on a private server called OdinMS which is a server emulator for MapleStory. This server was completely seperate from the live MapleStory servers. The majority of my interest in this server came from the added special features. After further research, I discovered that these features were added by editing server-side content. These edits affected the game on the client-side without changing the client itself. On the normal MapleStory servers, server-side content couldn't be edited.
By creating a private server, you could do the following:
- change the rate at which a MapleStory player gains experience and levels up
- restrict the players who log in to use a specific version of the MapleStory client
- allow access to all in-game content
- most importantly, you could control all the interactions with the client and add any content you want to the server
Rumor has it that the people behind OdinMS ended up being sued by the creators of MapleStory. I believe they were sued for distributing and editing MapleStory server resource files also known as wz files. This goes far beyond the educational server emulator for private use that I am creating.
I was very interested in how the developers behind OdinMS were able to create their own set of servers seperate from Nexon/Wizet, the creators of MapleStory. This was the spark that lit my interest in software engineering. Online version control websites allowed me to view source code for another popular private server called TitanMS. With a lot of help from the private server community, I was able to read some pieces of the source code without any prior programming experience. However, I always wanted to create my own server with source code completely from scratch.
Understanding other Server Emulators
Prior to writing any code, I had researched the main components of a MapleStory server emulator through various forums. The majority of my research over the last couple of months was in:
- socket connections with byte buffers
- cryptography specific to MapleStory
- handling packets based on their header/opcode
I knew I had the right amount of understanding for this type of server design when I was able to explain the design simply to my mother.
Now I was ready to write a server emulator but I had to decide what framework to use. I'm placing my bets on Node.js based on it's scalability and ease of use but more on that in another post.