The client is in a feature freeze, meaning that no new things will be added until after the update, and the focus is on finding and fixing bugs.
There are a lot of changes in this version, such as finally moving to a more optimized object format, compressed maps and objects, using the zlib library, much better special effects, a few bug fixes from the previous versions, and so on.
The problem with so many new things (submitted by many contributors) is that there are new bugs, which need to be found and eliminated before we release the update.
After all the known bugs are fixed, we will release a Release Candidate (RC), and invite people to try it and report problems. After the problems have been found and fixed (that can take from days to weeks), we will release another RC, until no serious bugs are found, and then we will proceed with the client update. Hopefully it should be ready by mid May.
Speaking of bugs, we had a few small bugs on the server that were relatively harmless, but sometimes annoying.
One of those bugs was the fact that when trying to open a bag or enter a door from a distance, you would stop just on top of the bag, or near the door, without opening the bag/entering the door. This didn't happen too often, and was impossible to reliably reproduce on the main server. On the test server, it just didn't happen at all.
Debugging a MMO server is very difficult, because you can't just use a debugger (imagine a break point being triggered late at night, when no developer is around, and have the whole server frozen until me or Learner check the debugger Window).
So since hardware break points are out of the question, and the bug was not locally reproducible, I had to write a lot of logging code, to log various function parameters and see if certain pieces of code are executed.
In pseudocode, it looked something like this:
log if the program got here
log if the program got here
call some function
log the returned parameters from that function
Eventually, me and Learner narrowed the problem to two functions, but we still didn't know what's wrong, so even more debug code was needed. I went as far as placing software 'hardware' breakpoints, such as a piece of code to constantly analyze a variable and see if it changed when it shouldn't (I was fearing some buffer overflow destroying some variables).
Eventually, it turned out that the problem was a return
in a for loop. I should have used continue
instead :/ And this bug has been here for almost 4 years...
Well, at least that bug is fixed now. Another bug that is fixed is the possibility of getting two bone stacks instead of one, when taking off an equipped bone. Again, not really a big deal, but sometimes a small bug can hide a bigger one. It turned out that there was no bigger bug, and due to the fact that someone was able to reliably reproduce it, I managed to fix it pretty fast.