> 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/monster/monster.md).

# Monster

Defines all monster and NPC base statistics including level, health, mana, damage, defense, attack patterns, drop rates, and respawn timing. Each entry is keyed by `Index` and is referenced from spawn and skill files.

## File Location

`Data/Monster/Monster.xml`

## Dependencies

| Depends On | Purpose                          |
| ---------- | -------------------------------- |
| None       | Base stats file, no dependencies |

| Used By                                                                  | Purpose                                                                               |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
| [MonsterSetBase/](/docs/data/monster/monstersetbase.md)                  | Per-map spawn files reference monsters by Index (Class)                               |
| [KanturuMonsterSetBase.xml](/docs/data/monster/kanturumonstersetbase.md) | Kanturu event spawns reference monsters by Index                                      |
| [MonsterSkill.xml](/docs/data/monster/monsterskill.md)                   | Skill assignments reference monsters by Index                                         |
| [MonsterAIGroup.xml](/docs/data/monster/monsteraigroup.md)               | AI groups reference monsters by Index                                                 |
| [MonsterAIRule.xml](/docs/data/monster/monsterairule.md)                 | Rules target monsters by `Class` (monster Index) for time-scheduled AI Unit overrides |
| [Skill.txt](/docs/data/skill.md)                                         | `AttackType` selects a skill entry used as the monster's attack                       |

## Configuration Structure

Each monster is defined with an `<Info>` element containing all stats. The loader creates one record per `Index` and stores it in a fixed-size table; duplicate `Index` values overwrite earlier entries.

### Monster Attributes

