{title}
{description}
No matching data for this graph.
}{description}
No matching data for this graph.
}Run analysis
{new Date(report.generatedAt).toLocaleString()} · {report.summary.runs.toLocaleString()} simulations · every filtered row remains available below.
{sortedBosses.length} matching bosses · pressure, outgoing damage, party output, kill time, survival, and outcomes.
| Boss | Source | Runs | Boss → party DTPS | Avg party damage | Pressure | Party → boss DPS | Total party DPS | Kill time | Defeat | Wipe | Avg deaths | Boss health |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {boss.bossName}{boss.dungeonTitle} | {boss.category.toUpperCase()} | {boss.runs.toLocaleString()} | {formatNumber(boss.incomingDtps)} | {formatWhole(boss.averageIncomingDamage)} | {formatRatio(boss.pressureVsMedian)} · {boss.pressureFlag} | {formatNumber(boss.bossDpsTaken)} | {formatNumber(boss.partyDps)} | {formatSeconds(boss.averageTimeToDefeat)} | {formatPercent(boss.defeatRate)} | {formatPercent(boss.wipeRate)} | {formatNumber(boss.averageDeaths)} | {formatWhole(boss.bossMaxHealth)} |
{sortedClasses.length} matching builds · output, healing, mitigation, survivability, and role-relative tuning.
| Class / specialization | Source | Role | Parties | Runs | Boss DPS | Total DPS | Healing done / sec | Healing received / sec | Damage taken / sec | Total damage taken | Role median | Total damage dealt | Total healing done | Total healing received | Absorbs | Deaths |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {row.className}{row.specialization} | {row.source.toUpperCase()} | {row.role} | {row.partyConfigurations.toLocaleString()} | {row.runs.toLocaleString()} | {formatNumber(row.bossDps)} | {formatNumber(row.dps)} | {formatNumber(row.hps)} | {formatNumber(row.hpsReceived)} | {formatNumber(row.dtps)} | {formatWhole(row.totalDamageTaken)} | {formatRatio(row.damageVsSourceRoleMedian)} · {row.damageFlag} | {formatWhole(row.totalDamage)} | {formatWhole(row.totalHealing)} | {formatWhole(row.totalHealingReceived)} | {formatWhole(row.totalAbsorbs)} | {row.deathEvents.toLocaleString()} |
This saved run predates ability-level reporting. Run the same configuration again to populate ability use, unused abilities, damage share, healing, and absorbs.
: <> {selectedAbilityBuild &&{sortedAbilities.length} matching abilities · {availableAbilityCount} are available to the tested builds. Zero-use rows are deliberately retained.
| Ability | Class / specialization | Source | Role | AI category | Usage state | Active runs | Usage rate | Casts | Casts / min | Hits | Effective damage | Damage share | DPS | Damage / hit | Raw damage | Effective healing | Overheal | Absorbs | Cooldown |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {row.icon && |
{row.className}{row.specialization} | {row.source.toUpperCase()} | {row.role} | {row.categories || "—"} | {row.unusedAvailable ? "available · unused" : row.status} | {row.activeRuns}/{row.runs} | {formatPercent(row.usageRate)} | {row.casts.toLocaleString()} | {formatNumber(row.castsPerMinute)} | {row.hits.toLocaleString()} | {formatWhole(row.effectiveDamage)} | {formatPercent(row.damageShare)} | {formatNumber(row.dps)} | {formatNumber(row.averageDamagePerHit)} | {formatWhole(row.rawDamage)} | {formatWhole(row.effectiveHealing)} | {formatWhole(row.overheal)} | {formatWhole(row.absorbs)} | {row.cooldownSeconds === null ? "—" : formatSeconds(row.cooldownSeconds)} |
{sortedParties.length} matching parties · compare composition output, healer pressure, outcomes, and deaths.
| Party | Source | Members | Runs | Party DPS | Incoming DTPS | Defeat | Wipe | Avg deaths |
|---|---|---|---|---|---|---|---|---|
| {row.partyConfigurationId} | {row.source.toUpperCase()} | {row.members} | {row.runs.toLocaleString()} | {formatNumber(row.partyDps)} | {formatNumber(row.incomingDtps)} | {formatPercent(row.defeatRate)} | {formatPercent(row.wipeRate)} | {formatNumber(row.averageDeaths)} |