The new code provoked several warnings; this fixes one of them.
Moving the declaration of 'rolecount' would have been sufficient,
but I've gone another way.
E boolean FDECL(validrace, (int, int));
E boolean FDECL(validgend, (int, int, int));
E boolean FDECL(validalign, (int, int, int));
-E int NDECL(randrole);
+E int FDECL(randrole, (BOOLEAN_P));
E int FDECL(randrace, (int));
E int FDECL(randgend, (int, int));
E int FDECL(randalign, (int, int));
if (!Hallucination)
return align_gname(alignment);
- /* Count the roles, so that we can pick one at random. */
- int rolecount = 0;
- while (roles[rolecount].filecode)
- rolecount++;
-
- /* The priest may not have initialized god names. If this is the
- case, and we roll priest, we need to try again. */
+ /* Some roles (Priest) don't have a pantheon unless we're playing as
+ that role, so keep trying until we get a role which does have one.
+ [If playing a Priest, the current pantheon will be twice as likely
+ to get picked as any of the others. That's not significant enough
+ to bother dealing with.] */
do
- which = rn2_on_display_rng(rolecount);
+ which = randrole(TRUE);
while (!roles[which].lgod);
switch (rn2_on_display_rng(9)) {
}
int
-randrole()
+randrole(for_display)
+boolean for_display;
{
- return rn2(SIZE(roles) - 1);
+ int res = SIZE(roles) - 1;
+
+ if (for_display)
+ res = rn2_on_display_rng(res);
+ else
+ res = rn2(res);
+ return res;
}
STATIC_OVL int
&& ok_gend(i, ROLE_NONE, ROLE_RANDOM, ROLE_NONE)
&& ok_align(i, ROLE_NONE, ROLE_NONE, ROLE_RANDOM))
set[n++] = i;
- return n ? set[rn2(n)] : randrole();
+ return n ? set[rn2(n)] : randrole(FALSE);
}
int
if (flags.pantheon == -1) { /* new game */
flags.pantheon = flags.initrole; /* use own gods */
while (!roles[flags.pantheon].lgod) /* unless they're missing */
- flags.pantheon = randrole();
+ flags.pantheon = randrole(FALSE);
}
if (!urole.lgod) {
urole.lgod = roles[flags.pantheon].lgod;