• 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!

[7.7] RealOTS 7.7 Cipsoft files (virgin)

Rare Items Report — Zanera Server (fun facts from a full source-code deep dive)

After combing through Zanera’s scripts + map reward rooms, here’s a neat “this exists, but nobody actually has it” snapshot.

Never obtained by any player


Item ID Status
Blessed Shield 3423 Quest room only
Magic Longsword 3278 Quest room only
Warlord Sword 3296 Quest room only
Thunder Hammer 3309 Quest room only
Golden Helmet 3365 On ground only
Winged Helmet 3368 Quest room only
Horned Helmet 3390 Quest room only
Found in player possession

Bunnyslippers (3553) — 2 total confirmed on the entire server:

Savage Saint (Lv152 EK) — house: Wood Avenue 11

Xadow Kitad (Lv46 MS) — house: The Tibianic

Weird bug / fun anomaly: negative skill progress

The skill bug concerned a problem with floating-point precision in the game engine.

What was the bug?
The Tibia 7.7 server calculates skill progress (e.g., shielding, axe, sword) using the following formula:

Code:
progress = (current_exp - last_threshold) / (next_threshold - last_threshold) * 100%

For 52 players, the current_exp value was 1 point less than last_threshold, resulting in a negative percentage:
Code:
Exp 109, Last 110, Next 181 → (109-110)/(181-110) = -1%

The server logged this as an error:

Code:
TSkill::GetProgress: Berechnungsfehler Exp 109, Last 110, Next 181, Prozent -1.
# Spieler Amrel - Skill 9

Why this happened?
When a player advances to a new skill level, the server calculates the XP threshold using a formula with a multiplier (e.g., 1.2x or 1.4x). When converting from float to int, rounding occurs—the server stores current_exp = 109, but then calculates last_threshold = 110 (one more). This is a float precision error.

I scanned 64,512 .usr files and found 52 characters with this bug.
 
Last edited:
That's unremarkable. The Zanera files (it's the version I took) has been circulating for quite a while. I read some thread on here I think with old letters from Zanera. When I first got the server to run (together with SimOne) I walked around looking at all the decorated houses. Frozen in time. Very beautiful.
Was Zanera the only server data you could steal? Or are out there some other worlds? I recall i read somewhere you compromised various cipsoft servers back then. Would be nice to get an updated glance of what was it now that you are active again
 
Congragulations! Try to discover the Jakundaf Desert mistery ;)
Post automatically merged:


:)
Post automatically merged:


The server on the tallbar is Zanera
Full analysis of Jakundaf Desert Mystery in the attachment
 

Attachments

Full analysis of Jakundaf Desert Mystery in the attachment
Great analysis, thank you so much!
I have fully manually converted all moveuse.dat into .lua functions (it required a lot of checks and changes to the core mechanics of Othire/TFS. You will notice the CipSoft engine clears splashes and magic fields between movements and such, etc). You will also find deeper stuff, like the Cobra NPC checking how many poison ticks you have left in order to teleport you to the Pharaoh room or not, which are mechanics hard to replicate purely in Lua, and you will need to do core modifications in C++ to the mechanics.

Anyway, quests like Silver Mace or others may or may not be true; the server files are from 7.72. Quests like Naginata used to be where Guardian Halberd is up to this day, and CipSoft made many changes over time without really pointing them out to the public. I recall one of the most noticeable ones was dwarf geomancers looting BoH back when I started playing. I always heard that rumour, but nobody ever looted such items again. It was later confirmed they indeed had BoH as loot, but it was removed by CipSoft at some point.

I'm not sure what was going on in the Jakundaf Desert; it seems there was so much unfinished stuff (Banshee teleport, bars being removed in dragon spawns, tiles trying to teleport stuff and doing spark animations when using the Thais farm levers, etc.). Was it some epic quest at some point, or just unfinished content? I think we will never know—unless someday CipSoft decides to respect their history and lore and tells us many things we've missed over time, although I don't see that as very likely.
 
