I've put my findings into an interactive playground where you can plug in stats and see what the resulting chances are.

https://writtenrealms.com/wot/playground/bash

https://writtenrealms.com/wot/playground/stab

https://writtenrealms.com/wot/playground/charge

https://writtenrealms.com/wot/playground/kick

https://writtenrealms.com/wot/playground/melee

Below is a text-only breakdown for each, with more information on things like damage where applicable.

**Bash Chance**

1) Start with a 30% probability

2) If the BMI difference between the characters is greater than 1 (where BMI is calculated as (naked weight + equipped weight) * 10 / height in inches ^ 2), add floor(bmi difference) * 10 to the probability. In practice, this means that BMI has no effect in player vs player combat, but does come into play vs certain mobs (ever wonder why the black ooze is unbashable by anything but a club?)

3) If the weapon is 10 lbs or heavier, add weight / 5 * ob / 3 + pb / 4 - db * 3 / 2 to the probability, up to 30% (where db is that of the victim)

3b) If the weapon is less than 10 lbs, add ob / 2 + pb / 4 - db * 3 / 2, up to 20%

4) If attacker is mounted, add 5%

5) Multiply probability by bash skill / 99

6) If the probability is less than 0, set it to 0

7) If wielding a club, add weapon skill / 10 to the probability

8) If probability is greater than 95, set to 95

9) If the victim is sleeping, double the probability

**Stab Chance**

1) start with a 50% probability

2) add 2x level difference to the probability

3) multiply probability by stab skill / 99

4) If weapon skill is less than 80% the probability gets multiplied by weapon_skill / 99

5) If encumbrance is over 50%, the probability is reduced by 10 * ((carrying + equipped) * 10 / (can carry + can equip) - 5)

6) If the victim has notice on, the probability is reduced by notice / 5

7) If the victim is sleeping, the probability gets doubled

8) If the attacker is not hidden, the probability is set to 0.

9) If the attacker has sneak on (whether or not the sneak was successful in hiding the attacker's entrance), the probability gets increased by the max of 0 or (sneak_skill - 1d101) / 10. This is where no-hide stabs come from. If a stabber doesn't prac sneak, they will never land a no-hide stab.

**Stab Damage**

1) roll weapon damage

2) if weapon has level 1 or level 2 ward, add a 2d4 roll

3) if master, fade or dreadlord, add a 2d5 roll

4) select a random value between 10x and 15x the damage roll

5) damage gets multiplied by stab skill / 100

6) if the attacker is berserk, the damage is doubled, and if at that point damage is greater than 250, the damage gets multiplied by 3/4

7) If the victim is undead, divide damage by 3

8) If victim is sleeping, damage is tripled

9) If victim is either resting or sitting, damage is multiplied by 1.5

**Charge Chance**

1) start with a 50% probability

2) add 2x level difference to the probability

3) multiply probability by charge skill / 99

4) If the attacker is not flying, reduce the probability by 15 in forest rooms, 25 in hills and swamplands, and 75 in mountains

5) If the attacker is flying, half the probability

6) If encumbrance is over 50%, the probability is reduced by 10 * ((carrying + equipped) * 10 / (can carry + can equip) - 5)

7) If victim is sleeping, double the probability

**Charge damage**

1) roll weapon damage

2) if weapon has level 1 or level 2 ward, add a 2d4 roll

3) if master, fade or dreadlord, add a 2d5 roll

4) select a random value between 7x and 11x and the damage roll

5) damage gets multiplied by charge skill / 100

6) if the attacker is berserk, the damage is doubled

7) If the victim is undead, divide damage by 3

8) If victim is sleeping, damage is tripled

9) If victim is either resting or sitting, damage is multiplied by 1.5

**Kick Chance**

1) If kick chance is < 14, probability is 0

2) If kick chance >= 15, set probability to kick skill / 2 + ob / 3 - db / 2

**Kick Damage / move loss**

I can't give too much insight here without reading other functions in the code (that I don't have), hopefully in time I'll be able to update this. I can provide a couple insights though:

1) boots with more total durability take away more moves

2) damage is a function of your strength, where the roll is something like 1d(str/2) with some other modifiers that I'm not sure about.

**Note on fear**: bash, charge, stab & kick all share a 75% failure rate if the attacker is feared.

**Note on integers truncation**throughout the code, the probability is always an integer. This means that when some part of a formula yields non-integer value, that value is truncated to an integer before the probability is altered. This is why for example having 99 clubs gives a 9% bash bonus and not 10. 99/10 truncated is 9, even though in floating point arithmetic the value would be much closer to 10.

**Note on levels difference**: these cap at 30, So for the purposes of these formulas, the difference between 51 and 30 is 0.

Post here if you have questions, I will add this to the wiki once I've gathered a little feedback here, if applicable.