
A new client, built from the ground up
Until now the game on your screen has been the retail client: a sealed 2013 Windows program. We could build a server it would talk to — that is what most of this project has been — but we could not change a pixel of what it does. It draws a 1024×768 box. It has the windows it shipped with. If something in it is wrong, it stays wrong.
As of this week there is a second client, and we wrote every line of it.
What it is
A native program, written in modern C++, that runs on Linux without Wine or any compatibility layer. It does three things:
- Reads the game's own files. Point it at a normal install and it loads the models, maps, textures, sounds, window layouts and tables exactly as the retail client does. Nothing from the original game is copied into it or redistributed with it; it borrows the install you already have.
- Speaks the real protocol. It logs into the same servers, in the same language, as the retail client — so it plays on the same realm, next to people using the old one.
- Draws everything itself. A skinned-model renderer for the game's meshes and animation, a terrain and water renderer for its maps, a particle and effect system for its spell art, and OpenAL for sound and music.
The interface is the part we are proudest of. The game's windows are described by XML layouts and driven by Lua 5.1 scripts. The new client runs those layouts and those scripts unmodified, on an interface engine written to behave the way the original one did. When a window looks right it is because the game's own description of it is being followed — not because someone redrew it by eye.
Why bother
Because a client you own is a client you can improve. Everything in the posts that follow is something we could not have done with the retail one:
- the window fills whatever screen you have, at any size (next post);
- the whole game is editable — maps, models, windows and data tables — with editors built on the same code the game draws with;
- the server can push a corrected map to every connecting player, signed so it cannot be forged;
- systems the shipped client only gestured at — talents, the zodiac, pets — can be finished properly on both ends of the wire.
The rule we worked under
Every format and every message is written down with its evidence. The repository holds pages of notes on how the map files are laid out, what each packet means, which address in the original program a behaviour comes from, and which captured session confirmed it. Where we had evidence we followed it; where we had to guess, the notes say so. It is slower than guessing. It is also why the new client can log in, walk, fight, loot and talk to the same server without either side noticing anything is different.
What it is not — yet
We would rather be exact than exciting:
- It runs on Linux today. A Windows build has not been made. We have gone through the code and listed what stands in the way — sockets, a few file paths, the build scripts — and it is a finite list, but it is not done.
- It is not what the launcher installs. Players in the closed beta are still on the retail client, and will be until the new one has earned the right to replace it.
- It is not finished. Some windows are complete, some are partial, and the changelog at the end of this run says which are which.
What is next
The next few posts go through the new client one piece at a time: how it fills your screen, the editors, what we can now change on a live server, and the progression systems — talents, the zodiac and pets — that finally have both a server and a client behind them. Start with the screen.