I'm not sure what was going on in the Jakundaf Desert; it seems there was so much unfinished stuff (Banshee teleport, bars being removed in dragon spawns, tiles trying to teleport stuff and doing spark animations when using the Thais farm levers, etc.). Was it some epic quest at some point, or just unfinished content? I think we will never know—unless someday CipSoft decides to respect their history and lore and tells us many things we've missed over time, although I don't see that as very likely.
My guess is that said script was used for the old desert quest before the quest system was introduced. It teleports whatever is present on one inaccessaible square to where the sparks blink. It probably used to teleport the chest, as the reward room didn't exist yet. In old screenshots (e.g. on the nightmare knights website) you can see that the chest actually appears in this place. Of course, it wasn't originally connected to the Thais farm lever, but I think that they just changed it this way when the script wasn't needed anymore. They tended not to remove unused / outdated scripts, but rather block the way to trigger them, e.g. they didn't remove all the scripts that closed bridges, they only removed levers that triggered them. Here they couldn't remove the lever, since it was now needed to teleport players to the new reward room, so they changed the trigger to whatever came to their mind and called it a day. They must have thought that after this change no one would ever trigger it again anyway (and they were right, because we only found it thanks to the leak). This may sound ridiculous, but imo it is the only logical explanation for that script, and I don't think there is any mystery behind it.

However, there was clearly supposed to be a golden helmet quest. There is a book that holds some hints to accessing the isle, and you can see that the body was placed on the only non-refreshable square there, so it was planned to be one-per-map-reset reward in the pre-quest system era. The quest was either deleted or, most likely, not finished, though.
 
Last edited:
Was Zanera the only server data you could steal? Or are out there some other worlds? I recall i read somewhere you compromised various cipsoft servers back then. Would be nice to get an updated glance of what was it now that you are active again
Been on many servers but it's the only version I took (first compromise)
 
2026 update: I've kickstarted a side project:

I'm developing a Tibia server and client from scratch. The server is written in Rust and the client is pure HTML/Javascript (communication over websockets). I likely have a couple more weeks before it reaches 100% parity with the original 7.7 server and once done I'll host a public test server prior to launch.

Current state:
  • Map 100%
  • Spells 100%
  • Monsters + behaviour 100%
  • Damage 100%
  • NPCs: 100%
  • Mailsystem / Depot: 70%
  • House system: 0%
  • Raids: 0%
  • Skills / conditions: 100%

Inching closer to parity on protocol and rendering (game client)

Attached is a screenshot of the work in progress.
Really cool stuff. To me the funniest/coolest part is we're literally 1:1 at the same stage on everything you mentioned here atp.

Well, my skills/conditions is 90% complete, but uses the same internal system, just haven't added all conditions yet. Ah, and spells, I have 1% of the spells (had 50%, but transitioned from old code to pure C++ and now I have to re-add them). But everything else matches.
To compensate I have full 3D spectating support for my server though, also your client looked at this point a bit half cooked, but that's understandable since you fully rewrote the client.

But I've worked on this for the last 5+ years, and I assume you've spent much less time, which I think is really impressive.

Thanks so much for releasing this distro, my project wouldn't exist among many other projects if it wasn't for it, and gl with your projects.
 
Really cool stuff. To me the funniest/coolest part is we're literally 1:1 at the same stage on everything you mentioned here atp.

Well, my skills/conditions is 90% complete, but uses the same internal system, just haven't added all conditions yet. Ah, and spells, I have 1% of the spells (had 50%, but transitioned from old code to pure C++ and now I have to re-add them). But everything else matches.
To compensate I have full 3D spectating support for my server though, also your client looked at this point a bit half cooked, but that's understandable since you fully rewrote the client.

But I've worked on this for the last 5+ years, and I assume you've spent much less time, which I think is really impressive.

Thanks so much for releasing this distro, my project wouldn't exist among many other projects if it wasn't for it, and gl with your projects.
You're welcome!

Are you working on a HTML client as well?
 
:)


Nope, I use heavily modified OTC and heavily modified Unity client.

But I also do other things, like run a neural network on server side for detecting macro usage on client side.

Sweet! Curious about your model training set up. Did you have a lot of macro set ups and packet captures as sample data for predictions?
Also, share some screenies of your project.
 
I've trained an SDXL lora to generate Tibia-style sprites. Will likely publish the model for free for you creators along with the ComfyUI workflow.
Edit: published the model on Civitai:



