← All scenarios
PHYS-002autoAttack

Weapon-vs-size matrix — dagger, sword, spear vs Small/Medium/Large

Tests the per-weapon-type size-multiplier table. Same character, same target stats, only weapon type and target size vary. Daggers should excel vs Small; Spears vs Large; Swords are balanced. If a developer left the size table unwired, all 9 cells will show the same damage — this matrix reveals it instantly.

physicalDamageweaponSizeMultiplierweaponTypeTable
Action
autoAttack
Auto-attack in expected mode
mode
expected
context.mapType
pve

Actors

Test character
player · Lv60
attacker
Primary stats
str
60
agi
40
vit
30
int
1
dex
40
luk
10
Equipment
  • mainhand: test_weapon · sword_1h · +4 · ATK 100
Size dummy
monster · Lv60
defender
formlessneutral 1mediumnormal
HP 999999 / 999999
Hard DEF 0
Hard MDEF 0
Expected output
From the scenario fixture. Numerical values marked as null are placeholders pending rAthena verification.

Fill in a 3x3 matrix of damage values. The simulator can render this as a heatmap — great UI feature. Each row should peak at a different column.

Show full expected JSON
{
  "propertyAssertions": [
    "damage(dagger, small) > damage(dagger, large)",
    "damage(spear, large) > damage(spear, small)",
    "damage(sword, medium) is roughly between sword's small and large values",
    "all 9 cells are non-zero"
  ]
}

Computed: DamageResult

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

Outcome
hit
1 hit · 273 damage
273
Pipeline breakdown
D-003 steps 2–13
WeaponratioATK142
× size × skill142
× (1 + 0.0% ATK%)142
+ StatusATK (137)279
× 1.00 element279
× (1 + 0.0% race/elem/size/class)279
crit none279
− 0 hard DEF279
− 6 soft DEF273
× (1 − 0.0% taken%)273
+ MasteryATK (0)273
floor + min(1)273
Inputs
From attacker / defender ResolvedStats
StatusATK137
WeaponATK142
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 273

Variant matrix · 9 cells

Each cell re-applies the variant's overrides to the base scenario and re-runs the same pipeline that produced the single result above.

weaponType × defenderSize
Highest in row is highlighted emerald; lowest rose. Hover any cell to see the full variant label.
weaponType \ defenderSizesmallmediumlarge
dagger273237202
sword_1h273273237
spear_1h237273273
Property assertions
Pattern-matched checks from the scenario's expected. ⊙ marks assertions the parser doesn't recognize (the raw string is shown so devs can verify by eye).
  • damage(dagger, small) > damage(dagger, large)
    273 > 202
  • damage(spear, large) > damage(spear, small)
    273 > 237
  • damage(sword, medium) is roughly between sword's small and large values
  • all 9 cells are non-zero
    9/9 non-zero