|
|
@ -230,60 +230,77 @@ kick_monster(struct monst *mon, coordxy x, coordxy y)
|
|
|
|
* [80%-90%) | 1/3 | 1/2
|
|
|
|
* [80%-90%) | 1/3 | 1/2
|
|
|
|
* [90%-100%) | 1/2 | 1
|
|
|
|
* [90%-100%) | 1/2 | 1
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
if (i < (j * 3) / 10) {
|
|
|
|
/* This is a C language code snippet that describes a player character's kicking action in a game. */
|
|
|
|
if (!rn2((i < j / 10) ? 2 : (i < j / 5) ? 3 : 4)) {
|
|
|
|
|
|
|
|
if (martial())
|
|
|
|
if (i < (j * 3) / 10) {
|
|
|
|
goto doit;
|
|
|
|
/* If the condition (i < (j * 3) / 10) is true, execute the following code block: */
|
|
|
|
Your("clumsy kick does no damage.");
|
|
|
|
|
|
|
|
(void) passive(mon, uarmf, FALSE, 1, AT_KICK, FALSE);
|
|
|
|
if (!rn2((i < j / 10) ? 2 : (i < j / 5) ? 3 : 4)) {
|
|
|
|
|
|
|
|
/* If the result of rn2((i < j / 10) ? 2 : (i < j / 5) ? 3 : 4) is false (0), do the following: */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (martial()) {
|
|
|
|
|
|
|
|
goto doit;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
/* Output "Your clumsy kick does no damage." and call passive() function, then return. */
|
|
|
|
|
|
|
|
pline("Your clumsy kick does no damage.");
|
|
|
|
|
|
|
|
passive();
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (i < j / 10)
|
|
|
|
|
|
|
|
clumsy = TRUE;
|
|
|
|
|
|
|
|
else if (!rn2((i < j / 5) ? 2 : 3))
|
|
|
|
|
|
|
|
clumsy = TRUE;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (Fumbling)
|
|
|
|
if (i < j / 10) {
|
|
|
|
clumsy = TRUE;
|
|
|
|
clumsy = TRUE;
|
|
|
|
|
|
|
|
} else if (!rn2((i < j / 5) ? 2 : 3)) {
|
|
|
|
else if (uarm && objects[uarm->otyp].oc_bulky && ACURR(A_DEX) < rnd(25))
|
|
|
|
|
|
|
|
clumsy = TRUE;
|
|
|
|
clumsy = TRUE;
|
|
|
|
doit:
|
|
|
|
}
|
|
|
|
You("kick %s.", mon_nam(mon));
|
|
|
|
}
|
|
|
|
if (!rn2(clumsy ? 3 : 4) && (clumsy || !bigmonst(mon->data))
|
|
|
|
|
|
|
|
&& mon->mcansee && !mon->mtrapped && !thick_skinned(mon->data)
|
|
|
|
if (Fumbling) {
|
|
|
|
&& mon->data->mlet != S_EEL && haseyes(mon->data) && mon->mcanmove
|
|
|
|
clumsy = TRUE;
|
|
|
|
&& !mon->mstun && !mon->mconf && !mon->msleeping
|
|
|
|
} else if (uarm && objects[uarm->otyp].oc_bulky && ACURR(A_DEX) < rnd(25)) {
|
|
|
|
&& mon->data->mmove >= 12) {
|
|
|
|
clumsy = TRUE;
|
|
|
|
if (!nohands(mon->data) && !rn2(martial() ? 5 : 3)) {
|
|
|
|
}
|
|
|
|
pline("%s blocks your %skick.", Monnam(mon),
|
|
|
|
|
|
|
|
|
|
|
|
doit:
|
|
|
|
|
|
|
|
/* Output "You kick __." where __ is the name of the enemy. */
|
|
|
|
|
|
|
|
pline("You kick %s.", mon_nam(mon));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((!rn2(clumsy ? 3 : 4) || (clumsy || mon->data->msize == MZ_SMALL)) &&
|
|
|
|
|
|
|
|
mon->mcansee && !mon->mtrapped && !thick_skinned(mon->data) &&
|
|
|
|
|
|
|
|
mon->data->mlet != S_EEL && haseyes(mon->data) &&
|
|
|
|
|
|
|
|
mon->mcanmove && !mon->mstun && !mon->mconf && !mon->msleeping &&
|
|
|
|
|
|
|
|
mon->data->mmove >= 12) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!nohands(mon->data) && !rn2(martial() ? 5 : 3)) {
|
|
|
|
|
|
|
|
/* Output "%s blocks your %skick." where %s is the name of the enemy,
|
|
|
|
|
|
|
|
* %skick can be "clumsy ", and call passive() function, then return. */
|
|
|
|
|
|
|
|
pline("%s blocks your %skick.", Monnam(mon), clumsy ? "clumsy " : "");
|
|
|
|
|
|
|
|
passive();
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
maybe_mnexto(mon);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (mon->mx != x || mon->my != y) {
|
|
|
|
|
|
|
|
unmap_invisible(x, y);
|
|
|
|
|
|
|
|
/* Output "%s %s, %s evading your %skick." where %s is the name of the enemy,
|
|
|
|
|
|
|
|
* %s can be "teleports", "floats", "swoops", or "slides",
|
|
|
|
|
|
|
|
* %s can be "easily" or "nimbly", and %s can be "clumsy ".
|
|
|
|
|
|
|
|
* Then call passive() function, and return. */
|
|
|
|
|
|
|
|
pline("%s %s, %s evading your %skick.", Monnam(mon),
|
|
|
|
|
|
|
|
teleport_control(mon) ? "teleports" :
|
|
|
|
|
|
|
|
is_floater(mon->data) ? "floats" :
|
|
|
|
|
|
|
|
is_flyer(mon->data) ? "swoops" : "slides",
|
|
|
|
|
|
|
|
(is_floater(mon->data) || mon->data->mmove >= 12) ? "easily" : "nimbly",
|
|
|
|
clumsy ? "clumsy " : "");
|
|
|
|
clumsy ? "clumsy " : "");
|
|
|
|
(void) passive(mon, uarmf, FALSE, 1, AT_KICK, FALSE);
|
|
|
|
passive();
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
|
|
|
|
maybe_mnexto(mon);
|
|
|
|
|
|
|
|
if (mon->mx != x || mon->my != y) {
|
|
|
|
|
|
|
|
(void) unmap_invisible(x, y);
|
|
|
|
|
|
|
|
pline("%s %s, %s evading your %skick.", Monnam(mon),
|
|
|
|
|
|
|
|
(can_teleport(mon->data) && !noteleport_level(mon))
|
|
|
|
|
|
|
|
? "teleports"
|
|
|
|
|
|
|
|
: is_floater(mon->data)
|
|
|
|
|
|
|
|
? "floats"
|
|
|
|
|
|
|
|
: is_flyer(mon->data) ? "swoops"
|
|
|
|
|
|
|
|
: (nolimbs(mon->data)
|
|
|
|
|
|
|
|
|| slithy(mon->data))
|
|
|
|
|
|
|
|
? "slides"
|
|
|
|
|
|
|
|
: "jumps",
|
|
|
|
|
|
|
|
clumsy ? "easily" : "nimbly", clumsy ? "clumsy " : "");
|
|
|
|
|
|
|
|
(void) passive(mon, uarmf, FALSE, 1, AT_KICK, FALSE);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
kickdmg(mon, clumsy);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kickdmg(mon, clumsy);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Return TRUE if caught (the gold taken care of), FALSE otherwise.
|
|
|
|
* Return TRUE if caught (the gold taken care of), FALSE otherwise.
|
|
|
|
* The gold object is *not* attached to the fobj chain!
|
|
|
|
* The gold object is *not* attached to the fobj chain!
|
|
|
|