| Attribute      | Type   | Description                                                                                                                                                                                                                                                                                           |
| -------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Index`        | int    | Unique monster ID. Must be in range 0..999. Used as the key in spawn files and skill assignments.                                                                                                                                                                                                     |
| `Rate`         | int    | Stored on the record but not consumed by the base stats loader. Legacy spawn-rate multiplier.                                                                                                                                                                                                         |
| `Name`         | string | Descriptive name (up to 31 characters). Used for server-side logs and admin output; not the client-visible name.                                                                                                                                                                                      |
| `Level`        | int    | Monster level. Used for experience scaling, drop tier lookup, and level-based damage calculations.                                                                                                                                                                                                    |
| `Life`         | int    | Maximum HP. The loaded value is multiplied by the `MonsterLifeRate` server setting before being stored. Monster dies when HP reaches 0.                                                                                                                                                               |
| `Mana`         | int    | Maximum Mana. Unused by most monsters; kept for skill-casting monsters that consume MP.                                                                                                                                                                                                               |
| `DamageMin`    | int    | Minimum physical damage per hit.                                                                                                                                                                                                                                                                      |
| `DamageMax`    | int    | Maximum physical damage per hit. Actual damage is randomised between min and max.                                                                                                                                                                                                                     |
| `Defense`      | int    | Physical defense. Reduces incoming physical damage.                                                                                                                                                                                                                                                   |
| `MagicDefense` | int    | Magic defense. Reduces incoming magic damage.                                                                                                                                                                                                                                                         |
| `AttackRate`   | int    | Hit accuracy. Compared against target defense rate to decide whether an attack connects.                                                                                                                                                                                                              |
| `DefenseRate`  | int    | Evasion. Reduces the chance of being hit.                                                                                                                                                                                                                                                             |
| `MoveRange`    | int    | Maximum tile distance the monster can wander from its spawn point. 0 means stationary.                                                                                                                                                                                                                |
| `AttackType`   | int    | Attack skill ID. 0 = plain melee, non-zero = a skill entry from Skill.txt. Special value 150 = monster area attack (used for bosses). See Attack Skills below.                                                                                                                                        |
| `AttackRange`  | int    | Maximum tile distance at which the monster can attack. 1 = melee, larger values = ranged.                                                                                                                                                                                                             |
| `ViewRange`    | int    | Aggression radius in tiles. Monsters inside this range of a player become hostile.                                                                                                                                                                                                                    |
| `MoveSpeed`    | int    | Movement pacing value in milliseconds. Used as the base action delay between movement steps; lower values produce faster monsters. Typical value is 400.                                                                                                                                              |
| `AttackSpeed`  | int    | Delay between attacks in milliseconds. Lower values attack more frequently.                                                                                                                                                                                                                           |
| `RegenTime`    | int    | Respawn delay in seconds after the monster dies. Zero means the monster does not respawn through the generic respawn path (event or map logic handles it).                                                                                                                                            |
| `Attribute`    | int    | Behaviour and map-tagging flag. Not an elemental attribute. Values such as 51..57 tag Kalima gate-keepers, 58 tags the Kalima boss, 62 tags Castle Deep monsters, and 100+ marks certain event monsters. For regular monsters a value of 2 is common; the exact meaning is map- and class-specific.   |
| `ItemRate`     | int    | Base drop chance out of 10000 used by the item drop roll. Higher values increase how often the monster drops any item.                                                                                                                                                                                |
| `MoneyRate`    | int    | Base zen drop weight. Combined with level to produce the actual zen amount.                                                                                                                                                                                                                           |
| `MaxItemLevel` | int    | Upper bound on the level of items that can drop from this monster (0..15).                                                                                                                                                                                                                            |
| `MonsterSkill` | int    | Legacy field. Loaded into the record but not consumed by runtime combat logic. Monster skill bindings are driven by [MonsterSkill.xml](/docs/data/monster/monsterskill.md) via the monster `Index`, not this field.                                                                                   |
| `Resistance0`  | int    | Ice resistance. Used as the denominator in a `rand % (value+1) == 0` damage check; higher values resist more often. 0 = never resist, 255 (0xFF) = always resist.                                                                                                                                     |
| `Resistance1`  | int    | Poison resistance. Same formula as `Resistance0`.                                                                                                                                                                                                                                                     |
| `Resistance2`  | int    | Lightning resistance. Same formula as `Resistance0`.                                                                                                                                                                                                                                                  |
| `Resistance3`  | int    | Fire resistance. Same formula as `Resistance0`.                                                                                                                                                                                                                                                       |
| `NoDrop`       | 0/1    | Optional, default 0. `1` = the monster never drops default loot on death (no ItemBag / ItemDrop.xml / random drop). Used for siege gates, statues and event objects (247, 249, 277, 283, 288, 460-462, 524-528). Previously a hardcoded list; any custom monster is drop-enabled unless you set this. |
| `NoExp`        | 0/1    | Optional, default 0. `1` = killing the monster grants no experience. Used for event bosses/objects that reward via their own systems (275, 277, 283, 286-288, 295, 340, 348, 349, 361-363, 524-528). Previously a hardcoded list.                                                                     |

{% hint style="info" %}
The server stores 7 resistance slots internally (Ice / Poison / Lightning / Fire / Earth / Wind / Water), but `Monster.xml` only loads `Resistance0..Resistance3`. Slots 4..6 are always 0 for monsters in Season 6.3; only items can fill them through their own resistance attributes.
{% endhint %}

## Attack Skills

`AttackType` specifies the skill a monster uses when it attacks. 0 disables the skill path entirely and the monster performs a plain melee swing. Any non-zero value is looked up as a skill ID in Skill.txt and attached to the monster at spawn. The special value 150 is the "monster area attack" skill used by bosses; other common values are listed below.

| Value | Behaviour                                      |
| ----- | ---------------------------------------------- |
| 0     | Plain melee, no skill                          |
| 1     | Poison                                         |
| 2     | Meteorite (magic attack)                       |
| 3     | Lightning                                      |
| 7     | Ice (slow effect)                              |
| 11    | Hell Fire (DoT)                                |
| 17    | Ice Arrow                                      |
| 150   | Monster area attack (AoE melee used by bosses) |

The skill's own `Type` field (from [Skill.txt](/docs/data/skill.md)) selects which resistance slot the attack is checked against:

* Type 0 -> Ice, checked against `Resistance0`
* Type 1 -> Poison, checked against `Resistance1`
* Type 2 -> Lightning, checked against `Resistance2`
* Type 3 -> Fire, checked against `Resistance3`
* Types 4..6 (Earth / Wind / Water) route to the higher resistance slots, which are not set from `Monster.xml`.

## Monster Index Ranges

Index ranges below are conventions used across the shipped data files, not enforced by the loader. The server accepts any Index in 0..999.

| Range   | Typical use                                                                        |
| ------- | ---------------------------------------------------------------------------------- |
| 0-99    | Common field monsters                                                              |
| 100-199 | Mid-tier and elite variants                                                        |
| 200-299 | NPCs (trainers, merchants, guards, quest givers)                                   |
| 300-399 | Boss monsters                                                                      |
| 400+    | Event, dungeon and special monsters (Castle Siege, Kanturu, Crywolf, Kalima, etc.) |

## Important Behavior

### Life Rate Scaling

{% hint style="info" %}
The `Life` value you see in the file is scaled by the `MonsterLifeRate` server setting when the monster table is loaded. If the server rate is 150, a monster with `Life="1000"` is stored with 1500 HP.
{% endhint %}

### Respawn Time

`RegenTime` is expressed in **seconds**. A value of 10 means the monster respawns 10 seconds after death.

Rule-of-thumb ranges used in the shipped data:

* Normal field monsters: 10
* Mini-bosses: 60-300
* Major bosses: 600-3600 (10 minutes to 1 hour)
* Event bosses: RegenTime is usually ignored; the owning event decides when to respawn

### Drop Calculations

`ItemRate` is a base chance out of 10000 used by the server's drop roll. Higher values mean more frequent drops. Actual drops are also affected by:

* `MaxItemLevel` - caps the level of items that can be rolled
* `MoneyRate` - base zen weight
* Server-wide drop-rate multipliers and event bonuses

### Attack Speed vs Move Speed

Both values are in **milliseconds** and lower values are faster:

* `MoveSpeed` 400 is the default for most ground monsters
* `MoveSpeed` 200 is roughly twice as fast
* `AttackSpeed` 1600-2000 is typical
* `AttackSpeed` 800-1200 produces a visibly aggressive attacker

### Resistances

Resistance is rolled as `rand % (resist + 1) == 0 -> damage goes through`, otherwise the hit is fully resisted and deals no damage. The special value 0xFF (255) is handled as "always resist". Iron Defense effects and certain high-Authority items also force a resist.

Resistance value and resulting resist chance:

* 0 -> 0% resist (always damaged)
* 1 -> 50% resist
* 3 -> 75% resist
* 6 -> \~85.7% resist
* 9 -> 90% resist
* 15 -> \~93.75% resist
* 19 -> 95% resist
* 99 -> 99% resist
* 255 (0xFF) -> 100% immune (special case)

{% hint style="info" %}
Resistance is all-or-nothing. If the resist check succeeds, the attack deals no damage. If it fails, normal damage is applied (still reduced by `Defense` or `MagicDefense`).
{% endhint %}

## Examples

{% tabs %}
{% tab title="Basic Monster" %}

```xml
<Info Index="0" Rate="1" Name="Bull Fighter"
      Level="6" Life="100" Mana="0"
      DamageMin="16" DamageMax="20"
      Defense="6" MagicDefense="0"
      AttackRate="28" DefenseRate="6"
      MoveRange="3" AttackType="0" AttackRange="1" ViewRange="5"
      MoveSpeed="400" AttackSpeed="1600"
      RegenTime="10" Attribute="2"
      ItemRate="130" MoneyRate="20" MaxItemLevel="6"
      MonsterSkill="0"
      Resistance0="0" Resistance1="0" Resistance2="0" Resistance3="0"/>
