Update 4 — Game Server Downgrade to 7.55 + Full Map Conversion Pipeline
After getting the map editor and data cleanup in order (Update 3), the next logical step was to actually run server. Here's what happened.
* * *
The Server
I took fusion32's Tibia game server — a C++ reimplementation of the original CipSoft 7.70/7.72 engine — and downgraded it to work with the 7.55 protocol. The codebase already had some#if TIBIA755preprocessor guards from earlier experiments, but most of the critical subsystems needed manual adjustments:
- Protocol: 7.55 uses plaintext (no XTEA/RSA encryption), different packet structures, different creature data format
- QueryManager: Re-enabled connection to fusion32's tibia-querymanager (SQLite-based) — had to fix the password handshake (the game server applies a
DisguisePassword()XOR transform before sending, so the QM config needs the plaintext password, not the disguised one from.tibia)- Login server: Wrote a minimal Python login server for the 7.55 plaintext protocol (port 7171 → character list → game server on port 7172)
The whole thing runs in Docker (Ubuntu 22.04, g++ build) with the QueryManager launched alongside the game process.
* * *
Map Conversion: 7.5 Binary → 7.7 Text
The original map is in CipSoft 7.5 binary.secformat (hex filenames, binary tile streams with group/number item encoding). The game server expects 7.7 text.secformat (decimal filenames likeXXXX-YYYY-ZZ.sec, human-readableContent={...}syntax).
My map editor's parsers (sec_parser_75.py+sec_parser.py) handle both formats, so I wrote a batch conversion script:
- 9,478 sectors converted, 0 errors
- All 3,513 unique TypeIDs verified within the 7.55 range (max found: 4393, client limit: 4402)
- Round-trip fidelity: 99.8% byte-identical with original binary data
* * *
The Tricky Bug
After the first conversion, 87 sectors failed to load withunknown attributeerrors. The C++ server parser was choking on sign/book text containing unescaped quotes:
Code:String="house "Great Willow 1c" rent..."
The parser would see"afterhouse, think the string ended, and then try to parseGreatas an attribute name → crash. Fix: proper escape handling (\",\\) in the serializer. After that — zero parse errors across all 9,478 sectors.
* * *
Current Status
Everything boots clean:
- 323 NPCs loaded (Frodo, Willard, Aruda, all the classics...)
- Monsters spawning normally (Dragon Lords, Orcs, Beholders, Amazons...)
- QueryManager authorized and connected
- 0 map parse errors
Isn't better to just use 7.72 client but change the sprites, modify the client to look like 7.4/7.5? (tibianic-dll)
7.72 has nice features like OpenGL, DX9 etc.