A repository for all things Tibia.
They are here!
Talesoftibia.com: Open Source
Discord: Explorer Society
Search Transcripts: NPSearch
Search Books: LIBSearch
Research: talesoftibia, reddit
All Transcripts: ↗
The data/npcs/text/
directory and its content is used by NPSearch
The data/books/book_database.json
contains 1370~ books and is used by LIBSearch
Tales of Tibia is a passion-project that provides tools and resources for the Tibia gaming community, to be able to read the various tales in Tibia, be it from books, NPC conversations or from user-generated research.
The main components are:
For a simple demonstration, visit services.
The NPC and book data is sourced from various Tibia community resources, this project, and compiled into a structured database. When adding new data, it's then automatically validated, processed, and published for use.
Data Collection:
Data Processing:
data/npcs/text/*.txt
files are compiled into data/npcs/npc_transcript_database.json
and published to GitHub Pages and Cloudflare R2. User Interface:
See NPC Transcripts: Contribution Guide for more detailed guidelines.
But in essence, you can contribute by:
Book Data:
Tool Development:
GitHub Repository:
data/npcs/text/
: Contains NPC transcripts (used by npsearch).data/books/book_database.json
: Contains book data (used by libsearch).src/
: Python scripts for data processing and validation..github/workflows/
: GitHub Actions for automated processes.Directory Structure:
tibia/
├── data/
│ ├── books/
│ │ ├── book_database.json
│ │ └── book_image_mapping.json
│ ├── npcs/
│ │ ├── npc_metadata.json
│ │ ├── npc_transcript_database.json
│ │ ├── npc_verification_mapping.json
│ │ └── text/
│ │ └── [NPC text files organized by <area>/<subarea>]
│ └── status/
│ └── [project status files]
├── docs/
│ ├── npc_trees/
│ │ └── [NPC tree structures]
│ └── [other documentation files]
├── .github/
│ └── workflows/
│ ├── deploy_resources.yml
│ ├── update_and_process_npc_data.yml
│ ├── update_npc_status_on_pr_merge.yml
│ └── validate_npc_file_structure.yml
├── src/
│ ├── scripts/
│ │ ├── gha/
│ │ │ ├── generate_book_image_mapping.py
│ │ │ ├── generate_npc_status_report.py
│ │ │ ├── update_npc_location_metadata.py
│ │ │ ├── generate_npc_trees.py
│ │ │ ├── compile_npc_transcript_database.py
│ │ │ ├── update_npc_file_and_verification_mapping.py
│ │ │ ├── update_project_status.py
│ │ │ └── validate_npc_file_structure.py
│ │ └── utils/
│ │ ├── mapper_to_tibiamaps.py
│ │ └── sanitize.py
│ └── [other source code modules]
├── hotkeys.json
└── [other project files]
The database and images are hosted by Cloudflare in an R2 Bucket, which is accessible on a dedicated subdomain, resources.talesoftibia.com
Prepend https://resources.talesoftibia.com
to the following paths:
JSON Data
/data/npcs/npc_transcript_database.json
/data/npcs/npc_metadata.json
/data/npcs/npc_verification_mapping
/data/books/book_database.json
/data/books/book_image_mapping.json
Images
/images/npcs/
/images/books/
/images/spells/
/images/creatures/
Example: https://resources.talesoftibia.com/images/npcs/Planestrider.png
Hotkey Mania is a custom-made hotkey preset designed to efficiently find hidden single-word keywords when interacting with NPCs in Tibia. It's a powerful tool for documenting NPC responses and uncovering hidden transcripts. With it I've already uncovered really obscure and hidden keywords, even a new source of holy water, and documented close to 500 NPCs. A lot of really strange and interesting things have been found.
You can use it to get first look into unseen content, potentially impactful for the lore and mysteries, it's addictive and fun.
See it in action (41s):
Watch it on YouTube
What:
Content of the hotkey presets:
With Hotkey Mania, you can typically cover all preset words while saving the transcripts in about 15-60 minutes per NPC.
Follow these steps to import the Hotkey Mania preset into your Tibia client:
Locate your Tibia configuration folder:
%LOCALAPPDATA%\Tibia\packages\Tibia\conf\
Tibia\packages\Tibia
, then navigate to the conf
folder.Prepare for import:
clientoptions.json
file (important) place it on e.g. your desktop or cloud storage.Edit clientoptions.json:
clientoptions.json
in a text editor. }
]
}
}
hotkeys
object:
}
]
},
^-- Add comma here
}
Import Hotkey Mania:
hotkeys.json
.Validate your changes:
clientoptions.json
.Save and test:
clientoptions.json
.Hotkey Mania does not violate any Tibia rules or Terms of Service. It's essentially importing and restoring hotkeys within the game's existing functionality.
To get a good sense of how to gather transcripts and tackle this challenge, I'll show you my process.
Basic Queries: Start with these standard questions:
Follow Blue Keywords:
Try Nearby Names:
Quest Research:
Item and Quest Dialogues:
Copy-Paste Responses:
Hotkey Spamming:
Always save responses in a text file as you find them.
When contributing NPC transcripts to the transcript project, it's important to follow a consistent structure. This ensures that the information is easily readable, searchable, and maintainable. Here's a comprehensive guide on how to structure your NPC transcript contributions.
Use the following format for each interaction:
Player: <your keyword>
NPC: <npc response>
Player: job
NPC: I'm an example!
Further, there are some other additional rules to follow:
Expected Format:
Player:
or NPC:
.Group related queries together. This makes it easier to navigate the transcript and find specific information.
In this example, there are headers in #
, these should not be included in the final transcript.
Think of how you would like to read it, don't scramble the transcripts, there should be a flow to it.
Not all NPCs are the same, some are more chatty, some speak of very little things, some are almost solely quest-related. There is no one-size-fits-all, it will differ.
Here's a recommended, general structure:
# Introduction Queries
hi, name, job, time
# Miscellaneous Queries
army, news, rumors
# Queries About Places
thais, venore, carlin
# Queries About Other Characters
sam, frodo, oswald
# Chained Conversations
Follow the flow as NPC leads with new keywords
# Quest-Related Conversations
- holy orchid (Wizard Outfits Quest)
# Ending the Conversation
bye
Player: (idle)
Oswald: Come here adventurers! Come say hi! (example transcript)
Player: hi
Oswald: Oh, hello Player. What is it? Why do you disturb me?
Player: name
Oswald: My name is Oswald, but let's proceed, I'm a very busy man.
Player: job / important
Oswald: I'm honoured to be the assistant of the great, the illustrious, the magnificent Durin!
Player: time
Oswald: It is nearly tea time, so please hurry!
Player: assistant
Oswald: I've got a job of great responsibility - I keep annoying persons away from my boss.
Player: annoying
Oswald: Better don't ask, you wouldn't like the answer.
Player: Durin
Oswald: Just between you and me, he can be quite a tyrant.
Player: tyrant / how are you
Oswald: If there weren't so many people harassing me, life would be great.
Player: harassing
Oswald: You don't need not ask me about that, you are perfect in it.
Player: sell
Oswald: Hey, I'm not a shopkeeper, I'm an important man!
Player: help
Oswald: I'll inform the higher officials of your needs.
Player: monster
Oswald: AHHHH!!! WHERE??? WHERE???
Player: dungeon
Oswald: If you want to see dungeons, simply refuse to pay your taxes.
Player: sewer
Oswald: Our sewer system is very modern, but crowded with rats and wannabe heroes.
Player: god
Oswald: I think the gods are too busy to care about us mortals, hmm... that makes me feel godlike, too.
Player: king
Oswald: Ah, yes, yes, hail to King Tibianus! Long live the king and so on...
Player: sam
Oswald: A simple shopkeeper with minor intelligence.
Player: benjamin
Oswald: What do you expect from ex-soldiers? He's nuts! He had way too many blows on the head.
Player: gorn
Oswald: He sells his scrolls far too expensive.
Player: quentin
Oswald: I heard he was a ladies' man in younger days. Nowadays, it is rumoured that he likes to wear women clothes now and then.
Player: bozo
Oswald: Isn't he the artist formerly known as the prince?
Player: eclesius
Oswald: Eclesius... Eclesius... I think they say about him that he accidentally turned his assistant into a frog. So you better pay attention!
Player: lynda
Oswald: Sweet as honey, but cold as a fish. The only thing that can soften her heart is this awfully expensive Venorean ice cream.
Player: gamel
Oswald: This man lives in the darkness like a rat and he is also as handsome as one. He surely is up to no good and often consorts with sinister strangers.
Player: sinister strangers
Oswald: Just last week, a one-eyed man, who had a room at Frodo's, met him in the middle of the night.
Player: rumour / gossip / news
Oswald: You know a rumour? TELL ME! TELL ME! TELL ME!
Player: mud
Oswald: I heard Sam dated a female mud-wrestler once.
Player: weapon
Oswald: It's rumoured that Sam does not forge all weapons himself. Instead he is buying them from his cousin, who is married to a cyclops.
Player: magic
Oswald: I overheard a conversation of officials in which they claimed that magic will be forbidden soon.
Player: power / rebellion
Oswald: There are people who talk about a rebellion against King Tibianus.
Player: spell
Oswald: I heard about a sorcerer who was toasted by a misfired spell of himself.
Player: excalibug
Oswald: It's beyond all doubt that certain sinister elements in our city have certain knowledge about this myth. Player: goshnar
Oswald: They say he isn't truly dead. He was... or is a necromant after all.
Player: necromant nectar
Oswald: You aren't the first one to ask about that. Am I the only one that prefers wine to such disgusting stuff?
Player: invitation (The Thieves Guild Quest)
Oswald: I am deeply sorry, there are no invitations left. I hope you didn't lose yours.
Player: yes
Oswald: You strange people lose everything, don't you? If you need another one, it'll cost you dearly. 5000 gold, deal or no deal?
Player: no
Oswald: I thought as much.
Player: yes
Oswald: Excellent! Here is your invitation!
Player: thank you
Oswald: You are... uhm... welcome. Are you already done?
Player: bye / farewell
Oswald: Finally!
Player: (vanish)
Oswald: Begone!
Multiple Keywords: If an NPC gives the same response to multiple keywords, list them all:
Player: offer / goods / buy
Santa Claus: I sell the finest swords in all the land!
Special Interactions: If there are special conditions for certain dialogues (e.g., quest stages, level requirements), note them:
Player: hi (with garlic necklace)
Vladruc: Cough... Cough (example)
Quest Progression: If responses change based on quest progress, note the different stages:
Player: mission (before quest acceptance)
Santa Claus: Are you interested in helping our village?
Player: mission (after quest acceptance)
Santa Claus: Have you cleared the forest of those strange creatures yet?
Player: mission (after quest completion)
Santa Claus: Thanks again for your help! Our village is safe thanks to you.
Seasonal or Event-Specific Dialogue: If the NPC has special dialogue during in-game events, mini world changes or seasons, group these separately:
Player: solstice (Colors of Magic)
Lugri: Ah yes, the Summer Solstice Festival is our biggest celebration of the year!
Gaps: If there are gaps in the transcript, the search engine will not accept them:
Player:
NPC: ...
Custom text If you feel like you need to write a clarification, use a very short sentence within parentheses of the Player prompt.
Player: hi (below level 999)
Cipfried: You are too young to be here.
Remember, the goal is to create a comprehensive and easily navigable transcript. By following this structure, you'll help make the NPC transcripts more readable and maintainable.
To remove timestamps, level indicator, to change your name from 'Character name' into 'Player' and check that you have the correct format, you can use the following Python script: src/scripts/utils/sanitize.py
For example:
python3 sanitize.py yourworkfile.txt Playername
python3 sanitize.py yourworkfile.txt 'Cony Island'
When a new update arrives, new NPCs and new books are often added to the game. This guide explains how to contribute new NPCs and books.
data/npcs/text/Town/Subarea/NPC_Name.txt
.npc_metadata.json
file with the new NPC data. {
"name": "Planestrider",
"job": "Unknown",
"race": "Unknown",
"gender": "Unknown",
"location": "Roshamuul",
"subarea": "The Cube (Location)",
"map": "https://tibiamaps.io/map#33938,32496,14:2",
"version": "12.31.9667",
"quests": [
{
"quest-name": "Opticording Sphere Quest",
"quest-url": "https://tibia.fandom.com/wiki/Opticording_Sphere_Quest"
}
],
"dialogues": [
"I am and never was. The first final piece of a puzzle, put back into its box. But how many boxes are there, how many will there ever be? All of them. There will be all of them."
],
"coordinates": [
33938,
32496,
14
]
}
img/npc/
folder. e.g. Planestrider.png
Open the data/books/book_database.json
file.
Locate the area where the new book should be added, e.g. a new book in Thais should be among the Thais books. For new areas, add a new section - and use naming convention from Tibias official map
Add the new book data in the following format:
{
"name": "The_Dream_Machine",
"author": "?",
"description": "About the dream machine.",
"locations": [
"Dream Realm -> Dream Master"
],
"libraries": [
"Dream Realm Library"
],
"version": "7.9",
"related-articles": [
{
"article-name": "Dream Machine",
"article-url": "https://tibia.fandom.com/wiki/Dream_Machine"
}
],
"next-book": "_NONEXT",
"previous-book": "_NOPREV",
"img": [
"Book_(Brown)"
],
"text": "The dream machine draws its energy ...",
"map": [
"https://tibiamaps.io/map#32845,32227,14:2"
],
"type": "book",
"locations-wip": [
{
"mainarea": "Main Continent - Southern Wilderness",
"area": "Dream Realm",
"subarea": "Dream Master"
}
]
}
See example here
"img": for example, books can be added to the imgages/books/
folder. New_Book_Sprite.png
images/creature/
or images/spell/
.
_NONEXT
and _NOPREV
respectively if there are no previous or next books. But if it's part of a series, e.g. 'Tibia History 1' and 'Tibia History 2', then you should link them together, where the first book has _NOPREV
but the name of the second book in next-book
. The second book has the first book's name as previous-book
and _NONEXT
as next-book
.That's it!
You can view all individual contributions in Contributions Table
Roughly:
As well as some from Tibiasecrets.com Discord community.
All NPC transcripts & books are the work of CipSoft GMBH. This project is fan-based work and does not claim ownership of the content.
For more detailed information or to get involved, join the community on Discord or Reddit.