```

Low-level monster, plain melee, 10-second respawn, no resistances.
{% endtab %}

{% tab title="Boss Monster" %}

```xml
<Info Index="18" Rate="1" Name="Gorgon"
      Level="55" Life="6000" Mana="0"
      DamageMin="165" DamageMax="175"
      Defense="100" MagicDefense="0"
      AttackRate="275" DefenseRate="82"
      MoveRange="3" AttackType="0" AttackRange="1" ViewRange="7"
      MoveSpeed="400" AttackSpeed="1600"
      RegenTime="150" Attribute="2"
      ItemRate="160" MoneyRate="28" MaxItemLevel="3"
      MonsterSkill="0"
      Resistance0="6" Resistance1="6" Resistance2="6" Resistance3="6"/>
```

High-HP boss, \~85.7% resist to all four elements, 150-second respawn.
{% endtab %}

{% tab title="NPC" %}

```xml
<Info Index="226" Rate="1" Name="Trainer"
      Level="1" Life="1000" Mana="0"
      DamageMin="0" DamageMax="0"
      Defense="0" MagicDefense="0"
      AttackRate="0" DefenseRate="0"
      MoveRange="0" AttackType="0" AttackRange="0" ViewRange="0"
      MoveSpeed="0" AttackSpeed="0"
      RegenTime="0" Attribute="0"
      ItemRate="0" MoneyRate="0" MaxItemLevel="0"
      MonsterSkill="0"
      Resistance0="0" Resistance1="0" Resistance2="0" Resistance3="0"/>
```

Non-combat NPC with no movement or attacks. `RegenTime="0"` keeps the NPC in place permanently.
{% endtab %}

{% tab title="Ranged Monster" %}

```xml
<Info Index="15" Rate="1" Name="Skeleton Archer"
      Level="34" Life="1100" Mana="0"
      DamageMin="115" DamageMax="120"
      Defense="45" MagicDefense="0"
      AttackRate="170" DefenseRate="41"
      MoveRange="2" AttackType="0" AttackRange="5" ViewRange="7"
      MoveSpeed="400" AttackSpeed="2000"
      RegenTime="10" Attribute="2"
      ItemRate="190" MoneyRate="28" MaxItemLevel="6"
      MonsterSkill="0"
      Resistance0="1" Resistance1="1" Resistance2="1" Resistance3="1"/>
