Martial arts users never deal no damage with a clumsy kick

From EvilHack, under the basis that anyone trained in martial arts (or
is in a powerful kicking polyform or wearing kicking boots) should be
immune from landing such a poor kick. This bypass used to happen only
50% of the time; now it happens all the time.

Note that this only averts the "Your clumsy kick does no damage" case:
it remains possible for a powerfully kicking player to kick clumsily and
have the monster evade or block, for example if they are fumbling or
wearing bulky armor.

Also, documentation: I added a comment explaining what the incredibly
dense and confusing logic is with i and j happening here, for the next
poor soul that has to read that code.
This commit is contained in:
copperwater
2020-04-12 20:56:44 -04:00
committed by Pasi Kallinen
parent a9712442dd
commit d1b5b39e6d
2 changed files with 11 additions and 1 deletions

View File

@@ -216,9 +216,17 @@ kick_monster(struct monst *mon, xchar x, xchar y)
i = -inv_weight();
j = weight_cap();
/* What the following confusing if statements mean:
* If you are over 70% of carrying capacity, you go through a "deal no
* damage" check, and if that fails, a "clumsy kick" check.
* At this % of carrycap | Chance of no damage | Chance of clumsiness
* [70%-80%) | 1/4 | 1/3
* [80%-90%) | 1/3 | 1/2
* [90%-100%) | 1/2 | 1
*/
if (i < (j * 3) / 10) {
if (!rn2((i < j / 10) ? 2 : (i < j / 5) ? 3 : 4)) {
if (martial() && !rn2(2))
if (martial())
goto doit;
Your("clumsy kick does no damage.");
(void) passive(mon, uarmf, FALSE, 1, AT_KICK, FALSE);