fix [part of] #H103 - misleading prompt when choosing role,&c
From a bug report, specifying role and race
along with invalid alignment for that role/race combination resulted in a
prompt of "pick the alignment of your chaotic human Valkyrie". This fixes
that particular problem, but the role selection code is incomprehensible
and I don't have a lot of confidence about whether other combinations have
similar trouble.
This also fixes an obvious typo in ok_align(). Unfortunately I can't
figure out what to do with the if-then-else block in root_plselection_prompt
which has identical code for its `then' and `else' halves (in the alignment
code that the new ok_align() test skips).
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)role.c 3.5 2003/01/08 */
|
||||
/* SCCS Id: @(#)role.c 3.5 2006/05/24 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -982,7 +982,7 @@ int rolenum, racenum, gendnum, alignnum;
|
||||
return TRUE;
|
||||
} else {
|
||||
for (i = 0; i < ROLE_ALIGNS; i++) {
|
||||
allow = races[i].allow;
|
||||
allow = aligns[i].allow;
|
||||
if (rolenum >= 0 && rolenum < SIZE(roles)-1 &&
|
||||
!(allow & roles[rolenum].allow & ROLE_ALIGNMASK))
|
||||
continue;
|
||||
@@ -1150,7 +1150,8 @@ int buflen, rolenum, racenum, gendnum, alignnum;
|
||||
if (racenum != ROLE_NONE && racenum != ROLE_RANDOM)
|
||||
aligncount = race_alignmentcount(racenum);
|
||||
|
||||
if (alignnum != ROLE_NONE && alignnum != ROLE_RANDOM) {
|
||||
if (alignnum != ROLE_NONE && alignnum != ROLE_RANDOM &&
|
||||
ok_align(rolenum, racenum, gendnum, alignnum)) {
|
||||
/* if race specified, and multiple choice of alignments for it */
|
||||
if ((racenum >= 0) && (aligncount > 1)) {
|
||||
if (donefirst) Strcat(buf, " ");
|
||||
@@ -1162,6 +1163,8 @@ int buflen, rolenum, racenum, gendnum, alignnum;
|
||||
donefirst = TRUE;
|
||||
}
|
||||
} else {
|
||||
/* in case we got here by failing the ok_align() test */
|
||||
if (alignnum != ROLE_RANDOM) alignnum = ROLE_NONE;
|
||||
/* if alignment not specified, but race is specified
|
||||
and only one choice of alignment for that race then
|
||||
don't include it in the later list */
|
||||
|
||||
Reference in New Issue
Block a user