Jump to content
  • Create an account or sign in to use the shoutbox

    You need to be a member in order to be able to chat with other users.

Sign in to follow this  
twostars

Our client & extensions (official)

Recommended Posts

The client we're currently using for ApexKO is the official 2.1xx client with many, many custom improvements patched in.

Our update process

Keeping things up-to-date with official seems daunting, but our process works fairly well.

First, Aesteris unpacks the official client executable. Then we run it through our patcher (see below for more info), and - provided there's no major changes we need to update the patcher for - it patches it up in seconds.

Then we need to ensure there's no breaking changes with the server, so we hook it back up to our local server, and essentially go bug hunting (needless to say, this part sucks -- USKO needs actual changelogs  :().

Regarding keeping the .TBLs (main client data) synced, we have a git repository setup to track changes to both our patches, and USKO's. We commit the TBLs in each patch which gives us a nice diff to compare changes.
This means that we can then use git to merge them, which - although we still have to go over conflicts (with stuff we've added) - saves so much time.

Barring anything new that needed to be implemented as a result of this patch, that's it -- we're done.

Our patcher

From the very start we realised it would be a pain to have to manually patch every single one of our patches in our growing patch collection every time USKO updated their client. So for this reason, we wrote a patcher to 1. find and 2. patch in our patches generically.

This has definitely paid off, as it has for sure saved us an extraordinary amount of time; it could take us a few days to manually apply all of our patches for a single patch. With the patcher, this happens in mere seconds. Every so often we do need to update our patcher to support new clients, because they change things in major unexpected ways (like the code the patch was fixing was entirely changed, be it because of the compiler or simply because they changed the logic of the method), but even so, this still saves us a ton of time.

Our patches

Right now we have 50 odd base patch "groupings" and a considerable amount of patches (and their respective finders) in each of these groups.

We have patches for all sorts; like increasing limits, fixing broken or inconsistent behaviour (e.g. fixing UI behaviour, the blinding effect, broken premium checks, party list / targeting behaviour, etc, etc, etc), implementing new behaviour (e.g. antialiasing support, saving & loading the party UI's position, logic to allow the client to handle the removal expiration of items correctly, or allowing for our kick behaviour in event parties).

There's a ton in there; all-in-all, our patches are ~8,000 lines of code. I'm very glad we don't need to patch these manually.

Patching these things manually is always a tedious task. It essentially involves getting inside mgame's head and figuring out how they'd have implemented it, with the assistance of the leaked client source (~1.06x). From there, using a debugger or disassembler to track down where this particular logic is implemented (which can take hours for more fiddly things), and then reversing how their logic works.

With an understanding of how the logic is implemented and why the issue exists, we can start to develop a patch for solving it.

Once the initial patch is written up, we test it until it's working as-intended (without any side-effects), and then write up finders for where the patch needs to go and anything it needs to reference. Finally, we can then rewrite the patch for the patcher, re-patch the client and re-test to be sure the patch is still correct.

And that's about it...

There's not a whole lot to say about the client, really. Beyond the custom patches, the client is more or less official -- for now. ^_^

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×