A short story of redefining a game’s behavior

Imagine. You’re working on a server emulator for game. And it’s not a bad game, but it’s so heavily client-sided, that developing a server for it is somewhat uninteresting. Even simple features, like NPC shops, might be client-sided, meaning you can’t ever have custom shops without client modificiations. Even simple interactions, like dropping an item, might have certain undesirable client-side checks, that make it so you can’t get rid of a subset of the game’s items. Client modification is always an option, of course. But as a server developer, it’s fun to push the limits of what you can do from the server, without touching the client. Not to mention, it’s always easier to not have to modify the client.

Last week I was asked a simple question on the Discord server for my Tree of Savior server emulator, Melia, in regards to reviving a feature that had been removed from the game, which lead me down a path that would remedy all of those problems for this particular project.

Continue reading “A short story of redefining a game’s behavior”

How to annoy Reverse Engineers

Game developers are often times not experienced in hacking games, or how reverse engineers, modders and server emulator developers analyze the games while working on their respective projects. For the hackers, this is good news, because it makes their life easier. For the game developers less so, because they don’t understand how to protect their products.

Continue reading “How to annoy Reverse Engineers”

Simple C# Web Server with PHP Support using CGI

The world is full of capable web servers, but there might come a point, where you need a small, portable .NET web server. And for compatibility reasons, you might want to use PHP with it, but you can’t find any guides on how to do that. And for that day, I have written this post.

Continue reading “Simple C# Web Server with PHP Support using CGI”

Assembly: Redefined – Macros to the rescue

After taking my first steps in the world of Assembly, and getting my little extended Hello World running, I had learned that writing error-free Assembly code is by no means impossible, but you have to take great care to not make mistakes. I basically had to turn on my debugger after every bigger modification, because I had accidentally broken something.

But just like C and other languages protect you from simple mistakes, like not unwinding the stack after calling a cdecl-convention function, or addressing variables on the stack incorrectly, you can easily help yourself write cleaner, more robust code with the help of macros.

Continue reading “Assembly: Redefined – Macros to the rescue”

A little adventure into Assembly

A few days ago, a thought popped into my head. “Hey, let’s learn how to write assembly!”

While I know the basics of how Assembly works, and even though I’ve read some Assembly code over the years, while debugging or analyzing applications, I’ve never written an actual program in any Assembly language. That obviously had to change.

How hard could it be, right?

Continue reading “A little adventure into Assembly”

My experience translating for Nexon

Many years ago, when the European version of the MMORPG Mabinogi was still active, I was approached by a moderator of the official Mabinogi EU forum. Apparently Nexon was looking for people to translate an upcoming patch for MapleStory, another MMORPG of theirs, from English to their native language. This was on a Wednesday, one week before the patch was to be released, though they didn’t seem to be in much of a hurry. My first question was regarding payment, and after the moderator had consulted his contact at Nexon I was told some numbers. The translation of the entire update into one language would’ve been worth about 750€ ($900), and since I didn’t have anything better to do that week, I agreed.

Continue reading “My experience translating for Nexon”

My thoughts about Go

I’ve always liked C and its simplicity, but it’s kinda tedious to write bigger programs in it, which is why I’ve always refrained from doing so. It’s not even the memory management, it’s simple things, like working with strings, or the overhead you have for calling “methods”, animal_do_something(animal). In comes Go, the programming language by Google.

Continue reading “My thoughts about Go”