Lineage 2, Chronicle 4: Scions of Destiny C++23 emulation servers.
This is my latest passion project. I've been wanting to do this since I was 15, and here I am 16 years later with enough programming skills to do this on my own.
Even though I never played C4 (began on Interlude), I'm targeting this one because the game is less big and the protocol is slightly easier. I'd love to support more protocols in the future.
Go fast (but not too fast) and break things. YAGNI. Implement game design patterns I've studied years ago. Don't be too clever but have fun implementing and testing. DO NOT USE MULTIPLE THREADS. Leverage async code instead.
See the Unrealeased section of CHANGELOG.md
If it's not in the list, it's probably not implemented, or very (very) partially implemented. Here's what's been done so far:
Core
- Packet creation, reading and sending;
- Auth & Game protocols encryption/decryption;
- Exception stack handling.
Login Server
- Protocol
c621only; - Users can log in with any credentials, account is created if non existent;
- Server list always displays 2 server (to test one up, one down), both lead to game server.
Game Server
| Category | Feature | Status | Details |
|---|---|---|---|
| Authentication | Supported protocols | 656 |
|
| Lobby | Character creation | 🟠 | Base stats are the same for all races/profession. |
| Character deletion | 🟢 | ||
| Character selection | 🟢 | Every character spawns at Talking Island. | |
| Inventory | List | 🟢 | |
| Equip gear | 🟠 | No effects applied yet. | |
| Starting items | 🟢 | Can be configured per starting profession and/or globally. Gear items can be set to equipped. |
|
| Item templates database | 🟠 | Most templates are missing due to datapack conversion effort needed. | |
| Status Window | Display values | 🟢 | |
| Refresh on update | 🟢 | Optimization: max. once per World update. | |
| Mini-Map | Open/Close | 🟠 | World map only. |
| Party members location | 🔴 | ||
| In-game time | 🟢 | ||
| Social | Send/Receive messages | 🟢 | |
| Send/Receive private messages | 🟠 | Visually only. | |
| Chat restrictions | 🔴 | ||
| System messages | 🟢 | ||
| Social actions | 🟢 | ||
| Combat | Auto-attacking | 🟢 | Until target is dead. |
| Corpse removal | 🟢 | ||
| Skills | List | 🟢 | |
| Learn | 🟠 | Via admin command only. | |
| Use | 🟢 | Single and multiple targets animation. | |
| Effects | 🟠 |
Available effects:
|
|
| Prerequisites | 🟠 | No mana/health consumption yet. Target matching combination is possible. |
|
| Skill templates database | 🟠 | All skills loaded with bare minimum info. | |
| Cast cancellation | 🟢 | ||
| Shortcuts | Add/Replace/Remove | 🟠 | Limited to skills, items and actions. |
| Movement | Left-click | 🟠 | No checks done whatsoever. |
| Geodata | 🔴 |
I develop with the following environment:
- Windows 11
- Visual Studio Build Tools 2026
- CMake 4.2 (required for VS 2026 generator)
- Conan (latest as of 2026-04-12)
- Ninja (latest as of 2026-04-12)
git clone https://github.com/Chnossos/l2cpp.git && cd l2cpp
conan install -b missing -c tools.cmake.cmaketoolchain:generator="Ninja Multi-Config"
cmake --preset conan-default
cmake --build build --preset conan-release # or conan-debug- Download a game client supporting protocol 656
- Build the project
- Start a login server from the project root
- Start a game server from the project root
- Use the client to log in, and voilà!