^X vs two-weapon

When dual-wielding and both weapons use the same skill, the weapon
feedback by ^X was inadvertently skipping the part where it would
tell the player whether either the weapons' skill or two-weapon
skill or both had already been trained enough to to be advanced.

Most of the diff is change in indentation.
This commit is contained in:
PatR
2020-04-07 06:17:35 -07:00
parent d984b0b87c
commit 1b2e3f5c90

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 insight.c $NHDT-Date: 1586186430 2020/04/06 15:20:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.11 $ */
/* NetHack 3.7 insight.c $NHDT-Date: 1586265433 2020/04/07 13:17:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.12 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -1100,7 +1100,7 @@ int final;
else
you_are(buf, "");
} else { /* twoweap, so two-weapon skill is at least unskilled */
} else { /* two-weapon */
static const char also_[] = "also ";
char pfx[QBUFSZ], sfx[QBUFSZ],
sknambuf2[20], sklvlbuf2[20], twobuf[20];
@@ -1119,7 +1119,7 @@ int final;
if (twoskl == P_ISRESTRICTED) {
twoskl = P_UNSKILLED;
/* restricted is the same as unskilled as far as bonus
or penaly goes, and it isn't ordinarily seen so
or penalty goes, and it isn't ordinarily seen so
skill_level_name() returns "Unknown" for it */
Strcpy(twobuf, "restricted");
} else {
@@ -1154,61 +1154,78 @@ int final;
else
you_are(buf, "");
if (wtype2 == wtype)
return;
Strcpy(sknambuf2, skill_name(wtype2));
(void) lcase(skill_level_name(wtype2, sklvlbuf2));
verb_present = "is", verb_past = "was";
pfx[0] = sfx[0] = buf[0] = '\0';
if (twoskl < sklvl2) {
/* twoskil is at least unskilled, sklvl2 at least basic */
Sprintf(pfx, "Your skill in %s ", sknambuf2);
Sprintf(sfx, " %slimited by being %s with two weapons",
also, twobuf);
} else if (twoskl > sklvl2) {
/* sklvl2 might be restricted */
Strcpy(pfx, "Your two weapon skill ");
Sprintf(sfx, " %slimited by ", also2);
if (sklvl2 > P_ISRESTRICTED)
Sprintf(eos(sfx), "being %s with", sklvlbuf2);
else
Strcat(eos(sfx), "having no skill");
Sprintf(eos(sfx), " with %s", sknambuf2);
} else {
/* equal; two-weapon is at least unskilled, so so is sklvl2;
"you [also] have basic/expert/master/grand-master skill
with <skill>" or "you [also] are unskilled/skilled in*" */
Sprintf(buf, "%s %s %s", sklvlbuf2,
hav2 ? "skill with" : "in", sknambuf2);
Strcat(buf, " and two weapons");
if (also3) {
Strcpy(pfx, "You also ");
Sprintf(sfx, " %s", buf), buf[0] = '\0';
verb_present = hav2 ? "have" : "are";
verb_past = hav2 ? "had" : "were";
/* skip comparison between secondary and two-weapons if it is
identical to the comparison between primary and twoweap */
if (wtype2 != wtype) {
Strcpy(sknambuf2, skill_name(wtype2));
(void) lcase(skill_level_name(wtype2, sklvlbuf2));
verb_present = "is", verb_past = "was";
pfx[0] = sfx[0] = buf[0] = '\0';
if (twoskl < sklvl2) {
/* twoskil is at least unskilled, sklvl2 at least basic */
Sprintf(pfx, "Your skill in %s ", sknambuf2);
Sprintf(sfx, " %slimited by being %s with two weapons",
also, twobuf);
} else if (twoskl > sklvl2) {
/* sklvl2 might be restricted */
Strcpy(pfx, "Your two weapon skill ");
Sprintf(sfx, " %slimited by ", also2);
if (sklvl2 > P_ISRESTRICTED)
Sprintf(eos(sfx), "being %s with", sklvlbuf2);
else
Strcat(eos(sfx), "having no skill");
Sprintf(eos(sfx), " with %s", sknambuf2);
} else {
/* equal; two-weapon is at least unskilled, so sklvl2 is
too; "you [also] have basic/expert/master/grand-master
skill with <skill>" or "you [also] are unskilled/
skilled in <skill> */
Sprintf(buf, "%s %s %s", sklvlbuf2,
hav2 ? "skill with" : "in", sknambuf2);
Strcat(buf, " and two weapons");
if (also3) {
Strcpy(pfx, "You also ");
Sprintf(sfx, " %s", buf), buf[0] = '\0';
verb_present = hav2 ? "have" : "are";
verb_past = hav2 ? "had" : "were";
}
}
}
if (*pfx)
enl_msg(pfx, verb_present, verb_past, sfx, "");
else if (hav2)
you_have(buf, "");
else
you_are(buf, "");
if (*pfx)
enl_msg(pfx, verb_present, verb_past, sfx, "");
else if (hav2)
you_have(buf, "");
else
you_are(buf, "");
} /* wtype2 != wtype */
/* if training and available skill credits already allow
#enhance for any of primary, secondary, or two-weapon,
tell the player; avoid attempting figure out whether
spending skill credits enhancing one might make either
or both of the others become ineligible for enhancement */
a1 = can_advance(wtype, FALSE);
a2 = can_advance(wtype2, FALSE);
a2 = (wtype2 != wtype) ? can_advance(wtype2, FALSE) : 0;
ab = can_advance(P_TWO_WEAPON_COMBAT, FALSE);
if (a1 || a2 || ab) {
static const char also_wik_[] = " and also with ";
/* for just one, the conditionals yield
1) "skill with <that one>"; for more than one:
2) "skills with <primary> and also with <secondary>" or
3) "skills with <primary> and also with two-weapons" or
4) "skills with <secondary> and also with two-weapons" or
5) "skills with <primary>, <secondary>, and two-weapons"
(no 'also's or extra 'with's for case 5); when primary
and secondary use the same skill, only cases 1 and 3 are
possible because 'a2' gets forced to 0 above */
Sprintf(sfx, " skill%s with %s%s%s%s%s",
(a1 + a2 + ab > 1) ? "s" : "",
a1 ? skill_name(wtype) : "",
((a1 && a2 && ab) ? ", "
: (a1 && (a2 || ab)) ? " and " : ""),
: (a1 && (a2 || ab)) ? also_wik_ : ""),
a2 ? skill_name(wtype2) : "",
((a1 && a2 && ab) ? ", and "
: (a2 && ab) ? " and " : ""),
: (a2 && ab) ? also_wik_ : ""),
ab ? "two weapons" : "");
enl_msg(You_, "can enhance", "could have enhanced", sfx, "");
}