← All scenarios
PHYS-006autoAttack

Perfect dodge always succeeds regardless of HIT/FLEE

Perfect dodge is checked BEFORE the standard hit-vs-flee roll. Tests with deliberately mismatched accuracy: extremely high HIT, low FLEE — perfect dodge should still proc at its rate. 1000 sampled attacks with seed; expect perfect_dodge count within statistical tolerance of LUK/10 + flat bonuses.

perfectDodgerolledModeoutcomeDistributionrngDeterminism
Action
autoAttack
Auto-attack in rolled mode × 1000 samples
mode
rolled
seed
phys-006-perfect-dodge-distribution
samples
1000
context.mapType
pvp

Actors

Sniper (max HIT)
player · sniper · Lv99
attacker
Primary stats
str
1
agi
80
vit
30
int
30
dex
130
luk
30
Equipment
  • mainhand: great_bow · bow · +10 · ATK 120
Rogue (Lucky Dodge spec)
player · Lv99
defender
Primary stats
str
30
agi
99
vit
30
int
30
dex
50
luk
200
demihumanneutral 1mediumnormal
HP 15000 / 15000
Hard DEF 30
Hard MDEF 5
Expected output
From the scenario fixture. Numerical values marked as null are placeholders pending rAthena verification.

If perfect_dodge_percent is near zero, the perfect dodge check is either not implemented or runs AFTER the hit/flee roll instead of before it.

Show full expected JSON
{
  "outcomeDistribution": {
    "perfect_dodge_percent_range": [
      15,
      25
    ],
    "miss_percent_range": [
      0,
      5
    ],
    "hit_or_crit_percent_range": [
      70,
      85
    ],
    "_note": "LUK 200 → floor(200/10) = 20% perfect dodge baseline. The attacker's HIT is so high that miss rate should be near zero, so most non-perfect-dodge outcomes are hits."
  },
  "deterministicCheck": "Same seed must produce identical outcome sequence across runs and platforms — fail this and the rest of your test suite becomes flaky."
}

Computed: DamageResult

Server-evaluated by calculatePhysicalDamage() from @ro/core.

Outcome
hit
1 hit · 572 damage
572
Pipeline breakdown
D-003 steps 2–13
WeaponratioATK288
× size × skill288
× (1 + 0.0% ATK%)288
+ StatusATK (358)646
× 1.00 element646
× (1 + 0.0% race/elem/size/class)646
crit none646
− 0 hard DEF646
− 74 soft DEF572
× (1 − 0.0% taken%)572
+ MasteryATK (0)572
floor + min(1)572
Inputs
From attacker / defender ResolvedStats
StatusATK358
WeaponATK288
EquipATK0
MasteryATK0
Size mult1.00×
Element mult1.00×
Race%0.0%
Element%0.0%
Size%0.0%
Class%0.0%
Taken%0.0%

Hits (1): hit 572