λ Sistema
Mecánicas del juego
Todas las fórmulas exactas, las unidades en que se almacenan los stats en el CSV fuente, y dos calculadoras interactivas para experimentar con builds y armaduras.
Daño y DPS
Fórmula maestra
DPS = AttackSpeed × AttackDamage × (1 + CriticalChance × (CriticalDamage − 1))
- · AttackSpeed = raw / 100 (90 → 0.9 atk/s)
- · AttackDamage = raw (entero, sin escalar)
- · CriticalChance = raw / 100 (25 → 0.25 = 25%)
- · CriticalDamage = raw / 1000 (1400 → ×1.40 multiplicador)
Preset de héroe
DPS
1.98
Daño medio/golpe
2.20
Crit damage
2.80
Hits/seg
0.90
Comparativa con héroes base
Knight×1.00 ↑
Ranger×1.65 ↑
Sorcerer×1.36 ↑
Priest×2.04 ↑
Hunter×1.13 ↑
Slayer×1.18 ↑
Defensa y HP efectivo
Fórmulas
damage_taken = 100 / (100 + Armor) mitigation = Armor / (100 + Armor) EHP_físico = MaxHp × (100 + Armor) / 100
- · Sin techo: cada punto añade EHP, pero la mitigación se acerca asintóticamente al 100%.
Preset de héroe
EHP físico
2030
Daño recibido
69.0%
Mitigación
31.0%
EHP / HP
1.45
Curva de mitigación (0 → 500)
Orden de aplicación de stats
Pipeline
- Base del héroe/equipo
- Sumar modificadores Flat
- Multiplicar por
(1 + Σ Additive) - Multiplicar por cada Multiplicative como
(1 + valor)
1Base100100.00
2Base + Flat (20)100 + 20120.00
3× (1 + Additive 50%)120 × 1.50180.00
4× Mults (20% × 15%)180.00 × 1.20 × 1.15248.40
Final248.40
Recompensas de stage
Oro por monstruo normal
monster.RewardGold × stage_level.MonsterGoldMultiplier / 100
Exp por monstruo normal
monster.RewardExp × stage_level.MonsterExpMultiplier / 100
Oro del jefe
boss.RewardGold × stage.BossGoldMultiplier / 1000 × stage_level.MonsterGoldMultiplier / 100
- · Doble multiplicador: el del boss × el del nivel global.
HP del jefe
boss.MaxLife × stage.BossHpMultiplier / 1000 × stage_level.MonsterHpMultiplier / 100
Daño del jefe
boss.AttackDamage × stage.BossDamageMultiplier / 1000 × stage_level.MonsterAtkDmgMultiplier / 100
Oro/clear esperado
oro_medio_monstruo × (waves × monstruos_por_wave) + oro_jefe
- · Lo que aparece en cada página de stage como 'Oro / clear'.
Cálculo de drops
Resolución de la pool de un stage
DropKey = StageInfo.{MonsterDropItemKey|BossDropItemKey} × 10 + difficulty_variant- · Stage referencia con 6 dígitos; el DropKey real es de 7 (último dígito = variante: 1 o 5).
Probabilidad de un item en una pool
prob = entry.Weight / Σ(weights con misma hero_condition)
- · Las entradas con HeroKeyCondition forman buckets separados — solo aplican si juegas con ese héroe.
REWARDTYPE = ITEMGROUP
RewardKey → ItemGroupInfoData (1-a-muchos: el peso se reparte por cada item del grupo)
REWARDTYPE = ITEM
RewardKey es directamente el ItemKey
Ver JSON original
{
"_version": "TBH 1.00.05",
"dps_formula": {
"formula": "DPS = AttackSpeed * AttackDamage * (1 + CriticalChance * (CriticalDamage - 1))",
"units": {
"AttackSpeed": "raw_value / 100 (e.g. 90 -> 0.9 attacks per second)",
"AttackDamage": "raw integer (multiplied by skill Value/1000 for skill DPS)",
"CriticalChance": "raw_value / 100 (e.g. 25 -> 0.25 = 25%)",
"CriticalDamage": "raw_value / 1000 (e.g. 1400 -> 1.40x crit multiplier)"
},
"examples": [
{
"hero": "Knight",
"dps_base": 1.98
},
{
"hero": "Ranger",
"dps_base": 1.2
},
{
"hero": "Sorcerer",
"dps_base": 1.4575
}
]
},
"ehp_formula": {
"formula": "EffectiveHP = MaxHp * (100 + Armor) / 100",
"armor_curve": "damage_taken_fraction = 100 / (100 + armor)"
},
"stat_mod_application_order": [
"1. Base stat from hero/gear",
"2. Sum all Flat modifiers (add to base)",
"3. Multiply by (1 + sum of Additive modifiers)",
"4. Multiply by each Multiplicative modifier (1 + value)"
],
"stage_reward_multipliers": {
"monster_gold": "monster.RewardGold * stage_level.MonsterGoldMultiplier/100",
"monster_exp": "monster.RewardExp * stage_level.MonsterExpMultiplier/100",
"boss_gold": "boss.RewardGold * stage.BossGoldMultiplier/1000 * stage_level.MonsterGoldMultiplier/100",
"boss_hp": "boss.MaxLife * stage.BossHpMultiplier/1000 * stage_level.MonsterHpMultiplier/100"
},
"drop_calculation": {
"stage_pool_resolution": "StageInfo.MonsterDropItemKey/BossDropItemKey are 6-digit base keys; actual DropKey = base*10 + difficulty_variant (1 or 5 observed)",
"drop_pool_probability": "For each DropKey: probability_in_pool = entry.Weight / sum(all_weights_in_pool)",
"hero_conditional_drops": "Some entries have HeroKeyCondition set — they only apply when playing that hero"
}
}