ComfyUI workflows can be found here: GitHub - dennisvink/tibia-comfyui-workflows: ComfyUI workflow for Tibia-style image generation and img2img (Tibia V2 SDXL with comfyui-outline) (https://github.com/dennisvink/tibia-comfyui-workflows)
 

Attachments

  • Screenshot 2026-02-05 at 16.47.32.webp
    Screenshot 2026-02-05 at 16.47.32.webp
    25.9 KB · Views: 61 · VirusTotal
  • Screenshot 2026-02-06 at 02.04.52.webp
    Screenshot 2026-02-06 at 02.04.52.webp
    58 KB · Views: 35 · VirusTotal
Last edited:
Sweet! Curious about your model training set up. Did you have a lot of macro set ups and packet captures as sample data for predictions?
Also, share some screenies of your project.
I forgot the exact details, but I wrote my own various macro scripts in Python and either trained the network on server side (I think that's what I did).... yeah, I'm pretty sure that's what I did actually.

No wait, that was the first/old method, the other time around I sent data through OTC using a custom protocol to the NN server running locally which is coded in Python and dumps training data in CSV. I have bool trainMode set in both server and OTC.

You can read more about this and other news on my blog Source's Tiny Technology Blog (http://taoengine.net) in all honesty I don't want to spend time/effort reuploading pictures here :P But thanks for the invitation to hopefully link/show off some stuff :)

I have also experimented with and want to try to replace all Tibia sprites using AI! I have looked at both GAN and Diffusers among potentially others.
If this works well I will be using this, thanks!
 
HTML client splash screen and current UI. It's coming along great by the way.
 

Attachments

  • Screenshot 2026-02-10 at 07.07.53.webp
    Screenshot 2026-02-10 at 07.07.53.webp
    254.6 KB · Views: 102 · VirusTotal
  • Screenshot 2026-02-10 at 09.24.20.webp
    Screenshot 2026-02-10 at 09.24.20.webp
    295.6 KB · Views: 95 · VirusTotal
Last edited:
HTML client splash screen and current UI. It's coming along great by the way.
Nice bro. Looks very alpha, but I love the progress, the console helps a lot.

Btw, this is meant to be motivating, I just implemented raid system so it's your time to do so as well lest you fall behind! Haha :D

Cheers!
 
Nice bro. Looks very alpha, but I love the progress, the console helps a lot.

Btw, this is meant to be motivating, I just implemented raid system so it's your time to do so as well lest you fall behind! Haha :D

Cheers!
I left the Rust server for what it is for now, and published it on Github. Most of it works :D But I wouldn't recommend it for production (its performance is suboptimal).

The screenie you see here interfaces with the decompiled version. Modified it to not use signal handlers for game progression and compiles cross-platform. Stripped out the TCP/IP layer in favour of websockets and fixed some potential buffer overflows. Also moved spells out of the code and into their own spell files with a little DSL for some scripting so you can do some more advanced stuff.
Post automatically merged:

Code:
# dat/spells/ex-umbra-nova.sp
# A bursty shadow nova that scales with level+ML, with built-in clamp safety and a flavor ping.

version = 2
group = "ex umbra nova"
type = "player"

# --- Identity ---
SpellID = 104
Formula = "ex umbra nova"
Mana = 85
Level = 45
Flags = [AGGRESSIVE_SPELL]
RuneGroup = 0
RuneNumber = 0
Amount = 0
RuneLevel = 0
SoulPoints = 0
Comment = "Umbra Nova (shadow nova burst, scaling)"

spell = (SpellID, Formula, Mana, Level, Flags, RuneGroup, RuneNumber, Amount, RuneLevel, SoulPoints, Comment)

# --- Tuning knobs ---
let Base = 120
let Variation = 45
let Radius = 4

behavior = (SpellID, "notify_caster", "You speak the dark syllables. The air folds inward…")

# High-level casters get bigger radius and higher base damage.
if (PLAYER_LEVEL >= 80) {
  behavior = (SpellID, "mass_combat_formula",
    max(0, (Base + 30 + rand(-Variation, Variation)) * clamp(ScalePercent, 50, 220) / 100),
    EFFECT_DEATH,
    5,
    DAMAGE_ENERGY,
    ANIMATION_DEATH)
} else {
  behavior = (SpellID, "mass_combat_formula",
    max(0, (Base + rand(-Variation, Variation)) * clamp(ScalePercent, 50, 220) / 100),
    EFFECT_DEATH,
    Radius,
    DAMAGE_ENERGY,
    ANIMATION_DEATH)
}
 
I left the Rust server for what it is for now, and published it on Github. Most of it works :D But I wouldn't recommend it for production (its performance is suboptimal).
Cool 😎

The screenie you see here interfaces with the decompiled version. Modified it to not use signal handlers for game progression and compiles cross-platform. Stripped out the TCP/IP layer in favour of websockets and fixed some potential buffer overflows. Also moved spells out of the code and into their own spell files with a little DSL for some scripting so you can do some more advanced stuff.
Post automatically merged:

Code:
# dat/spells/ex-umbra-nova.sp
# A bursty shadow nova that scales with level+ML, with built-in clamp safety and a flavor ping.

version = 2
group = "ex umbra nova"
type = "player"

# --- Identity ---
SpellID = 104
Formula = "ex umbra nova"
Mana = 85
Level = 45
Flags = [AGGRESSIVE_SPELL]
RuneGroup = 0
RuneNumber = 0
Amount = 0
RuneLevel = 0
SoulPoints = 0
Comment = "Umbra Nova (shadow nova burst, scaling)"

spell = (SpellID, Formula, Mana, Level, Flags, RuneGroup, RuneNumber, Amount, RuneLevel, SoulPoints, Comment)

# --- Tuning knobs ---
let Base = 120
let Variation = 45
let Radius = 4

behavior = (SpellID, "notify_caster", "You speak the dark syllables. The air folds inward…")

# High-level casters get bigger radius and higher base damage.
if (PLAYER_LEVEL >= 80) {
  behavior = (SpellID, "mass_combat_formula",
    max(0, (Base + 30 + rand(-Variation, Variation)) * clamp(ScalePercent, 50, 220) / 100),
    EFFECT_DEATH,
    5,
    DAMAGE_ENERGY,
    ANIMATION_DEATH)
} else {
  behavior = (SpellID, "mass_combat_formula",
    max(0, (Base + rand(-Variation, Variation)) * clamp(ScalePercent, 50, 220) / 100),
    EFFECT_DEATH,
    Radius,
    DAMAGE_ENERGY,
    ANIMATION_DEATH)
}
I see. I just use C++ for everything except for config which is in Python using the C API.
But I have its own directory for "subsystem" which includes spells and commands; I guess on Realots there's no such thing as commands, only spells, but I left them in because
Code:
/a
is simpler to use than alani for example.

  • I have no cross compatibility anymore, Linux only
  • Compiles using CMake and multithreading in a matter of < 15 seconds approximately on an Ultra 9 for a full clean build
  • Heavily engineered for performance, using a thread pool for all computationally expensive operations that are possible to run multithreaded (pathfinding, RSA, XTEA/AES, among others - I feel like I've left something out, should be 5-6 different things)
  • Handles 100-300k packets with ease
  • Handles 5k active players without noticeable lag (1 turn by all players every second)
  • Multithreaded epoll like Nginx
  • Fully inspired/based around Realots, but I like to think it's modernized, much simpler to read/understand, and possibly better engineered overall at least in some aspects

I forgot if I mentioned, but if it wasn't for this release I probably wouldn't have started on this project, so thanks again, I think you've inspired a lot of people by this release, like the various decompiled projects, etc, so much value and nostalgia from these files, and imo a better system for the future in some ways than OTServ based engines - people can disagree about that, but that's my opinion.
 
Cool 😎


I see. I just use C++ for everything except for config which is in Python using the C API.
But I have its own directory for "subsystem" which includes spells and commands; I guess on Realots there's no such thing as commands, only spells, but I left them in because
Code:
/a
is simpler to use than alani for example.

  • I have no cross compatibility anymore, Linux only
  • Compiles using CMake and multithreading in a matter of < 15 seconds approximately on an Ultra 9 for a full clean build
  • Heavily engineered for performance, using a thread pool for all computationally expensive operations that are possible to run multithreaded (pathfinding, RSA, XTEA/AES, among others - I feel like I've left something out, should be 5-6 different things)
  • Handles 100-300k packets with ease
  • Handles 5k active players without noticeable lag (1 turn by all players every second)
  • Multithreaded epoll like Nginx
  • Fully inspired/based around Realots, but I like to think it's modernized, much simpler to read/understand, and possibly better engineered overall at least in some aspects

I forgot if I mentioned, but if it wasn't for this release I probably wouldn't have started on this project, so thanks again, I think you've inspired a lot of people by this release, like the various decompiled projects, etc, so much value and nostalgia from these files, and imo a better system for the future in some ways than OTServ based engines - people can disagree about that, but that's my opinion.
The syllable system is horrible of course :D
Nice for lore but completely overengineered.
 
The syllable system is horrible of course :D
Nice for lore but completely overengineered.
You mean the original implementation or the syllable system in general? I like it personally, idk anything about the original implementation, but all the features of it is thumbsUp to me.
 
You mean the original implementation or the syllable system in general? I like it personally, idk anything about the original implementation, but all the features of it is thumbsUp to me.
It's horrible ngl, also the character and account right spells it's just prehistorically built
 
Back
Top