From: copperwater Date: Mon, 13 Apr 2020 00:56:44 +0000 (-0400) Subject: Martial arts users never deal no damage with a clumsy kick X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d1b5b39e6dba45839ea2f5f236e5be9120bf77cd;p=nethack 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. --- diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 6137e9339..2b8355bd6 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -782,6 +782,8 @@ looting will do #force if you could do it and the container is locked and you didn't have a tool to unlock it use silly names for rays (such as breath weapons) when hallucinating zombies groan instead of being silent +martial arts users, sasquatches, and heroes wearing kicking boots can + no longer miss a monster completely with a clumsy kick Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/dokick.c b/src/dokick.c index b65cd51e0..32bbad0e8 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -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);