Combat System
Aetheria uses a Canary-faithful combat system with detailed damage formulas, defense calculations, hit chance tables, and death penalties.
Attack Speed
| Attacker | Base Speed | Notes |
|---|---|---|
| Player (all vocations) | 2000ms | From vocations.xml, divided by RATE_ATTACK_SPEED |
| Creature | 1500ms default | Uses monster's first melee attack interval_ms, or 1500ms fallback |
Damage Formula
Melee
maxDamage = round(0.085 * attackFactor * attackValue * attackSkill) + level/5
Distance
maxDamage = round(0.09 * attackFactor * attackSkill * attackValue) + level/5
| Stance | attackFactor |
|---|---|
| Offensive | 1.0 |
| Balanced | 0.75 |
| Defensive | 0.5 |
Final damage: normal_random(minDamage, maxDamage * vocation.damageMultiplier)
Min damage: level/5 (melee), level/5 (distance, halved for PvP targets)
Defense Formula
defense = ((shielding_skill / 4.0 + 2.23) * defenseValue * defenseFactor * scalingFactor) * vocation.defenseMultiplier
| Stance | defenseFactor |
|---|---|
| Offensive | 0.5 |
| Balanced | 0.75 |
| Defensive | 1.0 |
| Weapon Type | scalingFactor |
|---|---|
| Shield | 0.16 |
| Weapon | 0.146 |
| Fist | 0.15 |
Armor Formula
armor = sum(equipment armor values) * vocation.armorMultiplier
No stance modifier — stance only affects defense, not armor.
Block Sequence
When a creature attacks a player, defense is checked in order:
- Defense (shield) check —
damage -= uniform_random(defense/2, defense). If damage ≤ 0 → BLOCK_DEFENSE (POFF effect), skip armor. - Armor check —
damage -= uniform_random(armor/2, armor - armor%2 + 1)(if armor > 3), ordamage -= 1(if armor 1-3). If damage ≤ 0 → BLOCK_ARMOR (BLOCKHIT effect). - Absorb % —
damage -= round(damage * absorbPercent / 100)from equipment abilities. - Minimum 1 damage if no block occurred.
Hit Chance
| Weapon Type | Hit Chance | Notes |
|---|---|---|
| Melee / Wand | 100% | Always hit |
| Distance | Skill-based | 3 max hit chance tiers (75/90/100) × 7 distance ranges. Item hitchance overrides if non-zero. |
Skill Tries
| Skill | Tries on Hit | Tries on Block | Tries on Immune |
|---|---|---|---|
| Melee | 1 | 0 | 0 |
| Distance | 2 | 1 | 0 |
| Shielding | 0 | 1 | 0 |
Death Penalty
Level ≥ 24
lossPercent = ((tmpLevel + 50) * 50 * (tmpLevel² - 5*tmpLevel + 8)) / experience
Where tmpLevel = level + levelPercent/100
Level < 24
Flat 10% XP loss. Blessings cap at 50% reduction.
Blessings
Each blessing reduces loss by 8% (up to 5 blessings = 40% reduction).
Final: lostXP = experience * lossPercent * (1 - blessingReduction) / 100
Combat Stances
| Stance | Attack | Defense | Best For |
|---|---|---|---|
| Offensive | +50% | -50% | Maximizing damage output |
| Balanced | Normal | Normal | General gameplay |
| Defensive | -50% | +100% | Tanking, surviving |
Set via SetStance client action. Persists across sessions.
Monster Tiers
Monsters are classified into tiers based on their XP value. Higher tiers are tougher and drop better loot. Tiers T9-T15 are reserved for future endgame content.
| Tier | XP Range | Notes |
|---|---|---|
| T1 | < 20 XP | Rats, spiders, low-level trash |
| T2 | 20-79 XP | Early-game monsters |
| T3 | 80-299 XP | Low-mid game |
| T4 | 300-999 XP | Mid game |
| T5 | 1,000-4,999 XP | First tier with notable loot |
| T6 | 5,000-19,999 XP | Void Outpost content (Emberwatch) |
| T7 | 20,000-49,999 XP | Void Knight, high-tier undead |
| T8 | 50,000+ XP | Void Outpost content (Vanguard) |
| T9-T15 | future | Reserved for future content |
Tier is calculated from XP at runtime. Higher tiers drop more gold and better loot — the exact scaling is left for players to discover.