• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Tibia 7.7 Map Editor for Original CipSoft .sec Files (PyQt5) - Pre-Alpha

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 TIBIA755 preprocessor 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 .sec format (hex filenames, binary tile streams with group/number item encoding). The game server expects 7.7 text .sec format (decimal filenames like XXXX-YYYY-ZZ.sec, human-readable Content={...} 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 with unknown attribute errors. The C++ server parser was choking on sign/book text containing unescaped quotes:

Code:
String="house "Great Willow 1c" rent..."

The parser would see " after house , think the string ended, and then try to parse Great as 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.
 
7.7 does look like 7.5, and it can even load 7.55 dat and spr without any changes (7.5 dat with only slight changes). There is no point to use the older version, when the only significant difference is the lack of packet encryption and newer graphic engines, and you should definitely want to have these features.
 
Hello!

This seems like an amazing tool! Are you still sharing the sources?

I've spent a lot of time messing with fusion32 files and what an amazing job he did! I'd love to be able to test your tool too! :)
 
If these guys don't share sources, you can always look for the sources of my realots-rme project which loads and saves to both OTBM and SEC, as well as supporting house editing, spawn editing, monster editing and item editing using the full original proprietary file formats.
 
Back
Top