Turn-based fights with elemental damage, armor, and soft-capped stats
At level 1 your hero has 500 HP. Every level adds a flat 150.
| Level | HP |
|---|---|
| 1 | 500 |
| 10 | 1,850 |
| 50 | 7,850 |
| 100 | 15,350 |
| 200 | 30,350 |
| 500 | 75,350 |
| 1000 | 150,350 |
Enemies use the same base formula as players, but their HP is multiplied by 0.25 — making them significantly squishier than the player at equal level/difficulty.
| Difficulty | Enemy HP |
|---|---|
| 1 | 125 |
| 10 | 463 |
| 50 | 1,963 |
| 100 | 3,838 |
| 200 | 7,588 |
| 500 | 18,838 |
| 1000 | 37,588 |
Both players and enemies use the same base damage formula. This is added to weapon damage to form total attack power.
| Level | Base Damage |
|---|---|
| 1 | 23 |
| 10 | 50 |
| 50 | 170 |
| 100 | 320 |
| 200 | 620 |
| 500 | 1,520 |
| 1000 | 3,020 |
Every attack passes through a multi-step damage pipeline. Understanding each step is key to gearing effectively.
Adjusts damage based on level difference. Fighting enemies above your level reduces your damage; below your level increases it. The +50 offset prevents extreme swings at low levels.
Total item damage is your weapon's min-max damage (scaled by item level) plus your level-based base damage, multiplied by the level scaling factor.
Players always have a base of 100% physical. Elemental damage attributes add on top — they don't redistribute from physical. A weapon with 12% fire elemental_damage deals 100% physical + 12% fire = 112% total. Each element's share then runs through the reduction/weakness pipeline separately.
Flat elemental damage bonuses from gear are added on top, per element, before any reductions apply.
Each element's damage is modified by the defender's reduction (decreases damage) and weakness (increases damage) for that element. 30% reduction with 0% weakness = 0.70x damage. 0% reduction with 30% weakness = 1.30x damage.
Flat reduction absorbs a fixed amount of damage per element after percentage modifiers but before armor. Unlike percentage reduction, flat reduction does not create elemental weakness.
Armor provides diminishing returns damage reduction. See the Armor Formula section below for the full breakdown.
A gaussian roll with mean 1.0 and sigma 0.1, clamped between 0.7 and 1.3, adds slight variance to every hit. Most hits land near 1.0x but occasional high/low rolls create drama.
Every hit always deals at least 1 damage. No attack can be fully nullified by armor or reductions.
Armor uses a hyperbolic formula that provides diminishing returns. The ad (armor divisor) value scales with defender level, meaning higher-level defenders need more armor to achieve the same reduction percentage.
Player armor from equipment is multiplied by an effectiveness factor before entering the formula. This reduces the raw armor value to prevent over-stacking.
| Difficulty Range | Effectiveness |
|---|---|
| 0 – 149 | 0.50 |
| 150 – 249 | 0.49 |
| 250 – 499 | 0.48 |
| 500 – 749 | 0.47 |
| 750 – 999 | 0.46 |
| 1000+ | 0.45 |
The chart below shows how much damage armor absorbs at different defender levels. Higher-level defenders have a larger ad divisor, so they need proportionally more armor to reach the same reduction.
At level 50 (ad=2000), 10,000 armor absorbs ~83% of damage. At level 500 (ad=11,000), the same armor only absorbs ~48%. Gear must scale with level to maintain the same protection.
At the start of each fight, both sides roll initiative. The combatant with higher initiative attacks first each round. Ties go to the player.
| Mechanic | Effect | Details |
|---|---|---|
| Critical Hit | 2.0x base damage | Base multiplier of 2.0x, plus any crit_multiplier_bonus from gear and skills. Checked on every attack. |
| Dodge | Avoids all damage | Checked before block. If the defender dodges, no damage is dealt and no other effects trigger. |
| Block | 50% damage reduction | Shield block_chance (1–10%). Checked after dodge fails. Halves the final damage. |
| Reflect | Bounces % back | Per-element. Proportional to that element's share of total damage. Reflect damage ignores armor. |
| Heal over Time | Heals HP per round | Applied at the start of each round, before any attacks. Both sides benefit from their own HoT. |
| Life Leech | Heals % of damage dealt | floor(damage × leech% / 100). Only triggers on successful hits (not dodged/blocked to 0). |
| Summon | Extra attack at 50% damage | Procs per attack based on weapon's summon chance. Single-element. Max 1 summon attribute per weapon, max 1 proc per side per round. |
Several combat stats use soft caps to prevent extreme stacking. Above a threshold, each additional bracket of effective value costs increasingly more raw stat points.
Threshold: 50%. Bracket size: 10%.
| Raw Value | Effective Value | Ratio |
|---|---|---|
| 0 – 50% | 0 – 50% | 1:1 (no penalty) |
| 50 – 70% | 50 – 60% | 2:1 |
| 70 – 100% | 60 – 70% | 3:1 |
| 100 – 140% | 70 – 80% | 4:1 |
| 140 – 190% | 80 – 90% | 5:1 |
| 190 – 250% | 90 – 100% | 6:1 |
Getting from 50% to 60% effective costs 20 raw points. Getting from 80% to 90% costs 50 raw points. Reaching 100% effective requires 250 raw points — five times the no-penalty threshold.
Base multiplier: 2.0x. Threshold: 5.0x (300 raw units above base). Bracket: 1.0x (100 raw units). Same diminishing pattern as chance stats.
Below 50% raw, the curve follows the 1:1 diagonal exactly. Above the threshold, each successive bracket requires more raw stat for less effective gain. At 200% raw, you only get ~91.7% effective — still short of the theoretical 100% cap.