 # Monster Attack Formulas

(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)

Some formulas used are simplified for easy calculation. Real ones can be found at bottom. SpawnLevel = First Dungeon Level, the monster spawns on ("Level" Value in Wabbits Editor)
MonGuildLvl = Monster Guild Level ("Guild Lev" Value in Wabbits Editor)

Order of the Attack
Pre-Attack:
1) Breath
2) Acid

Attack:
1b) Melee, max 5 attack attemps

Post-Attack:
1) Electrocute
2) Age
3) Drain
4) Stone
5) Poison
6) Disease
7) Destroy Item
8) Steal

Monster Melee Damage Formula
1: Get Monster DamMod ("Damage" Value in Wabbits Editor)
2: -0.5 if Target is invisible and Monster can't see invisible
4: +0.75 if Target is opening Chest
3: + 2 if Critical Hit, Chance of doing a Crit is 2-50% if Monster can Crit
4: + 1 if Backstab, Chance of Backstabbing is 4-75% if Monster can Backstab
6: +0.1/-0.1 per size bigger/smaller than Target
7: if DamMod is > 1, then DamMod = DamMod - LN(DamMod)^2

BSV = Int(MonStrength - (LN(MonStrength) * ((LN(MonStrength) - 2.4) * 2.25))) + 1
StrMod1 = Int((Rnd * ((BSV + 10) / 2)) + ((BSV + 10) / 4)) / 10
StrMod2 = BSV/30

LvlMod = (LN(MonGuildLvl + 5) + 1) / LN(1.2)

Base Damage = LvlMod * StrMod1 * StrMod2 * DamMod
Final Damage = Base - Random[0 to Int((CharDef-MonAtk)/8)]

Monster Chance To Hit
If MonAtk = CharDef: %Chance = 50
If MonAtk > CharDef: %Chance = 50 + (50 * (MonAtk - CharDef) / MonAtk)
If MonAtk < CharDef: %Chance = 50 - (50 * (CharDef - MonAtk) / CharDef)
Minimum 2%, Maximum 98%

Acid Attack
CharCurrentGuildLvl > MonGuildLvl * 1.25: Chance = 90%
CharCurrentGuildLvl < MonGuildLvl * 1.25: Chance = 10%
Else Chance = 50%

Minimum = (LN(MonGuildLvl) + (MonGuildLvl/15)) * 4.55
Base Damage = Minimum + Random[0 to Minimum]
Then every 10 Character Levels = -0.7 Dam (is -0.07 Dam per Level, but approx is easier)
Final Damage = Base Damage * (1 - Resistance/2) (Yes, resistance only half effective)

Breath Attack
CharHighestGuildLvl > MonGuildLvl * 1.25: Chance = 80%
CharHighestGuildLvl < MonGuildLvl * 1.25: Chance = 20%
Else Chance = 50%

LevelMod = MonGuildLvl * LN(MonGuildLvl)
Minimum = Int((LN(LevelMod) + (LevelMod / 15)) * 1.1375)
Base Damage = Minimum + Random[0 to Minimum*2]
Character Level has basically negligible effect, Lv 1 vs 999 is a 5-12 Damage Reduction difference here.
Final Damage = Base Damage * (1 - Resistance/2) (Yes, resistance only half effective)

Will hit Targeted Character and all his/her Companions.

Electrocution Attack, requires successful Spell/Melee Attack
CharLvl > MonGuildLvl * 1.25: Chance = 90%
CharLvl < MonGuildLvl * 1.25: Chance = 10%
Else Chance = 50%

Minimum = (LN(MonGuildLvl) + (MonGuildLvl/15)) * 4.55
Base Damage = Minimum + Random[0 to Minimum]
Then every 10 Character Levels = -0.7 Dam (is -0.07 Dam per Level, but approx is easier)
Final Damage = Base Damage * (1 - Resistance/2) (Yes, resistance only half effective)

Age Attack, requires successful Melee Attack
%Chance = (100 + SpawnLevel * 2) - (CharacterConstitution * 2.5)
Aging = 1 to [lowest of: 1825 and MonGuildLvl * 7.3] days

Drain Attack, requires successful Melee Attack
Drain Attemps = Random[1 to CInt(SpawnLevel / 2 + 0.5)]
Drain = 1 Random Stat or -2 Max HP
%Chance = (100 + SpawnLevel * 2) - (CharacterConstitution * 2.5)

First check against Resistance, if attack is not resisted, then check chance.

Stoning Attack, requires successful Spell/Melee Attack
%Chance (minimum 5%) = (100 + SpawnLevel) - (CharacterConstitution * LN(CharacterConstitution) * 1.09)

First check against Resistance, if attack is not resisted, then check chance.

Poison Attack, requires successful Melee Attack
Poison Level = SpawnLevel (higher level poison takes longer to wear off)

Check against Resistance, if attack is not resisted, apply Poison

Disease Attack, requires successful Melee Attack
Disease Level = SpawnLevel (higher level disease takes longer to wear off)

Check against Resistance, if attack is not resisted, apply Disease

Paralyze Attack, requires successful Melee Attack
%Chance (Minimum 5) = 100 - (Resistance + CharacterConstitution)

Real Formula for Breath Attack:
LevelMod = Int(MonGuildLvl * LN(MonGuildLvl + 1))
Modifier1 = Int(((((LN(LevelMod) + (LevelMod / 15)) / LN(1.08)) - (CharGuildLvl / 20)) + 1))
Base Damage = Int(((Int(((Rnd * Modifier1) + 1) / 2) + (Modifier1 / 4)) * 0.7) / 2)

Real Formula for Acid/Electrocution Attack:
Modifier1 = Int(((((LN(MonGuildLvl + 1) + ((MonGuildLvl + 1) / 15)) / LN(1.08)) - (CharGuildLvl / 10)) + 1))
Base Damage = Int((Int(((Rnd * Modifier1) + 1) / 2) + (Modifier1 / 2)) * 0.7)

Discuss this topic in the forum