Skip to content

Commit

Permalink
Martial arts users never deal no damage with a clumsy kick
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
copperwater authored and paxed committed Feb 18, 2022
1 parent a971244 commit d1b5b39
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
2 changes: 2 additions & 0 deletions doc/fixes3-7-0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 9 additions & 1 deletion src/dokick.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit d1b5b39

Please sign in to comment.