@@ -307,14 +307,18 @@ abstract contract Combat is MonsterFactory {
307307
308308 // Health regen has to be normalized for the default cooldown to prevent quickness points from
309309 // giving extreme health regeneration benefits
310- uint256 targetHealthRegeneration = uint256 (combatant.stats.vitality) * VITALITY_REGEN_MODIFIER;
310+ uint256 targetHealthRegeneration = ( uint256 (combatant.stats.vitality) + uint256 (combatant.stats.level) ) * VITALITY_REGEN_MODIFIER;
311311
312312 if (combatant.isMonster ()) {
313- targetHealthRegeneration /= 2 ;
313+ if (attacker.stats.class == CharacterClass.Boss) {
314+ targetHealthRegeneration = targetHealthRegeneration * 3 / 2 ;
315+ } else if (attacker.stats.class == CharacterClass.Basic) {
316+ targetHealthRegeneration = targetHealthRegeneration * 4 / 5 ;
317+ } // else: elites have 1:1 regen
314318 }
315319
316320 if (combatant.stats.class == CharacterClass.Monk) {
317- targetHealthRegeneration += (uint256 (combatant.stats.level) * 2 + 10 );
321+ targetHealthRegeneration += (( uint256 (combatant.stats.level) * 3 / 2 ) + 10 );
318322 } else if (combatant.stats.class == CharacterClass.Bard) {
319323 targetHealthRegeneration = 1 ;
320324 }
@@ -327,6 +331,8 @@ abstract contract Combat is MonsterFactory {
327331 targetHealthRegeneration = 0 ;
328332 }
329333
334+ targetHealthRegeneration = (targetHealthRegeneration + 2 ) * DAMAGE_DILUTION_FACTOR / DAMAGE_DILUTION_BASE;
335+
330336 // Cannot regenerate above max
331337 if (currentHealth + targetHealthRegeneration > maxHealth) {
332338 uint256 recovered = maxHealth > currentHealth ? maxHealth - currentHealth : 0 ;
0 commit comments