```

Plain melee attack with an extended `AttackRange` for arrow-style hits, 50% resist to each element.
{% endtab %}

{% tab title="Magic Monster" %}

```xml
<Info Index="9" Rate="1" Name="Thunder Lich"
      Level="44" Life="2000" Mana="0"
      DamageMin="140" DamageMax="145"
      Defense="70" MagicDefense="0"
      AttackRate="220" DefenseRate="55"
      MoveRange="3" AttackType="3" AttackRange="4" ViewRange="7"
      MoveSpeed="400" AttackSpeed="2200"
      RegenTime="10" Attribute="2"
      ItemRate="190" MoneyRate="28" MaxItemLevel="3"
      MonsterSkill="0"
      Resistance0="2" Resistance1="2" Resistance2="3" Resistance3="2"/>
```

Uses the Lightning skill (`AttackType="3"`) for its attack. 75% resist to lightning, \~66.7% to each of the other three elements.
{% endtab %}

{% tab title="Area-Attack Boss" %}

```xml
<Info Index="38" Rate="1" Name="Balrog"
      Level="66" Life="9000" Mana="0"
      DamageMin="220" DamageMax="240"
      Defense="160" MagicDefense="0"
      AttackRate="330" DefenseRate="99"
      MoveRange="3" AttackType="150" AttackRange="2" ViewRange="7"
      MoveSpeed="400" AttackSpeed="1600"
      RegenTime="150" Attribute="2"
      ItemRate="160" MoneyRate="46" MaxItemLevel="3"
      MonsterSkill="0"
      Resistance0="10" Resistance1="10" Resistance2="10" Resistance3="15"/>
```

Uses the monster area attack (`AttackType="150"`). \~90.9% resist to Ice / Poison / Lightning, \~93.75% to Fire.
{% endtab %}
{% endtabs %}

## Common Tasks

### Make a Monster Harder

Increase any of:

* `Level` (affects level-based calculations)
* `Life`
* `DamageMin` / `DamageMax`
* `Defense` / `MagicDefense`
* `Resistance0..3`

### Make a Monster Faster

Decrease:

* `MoveSpeed` (shorter step delay = faster movement)
* `AttackSpeed` (shorter interval between attacks)

### Increase Drops

Increase:

* `ItemRate` (more frequent item drops)
* `MaxItemLevel` (higher-level item pool)
* `MoneyRate` (larger zen drops)

### Create a Rare Boss

1. Set a long `RegenTime` (3600 = one hour).
2. Raise `Level`, `Life`, `Defense`, `AttackRate` and `DefenseRate`.
3. Raise `ItemRate` / `MaxItemLevel` so the kill is worthwhile.
4. Set non-zero resistances and pair with [MonsterSkill.xml](/docs/data/monster/monsterskill.md) to give the boss its special abilities.

## Common Issues

{% hint style="warning" %}
`MoveRange="0"` produces stationary monsters. Use it deliberately for NPCs and pinned spawns; set 1-3 for normal wandering monsters.
{% endhint %}

{% hint style="warning" %}
`AttackSpeed="0"` can cause the attack timer to misbehave. Use at least 800-1000 for very fast attackers and 1600-2000 for typical monsters.
{% endhint %}

{% hint style="warning" %}
Very large `ViewRange` values cost CPU because every nearby player is evaluated. Keep to 3-7 for normal monsters; reserve higher values for bosses.
{% endhint %}

{% hint style="info" %}
Monster.xml is only read at server start. Monsters that are already spawned keep their old stats until they die and respawn.
{% endhint %}

## Related Files

* [MonsterSetBase/](/docs/data/monster/monstersetbase.md) - where monsters spawn
* [KanturuMonsterSetBase.xml](/docs/data/monster/kanturumonstersetbase.md) - Kanturu spawns
* [MonsterSkill.xml](/docs/data/monster/monsterskill.md) - assigns skill units to monsters
* [MonsterSkillUnit.xml](/docs/data/monster/monsterskillunit.md) - skill unit definitions
* [MonsterSkillElement.xml](/docs/data/monster/monsterskillelement.md) - element effects referenced by skill units
* [MonsterAIGroup.xml](/docs/data/monster/monsteraigroup.md) - AI group memberships
* [MonsterAIUnit.xml](/docs/data/monster/monsteraiunit.md) - AI per-monster unit settings
* [MonsterAIRule.xml](/docs/data/monster/monsterairule.md) - AI rule bindings
* [MonsterAIElement.xml](/docs/data/monster/monsteraielement.md) - AI element actions
* [MonsterAIAutomata.xml](/docs/data/monster/monsteraiautomata.md) - AI state machine definitions
* [Skill.txt](/docs/data/skill.md) - skill IDs used by `AttackType`
