> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/data/skill/masterskilltree.md).

# MasterSkillTree.txt

Per-master-level skill progression table. For each master skill, defines 20 values (level 1-20 progression), prerequisites, replacement chains, and per-class Rank gating.

## File Location

```
Data/Skill/MasterSkillTree.txt
```

Loaded once at GameServer startup. Changes require a restart.

## Format

Whitespace-delimited. One row per master skill. First comment line names the columns. Terminated by `end`. Numeric values in `MainValue1`-`MainValue20` are parsed as floats; all other columns are integers.

## Columns

| Column                                         | Effect                                                                                                                                                                                  |
| ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Index`                                        | Skill index from [Skill.txt](/docs/data/skill.md)                                                                                                                                       |
| `Group`                                        | Tree group. `1` = left, `2` = middle, `3` = right (three master trees per class)                                                                                                        |
| `Rank`                                         | Vertical tier within the tree (`1` = base row, `9` = top row). Higher ranks require lower-rank investment in the same group                                                             |
| `MinLevel`                                     | Minimum master level for the first investable point in this skill. Typically `1`                                                                                                        |
| `MaxLevel`                                     | Maximum investable level for this skill. Fixed at `20` in S6.3; values above 20 are clamped                                                                                             |
| `MainValue1` ... `MainValue20`                 | Effect magnitude at invested level 1 through 20. Parsed as floating-point; per-level curve is pre-baked in the table, not interpolated by formula                                       |
| `RelatedSkill`                                 | Skill whose effect also benefits from this row's bonus (e.g. an "Improved" node boosting a base skill). `0` = none                                                                      |
| `ReplaceSkill`                                 | Skill index that gets replaced on the active bar when this node is learned. `0` = no replacement                                                                                        |
| `RequireSkill` (first)                         | Primary prerequisite. Must reference an `Index` in this file. `0` = no prerequisite. Both header labels in the shipped file are the string `RequireSkill`; this is the first of the two |
| `RequireSkill` (second)                        | Secondary prerequisite. `0` = not required. When both are non-zero both must be learned                                                                                                 |
| `DW` / `DK` / `FE` / `MG` / `DL` / `SU` / `RF` | Per-class visibility and tree position. Non-zero = this class sees the node at that ordinal position in its tree; `0` = the class does not see this node                                |

## Tree Semantics

* **Group** - which of the three trees a skill belongs to (left/middle/right columns in the master UI)
* **Rank** - vertical position in the tree. Higher Rank requires at least one investment at every lower Rank within the same Group before becoming learnable
* **MainValueN** - effect magnitude at invested level N. The server looks up the value for the character's current invested level directly; it does not compute intermediate values between the 20 entries

## Relationship to Common.dat

[Common.dat Master Skill Tree Settings](/docs/gameserver/common-dat.md#master-skill-tree-settings) controls global gates:

* `MasterSkillTree` = `1` enables the tree
* `MasterSkillTreePoint` = points per master level
* `MasterSkillTreeMaxLevel` = master level cap

## Cross-File Dependencies

| Attribute                           | Related in                                                              |
| ----------------------------------- | ----------------------------------------------------------------------- |
| `Index`                             | [Skill.txt](/docs/data/skill.md)                                        |
| Base skill damage formula constants | [Skill.dat](/docs/gameserver/skill-dat.md)                              |
| Both `RequireSkill` columns         | Must reference another entry in this file                               |
| `ReplaceSkill`                      | Must reference an existing [Skill.txt](/docs/data/skill.md) entry       |
| Class rate multipliers              | [Character.dat](/docs/gameserver/character-dat.md)                      |
| Attack speed / delay scaling        | [SkillSpeedScale.xml](/docs/data/plugins/skillspeedscale.md)            |
| Cross-class combo list              | [CustomCombo.xml](/docs/data/plugins/customcombo.md)                    |
| Master level cap                    | [Common.dat](/docs/gameserver/common-dat.md#master-skill-tree-settings) |

## Common Issues

* **Skill available too early** - `Rank` too low for the intended progression; reorder within the Group
* **Per-class rank shows zero** - the class column is `0`; set to the non-zero position that class should see
* **MainValueN progression too flat** - regenerate the curve; shipped values follow a tuned diminishing-returns shape
* **Prerequisite skill learned but dependent still locked** - one of the two `RequireSkill` columns points to the wrong `Index`, or the required node has not reached at least level 1
* **Replace not applying** - `ReplaceSkill` must match the exact `Index` of the skill being replaced in the active bar
* **File edit ignored** - missing `end` terminator or a malformed `MainValue` token; parser drops the file on error
