Jump to content
Sign in to follow this  

Our future client project...

Recommended Posts

This is by far our most exciting -- and promising! -- project, and one that I've been spending every possible moment on lately.

Why is this project important?

Firstly, before I get into anything, I should explain why the client source -- and this project -- is important.

It's essentially useful for 2 things: being able to more easily fix things ourselves, and giving us the option to literally do anything. I can't stress this last part enough. With the server, we have some means of creativity; but anything we could implement has to find a way to have this deal with the client in a suitable manner.

Having the client source removes this limitation entirely. Our server, our client. We can do whatever we want with it.

We need a new UI? We can make one and add it in. Imagine the possibilities.

Regarding fixing things, right now we rely on official updates from mgame; our update process revolves around using their code and adding in our patches (each time) to fix their issues (that they haven't yet fixed themselves).

Each update we hope that they've actually fixed things that we've yet to fix for them (manually, with assembly, which is a considerably more daunting and time consuming task for us than it is for them with the client source). Changing a single line of code for them, may take us a few hours to do manually via assembly (having to track down where this logic is, etc).

And now some history...

If you're not aware, there exists a set of leaked (official) source files for ~1.06x (for the server AND client -- as well as their development tools) from way back in 2002~2003. This was before its first released version, and before anything was actually implemented properly, but it's still a tremendously invaluable resource as a lot of things still are handled similarly -- if not the same -- even now in 2.1xx.

So way back during server development (~2013) I explored updating the client source. I updated it to support the various new file formats, and had it connecting to our server -- compiled for 1.298 -- since UI behaviour is a lot closer (less of a jump, means easier to get in and mess with things without having to update literally everything to get to that point). I implemented capes, symbols (rendering and importing them via the UI), premium stuff, PM windows (because again: this was back before PM windows even existed!), loot boxes, and a bunch more.

Eventually I moved on to play with 2.0xx, but quickly lost interest for a few reasons: there was a ton more to do, we were very busy with server development still (so this felt like wasted time), and well, at the time I was doing it solo, so I felt like it was too much of a monumental undertaking to attempt at this point in time.

Aaaaaand now skip to this year (2017)

The server's in a very good place, to the point where major server development is few and far between now (usually just bug fixes at this stage), and the OpenKO project happened.

If you're not familiar with the project, they set about messing with the client source as well in an attempt to update it while learning how things work. This piqued my interest, and I became involved with it for a bit. Many hands make light work, after all.

However, my experiences with open-source KO development have taught me that it's... well, a terrible idea (blah blah working alone blah blah spoonfeeding people blah blah people complaining about things not being implemented while at the same time selling it for their own personal gain blah blah... you get the idea), so I took the opportunity to ask those who were actively contributing about doing so in a private repository.

Surprisingly (or maybe not?) that went over quite well. I should add that the project isn't specifically for ApexKO; most are just doing it for their own learning purposes, but ultimately it's my goal to use this project here, in place of the official client.

I should probably also mention that I still help out with the public project; it is still a great place to learn how things work, so I'm happy to help people out over there. My main development focus though, is with the private repo. With the private repo it's a lot more comforting knowing that people aren't going around selling it while harassing you to implement/fix things for them (I'm not even kidding; this happened.).

Since, we've made leaps and bounds with the project.

At the time of writing, we've:

  • Implemented symbols (clan, PVP, party leader, chicken, etc)
  • Implemented capes
  • Added premium behaviour (texts and whatnot)
  • Updated overhead info (e.g. line under clan leader's name), fixed ranges on names, etc.
  • Reimplement TBL handling logic to support newer TBLs and handle them in a more intuitive way (without having to save to .tmp files after decrypting >_>).
  • Implemented merchant stalls, UIs and all relevant logic for it (UIs are more intuitive to interact with, as well)
  • Implemented loot boxes
  • Implemented the upgrade system, so you can now compound accessories and upgrade items. The anvil will show the effect when you burn an item or upgrade it, etc.
  • Implemented the new "presents" screen
  • Implemented the new login screen
  • Implemented the new nation selection screen (and fixed the old one)
  • Updated the character creation screen.
  • Implemented backwards compatibility for old UIs 
  • Updated and fixed rendering of item tooltips
  • Fixed wrapping issues with tooltips in general
  • Implemented drag/drop behaviour from skill tree -> skill bar.
  • Implemented updated hostility behaviour and unified it all.
  • Implemented event tile support (for triggering things like zone notices)
  • Implemented zone notices (for entry and area triggers)
  • Implemented commands UI
  • Implemented exit menu
  • Started migrating logic to use a 3D engine (so we aren't tied to DirectX and Windows, and we can also optimise our rendering pipeline).
  • Updated the party list UIs.
  • Implemented debuff behaviour for HP bars (and for party lists).
  • Implemented mousewheel event support
  • Reimplemented networking logic (for stability, performance, easier to work with, etc).
  • Reimplemented input logic to no longer rely on Windows edit controls (meaning we needed to implement all of the editbox behaviour ourselves, like handling moving the caret and keys/hotkeys like CTRL+C/CTRL+V, home/end, etc)
  • Implemented most of the King system UIs (will probably be done by the end of the week, even)
  • Implemented the skill cooldown effect overlay

... and much, much more. I actually probably shouldn't have been as specific, because I was really just listing changes (at random, really) I considered reasonably noteworthy -- but they're far from all.

In closing...

Long story short, the work we've put into this project so far has been monumental. So much so that it's looking likely that we'll have sufficient 1.298 support to push into future versions reasonably soon.

The project is extremely exciting. Time consuming, for sure, but very exciting and offers us endless new options.

Perhaps I might make status reports regarding this project here, if anyone's interested in seeing how things are coming along. ^_^

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.