The Metin2 alchemy system lets players slot dragon stones (Dragon Soul Stones) to gain extra bonuses on their characters, and it is one of the most requested end-game mechanics on any server. Officially named Dragon Soul, this system appears in-game as the "alchemy" interface, and when set up correctly it feeds both the server economy and player retention significantly. In this guide we build the system step by step, from the server source to the client side, defining dragon stones in item_proto and tuning their bonuses through dragon_soul_table.txt.
How the system works
The alchemy system is made of three layers that all must be in sync:
- Server source (game/db): It must include Dragon Soul support. Official 2014+ and most modern sources (TMP4, Marty, etc.) ship with it. Older sources require the function set to be added manually.
- Database/proto: Dragon stones are defined with a special item type (
ITEM_DS) and live in the alchemy inventory. - Configuration file:
dragon_soul_table.txtdecides each stone's grade, step, strength and which bonuses it grants.
The player opens the alchemy NPC or the interface shortcut (a separate Dragon Soul inventory by default), places a stone in a slot, and the bonus matching the stone's type (for example War, Magic, Soul or Mod dragon stone) and the character's class becomes active.
Required files and prerequisites
Before you start, make sure the following are in place:
- Server-side
dragon_soul_table.txt(usually undershare/locale/<lang>/or the data folder your source reads). - Client-side
dragon_soul.txtplus the alchemy interface Python scripts (uiDragonSoul.pyand the calls ingame.py). - The
ITEM_DStype defined insideitemtypes.txt. - Database access:
item_protoand a clientitem_protodump tool (e.g. atxt <-> protoconverter).
Back up every file before editing. The easiest way to break the dragon stone system is to create a mismatch between the bonus indices and item_proto.
Defining the dragon stone in item_proto
Unlike regular items, dragon stones are defined with the ITEM_DS type and a subtype for the stone variant. Conceptually, an item_proto row carries these fields:
vnum name type subtype value0 value1 value2 value3 value4 value5
45301 "War Dragon Stone" ITEM_DS DS_SLOT... 0 1 1 0 0 0
The critical part is the value fields: they encode the stone's grade, step and strength. These values must match the definitions in dragon_soul_table.txt exactly. If they don't, the stone enters the inventory but produces no bonus, or it crashes the server.
Avoid non-ASCII characters in names; on most sources the proto reader expects a non-UTF-8 encoding. Provide the localized name through the client item_names.txt.
The dragon_soul_table.txt structure
This file is the brain of the alchemy system. It is split into sections, each defining how stones behave:
- BASIC: How many dragon stone slot types exist and the general count.
- GRADE: The probability and name weights of each grade (normal, blessed, dragon, legendary, etc.).
- STEP: Steps within the same grade; a higher step gives a stronger bonus range.
- STRENGTH / REFINE: The rates for purifying/upgrading (refining) a stone.
- APPLY tables: The bonuses available for each type + grade + step combination, with their min–max value ranges.
When defining bonuses, use the game's real APPLY_* constants. Common ones include:
APPLY_MAX_HP +HP
APPLY_ATT_GRADE_BONUS +Attack Value
APPLY_DEF_GRADE_BONUS +Defense
APPLY_CRITICAL_PCT +Critical %
APPLY_PENETRATE_PCT +Piercing %
APPLY_ATTBONUS_MONSTER +Damage vs monsters
A bonus line specifies the APPLY type and a value range; when a stone is generated the server picks a value from that range (randomly or weighted). Keep ranges balanced: handing out 50% critical on a single stone instantly wrecks the economy and PvP balance.
Defining bonuses in a balanced way
A practical balancing approach:
- Low-grade stones should only grant "safe" bonuses such as
APPLY_MAX_HPor small defense. - Strong percentage-based bonuses (critical, piercing, average damage) should unlock only at the top grade + top step, in a narrow range.
- Split stone types by class: War stone for melee, Magic stone for sura/shaman spells, Soul/Mod stones for support bonuses.
After each change, save the file and restart the game process; on most sources dragon_soul_table.txt is read only at startup, with no hot-reload.
Client side and testing
Once the server is ready, sync the client:
- Keep the client
dragon_soul.txtwith the same type/grade/step structure as the server. - Pack the new
item_protoand icon files (icon/item/) into the client. - For testing, give the stone with a GM account via
/item <vnum>, place it into the alchemy inventory, and verify the bonus shows up in the character status panel.
The most common mistake is a difference between client and server proto; the stone then appears as an "unknown item" or the client crashes on placement. The second is a typo in an APPLY type inside dragon_soul_table.txt — these silently drop the bonus, so always check the server startup log.
Frequently Asked Questions
What if my old server source has no Dragon Soul support?
Some pre-2013 sources lack the Dragon Soul engine. In that case, moving to a modern source (official 40k+, TMP4 or Marty-based) is far safer than backporting the system by hand; a backport requires deep changes to the item and character engines.
The bonus values never show up — what could it be?
Usually one of three causes: the value fields in item_proto don't match dragon_soul_table.txt, an APPLY constant is misspelled, or the client proto wasn't updated. Read the "dragon soul" lines in the server startup log to find which one.
How can I refine the stones?
Refining works through the rates in the REFINE/STRENGTH section of dragon_soul_table.txt. You combine a set number of same-type stones to produce a higher-grade stone; keeping these rates low gives refine materials real economic value.
Want to integrate the alchemy system into your server cleanly? For help with Dragon Soul setup, balanced bonus tables and client packaging, get in touch with me — let's build a crash-free alchemy system tailored to your source.