Merge branch 'NetHack-3.6.2'
This commit is contained in:
+1
-1
@@ -2123,7 +2123,7 @@ E boolean FDECL(validrole, (int));
|
|||||||
E boolean FDECL(validrace, (int, int));
|
E boolean FDECL(validrace, (int, int));
|
||||||
E boolean FDECL(validgend, (int, int, int));
|
E boolean FDECL(validgend, (int, int, int));
|
||||||
E boolean FDECL(validalign, (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(randrace, (int));
|
||||||
E int FDECL(randgend, (int, int));
|
E int FDECL(randgend, (int, int));
|
||||||
E int FDECL(randalign, (int, int));
|
E int FDECL(randalign, (int, int));
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
#ifndef INTEGER_H
|
#ifndef INTEGER_H
|
||||||
#define INTEGER_H
|
#define INTEGER_H
|
||||||
|
|
||||||
#if defined(__STDC__) && __STDC_VERSION__ >= 199101L
|
#if (defined(__STDC__) && __STDC_VERSION__ >= 199901L)
|
||||||
/* The compiler claims to conform to C99. Use stdint.h */
|
/* The compiler claims to conform to C99. Use stdint.h */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#define SKIP_STDINT_WORKAROUND
|
#define SKIP_STDINT_WORKAROUND
|
||||||
|
|||||||
+6
-8
@@ -2090,15 +2090,13 @@ aligntyp alignment;
|
|||||||
if (!Hallucination)
|
if (!Hallucination)
|
||||||
return align_gname(alignment);
|
return align_gname(alignment);
|
||||||
|
|
||||||
/* Count the roles, so that we can pick one at random. */
|
/* Some roles (Priest) don't have a pantheon unless we're playing as
|
||||||
int rolecount = 0;
|
that role, so keep trying until we get a role which does have one.
|
||||||
while (roles[rolecount].filecode)
|
[If playing a Priest, the current pantheon will be twice as likely
|
||||||
rolecount++;
|
to get picked as any of the others. That's not significant enough
|
||||||
|
to bother dealing with.] */
|
||||||
/* The priest may not have initialized god names. If this is the
|
|
||||||
case, and we roll priest, we need to try again. */
|
|
||||||
do
|
do
|
||||||
which = rn2_on_display_rng(rolecount);
|
which = randrole(TRUE);
|
||||||
while (!roles[which].lgod);
|
while (!roles[which].lgod);
|
||||||
|
|
||||||
switch (rn2_on_display_rng(9)) {
|
switch (rn2_on_display_rng(9)) {
|
||||||
|
|||||||
@@ -17,16 +17,16 @@ struct rnglist_t {
|
|||||||
isaac64_ctx rng_state;
|
isaac64_ctx rng_state;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {CORE = 0, DISP};
|
enum { CORE = 0, DISP = 1 };
|
||||||
|
|
||||||
static struct rnglist_t rnglist[] = {
|
static struct rnglist_t rnglist[] = {
|
||||||
{rn2, FALSE, {0}}, /* CORE */
|
{ rn2, FALSE, { 0 } }, /* CORE */
|
||||||
{rn2_on_display_rng, FALSE, {0}}, /* DISP */
|
{ rn2_on_display_rng, FALSE, { 0 } }, /* DISP */
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
whichrng(fn)
|
whichrng(fn)
|
||||||
int (*fn)(int);
|
int FDECL((*fn), (int));
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -39,19 +39,21 @@ int (*fn)(int);
|
|||||||
void
|
void
|
||||||
init_isaac64(seed, fn)
|
init_isaac64(seed, fn)
|
||||||
unsigned long seed;
|
unsigned long seed;
|
||||||
int FDECL((*fn),(int));
|
int FDECL((*fn), (int));
|
||||||
{
|
{
|
||||||
unsigned char new_rng_state[sizeof(seed)];
|
unsigned char new_rng_state[sizeof seed];
|
||||||
int i, rngindx = whichrng(fn);
|
unsigned i;
|
||||||
|
int rngindx = whichrng(fn);
|
||||||
|
|
||||||
if (rngindx < 0)
|
if (rngindx < 0)
|
||||||
panic("Bad rng function passed to init_isaac64().");
|
panic("Bad rng function passed to init_isaac64().");
|
||||||
|
|
||||||
for (i=0; i<sizeof(seed); i++) {
|
for (i = 0; i < sizeof seed; i++) {
|
||||||
new_rng_state[i]= (unsigned char)(seed & 0xFF);
|
new_rng_state[i] = (unsigned char) (seed & 0xFF);
|
||||||
seed >>= 8;
|
seed >>= 8;
|
||||||
}
|
}
|
||||||
isaac64_init(&rnglist[rngindx].rng_state, new_rng_state, sizeof(seed));
|
isaac64_init(&rnglist[rngindx].rng_state, new_rng_state,
|
||||||
|
(int) sizeof seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|||||||
+11
-4
@@ -728,9 +728,16 @@ int rolenum;
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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
|
STATIC_OVL int
|
||||||
@@ -746,7 +753,7 @@ randrole_filtered()
|
|||||||
&& ok_gend(i, ROLE_NONE, ROLE_RANDOM, ROLE_NONE)
|
&& ok_gend(i, ROLE_NONE, ROLE_RANDOM, ROLE_NONE)
|
||||||
&& ok_align(i, ROLE_NONE, ROLE_NONE, ROLE_RANDOM))
|
&& ok_align(i, ROLE_NONE, ROLE_NONE, ROLE_RANDOM))
|
||||||
set[n++] = i;
|
set[n++] = i;
|
||||||
return n ? set[rn2(n)] : randrole();
|
return n ? set[rn2(n)] : randrole(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -2021,7 +2028,7 @@ role_init()
|
|||||||
if (flags.pantheon == -1) { /* new game */
|
if (flags.pantheon == -1) { /* new game */
|
||||||
flags.pantheon = flags.initrole; /* use own gods */
|
flags.pantheon = flags.initrole; /* use own gods */
|
||||||
while (!roles[flags.pantheon].lgod) /* unless they're missing */
|
while (!roles[flags.pantheon].lgod) /* unless they're missing */
|
||||||
flags.pantheon = randrole();
|
flags.pantheon = randrole(FALSE);
|
||||||
}
|
}
|
||||||
if (!g.urole.lgod) {
|
if (!g.urole.lgod) {
|
||||||
g.urole.lgod = roles[flags.pantheon].lgod;
|
g.urole.lgod = roles[flags.pantheon].lgod;
|
||||||
|
|||||||
+5
-5
@@ -451,7 +451,7 @@ amii_player_selection()
|
|||||||
if (validrole(flags.initrole))
|
if (validrole(flags.initrole))
|
||||||
return;
|
return;
|
||||||
else {
|
else {
|
||||||
flags.initrole=randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#if 0 /* Don't query the user ... instead give random character -jhsa */
|
#if 0 /* Don't query the user ... instead give random character -jhsa */
|
||||||
@@ -518,7 +518,7 @@ amii_player_selection()
|
|||||||
}
|
}
|
||||||
else if( code == ' ' || code == '\n' || code == '\r' )
|
else if( code == ' ' || code == '\n' || code == '\r' )
|
||||||
{
|
{
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
#if 0 /* OBSOLETE */
|
#if 0 /* OBSOLETE */
|
||||||
strcpy( g.pl_character, roles[ rnd( 11 ) ] );
|
strcpy( g.pl_character, roles[ rnd( 11 ) ] );
|
||||||
#endif
|
#endif
|
||||||
@@ -543,7 +543,7 @@ amii_player_selection()
|
|||||||
switch( gd->GadgetID )
|
switch( gd->GadgetID )
|
||||||
{
|
{
|
||||||
case 1: /* Random Character */
|
case 1: /* Random Character */
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
#if 0 /* OBSOLETE */
|
#if 0 /* OBSOLETE */
|
||||||
strcpy( g.pl_character, roles[ rnd( 11 ) ] );
|
strcpy( g.pl_character, roles[ rnd( 11 ) ] );
|
||||||
#endif
|
#endif
|
||||||
@@ -1380,7 +1380,7 @@ amii_player_selection()
|
|||||||
flags.initalign, PICK_RANDOM);
|
flags.initalign, PICK_RANDOM);
|
||||||
if (flags.initrole < 0) {
|
if (flags.initrole < 0) {
|
||||||
amii_putstr(WIN_MESSAGE, 0, "Incompatible role!");
|
amii_putstr(WIN_MESSAGE, 0, "Incompatible role!");
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Prompt for a role */
|
/* Prompt for a role */
|
||||||
@@ -1416,7 +1416,7 @@ amii_player_selection()
|
|||||||
any.a_int = pick_role(flags.initrace, flags.initgend,
|
any.a_int = pick_role(flags.initrace, flags.initgend,
|
||||||
flags.initalign, PICK_RANDOM) + 1;
|
flags.initalign, PICK_RANDOM) + 1;
|
||||||
if (any.a_int == 0) /* must be non-zero */
|
if (any.a_int == 0) /* must be non-zero */
|
||||||
any.a_int = randrole() + 1;
|
any.a_int = randrole(FALSE) + 1;
|
||||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||||
MENU_UNSELECTED);
|
MENU_UNSELECTED);
|
||||||
any.a_int = i + 1; /* must be non-zero */
|
any.a_int = i + 1; /* must be non-zero */
|
||||||
|
|||||||
+1
-1
@@ -549,7 +549,7 @@ mac_askname()
|
|||||||
currrole = flags.initrole;
|
currrole = flags.initrole;
|
||||||
/* Check for backward compatibility */
|
/* Check for backward compatibility */
|
||||||
else if ((currrole = str2role(g.pl_character)) < 0)
|
else if ((currrole = str2role(g.pl_character)) < 0)
|
||||||
currrole = randrole();
|
currrole = randrole(FALSE);
|
||||||
|
|
||||||
/* Initialize the race popup menu */
|
/* Initialize the race popup menu */
|
||||||
if (!(askmenu[RSRC_ASK_RACE] = NewMenu(RSRC_ASK_RACE, "\p")))
|
if (!(askmenu[RSRC_ASK_RACE] = NewMenu(RSRC_ASK_RACE, "\p")))
|
||||||
|
|||||||
+4
-4
@@ -768,18 +768,18 @@ error:
|
|||||||
unsigned long
|
unsigned long
|
||||||
sys_random_seed()
|
sys_random_seed()
|
||||||
{
|
{
|
||||||
unsigned long seed;
|
unsigned long seed = 0L;
|
||||||
unsigned long pid = (unsigned long) getpid();
|
unsigned long pid = (unsigned long) getpid();
|
||||||
boolean no_seed = TRUE;
|
boolean no_seed = TRUE;
|
||||||
#ifdef DEV_RANDOM
|
#ifdef DEV_RANDOM
|
||||||
FILE *fptr = NULL;
|
FILE *fptr;
|
||||||
|
|
||||||
fptr = fopen(DEV_RANDOM, "r");
|
fptr = fopen(DEV_RANDOM, "r");
|
||||||
if (fptr) {
|
if (fptr) {
|
||||||
fread(&seed, sizeof(long), 1, fptr);
|
fread(&seed, sizeof (long), 1, fptr);
|
||||||
has_strong_rngseed = TRUE; /* decl.c */
|
has_strong_rngseed = TRUE; /* decl.c */
|
||||||
no_seed = FALSE;
|
no_seed = FALSE;
|
||||||
fclose(fptr);
|
(void) fclose(fptr);
|
||||||
} else {
|
} else {
|
||||||
/* leaves clue, doesn't exit */
|
/* leaves clue, doesn't exit */
|
||||||
paniclog("sys_random_seed", "falling back to weak seed");
|
paniclog("sys_random_seed", "falling back to weak seed");
|
||||||
|
|||||||
+3
-3
@@ -225,7 +225,7 @@ mswin_player_selection(void)
|
|||||||
flags.initalign, PICK_RANDOM);
|
flags.initalign, PICK_RANDOM);
|
||||||
if (flags.initrole < 0) {
|
if (flags.initrole < 0) {
|
||||||
raw_print("Incompatible role!");
|
raw_print("Incompatible role!");
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,7 +358,7 @@ prompt_for_player_selection(void)
|
|||||||
flags.initalign, PICK_RANDOM);
|
flags.initalign, PICK_RANDOM);
|
||||||
if (flags.initrole < 0) {
|
if (flags.initrole < 0) {
|
||||||
/* tty_putstr(BASE_WINDOW, 0, "Incompatible role!"); */
|
/* tty_putstr(BASE_WINDOW, 0, "Incompatible role!"); */
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* tty_clear_nhwindow(BASE_WINDOW); */
|
/* tty_clear_nhwindow(BASE_WINDOW); */
|
||||||
@@ -396,7 +396,7 @@ prompt_for_player_selection(void)
|
|||||||
any.a_int = pick_role(flags.initrace, flags.initgend,
|
any.a_int = pick_role(flags.initrace, flags.initgend,
|
||||||
flags.initalign, PICK_RANDOM) + 1;
|
flags.initalign, PICK_RANDOM) + 1;
|
||||||
if (any.a_int == 0) /* must be non-zero */
|
if (any.a_int == 0) /* must be non-zero */
|
||||||
any.a_int = randrole() + 1;
|
any.a_int = randrole(FALSE) + 1;
|
||||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||||
MENU_UNSELECTED);
|
MENU_UNSELECTED);
|
||||||
any.a_int = i + 1; /* must be non-zero */
|
any.a_int = i + 1; /* must be non-zero */
|
||||||
|
|||||||
@@ -1615,6 +1615,27 @@ static const char *build_opts[] = {
|
|||||||
#endif
|
#endif
|
||||||
/* pattern matching method will be substituted by nethack at run time */
|
/* pattern matching method will be substituted by nethack at run time */
|
||||||
"pattern matching via :PATMATCH:",
|
"pattern matching via :PATMATCH:",
|
||||||
|
#ifdef USE_ISAAC64
|
||||||
|
"pseudo random numbers generated by ISAAC64",
|
||||||
|
#ifdef DEV_RANDOM
|
||||||
|
#ifdef __STDC__
|
||||||
|
/* include which specific one */
|
||||||
|
"strong PRNG seed available from " DEV_RANDOM,
|
||||||
|
#else
|
||||||
|
"strong PRNG seed available from DEV_RANDOM",
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef WIN32
|
||||||
|
"strong PRNG seed available from CNG BCryptGenRandom()",
|
||||||
|
#endif
|
||||||
|
#endif /* DEV_RANDOM */
|
||||||
|
#else /* ISAAC64 */
|
||||||
|
#ifdef RANDOM
|
||||||
|
"pseudo random numbers generated by random()",
|
||||||
|
#else
|
||||||
|
"pseudo random numbers generated by C rand()",
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#ifdef SELECTSAVED
|
#ifdef SELECTSAVED
|
||||||
"restore saved games via menu",
|
"restore saved games via menu",
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -543,7 +543,7 @@ curses_choose_character()
|
|||||||
sel = pick_role(flags.initrace, flags.initgend,
|
sel = pick_role(flags.initrace, flags.initgend,
|
||||||
flags.initalign, PICK_RANDOM);
|
flags.initalign, PICK_RANDOM);
|
||||||
if (sel < 0)
|
if (sel < 0)
|
||||||
sel = randrole();
|
sel = randrole(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
flags.initrole = sel;
|
flags.initrole = sel;
|
||||||
|
|||||||
+2
-2
@@ -234,7 +234,7 @@ Gem_player_selection()
|
|||||||
if (flags.initrole < 0) {
|
if (flags.initrole < 0) {
|
||||||
mar_add_message("Incompatible role!");
|
mar_add_message("Incompatible role!");
|
||||||
mar_display_nhwindow(WIN_MESSAGE);
|
mar_display_nhwindow(WIN_MESSAGE);
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Prompt for a role */
|
/* Prompt for a role */
|
||||||
@@ -256,7 +256,7 @@ Gem_player_selection()
|
|||||||
any.a_int = pick_role(flags.initrace, flags.initgend,
|
any.a_int = pick_role(flags.initrace, flags.initgend,
|
||||||
flags.initalign, PICK_RANDOM) + 1;
|
flags.initalign, PICK_RANDOM) + 1;
|
||||||
if (any.a_int == 0) /* must be non-zero */
|
if (any.a_int == 0) /* must be non-zero */
|
||||||
any.a_int = randrole() + 1;
|
any.a_int = randrole(FALSE) + 1;
|
||||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||||
MENU_UNSELECTED);
|
MENU_UNSELECTED);
|
||||||
any.a_int = i + 1; /* must be non-zero */
|
any.a_int = i + 1; /* must be non-zero */
|
||||||
|
|||||||
+1
-1
@@ -159,7 +159,7 @@ gnome_player_selection()
|
|||||||
sel = pick_role(flags.initrace, flags.initgend, flags.initalign,
|
sel = pick_role(flags.initrace, flags.initgend, flags.initalign,
|
||||||
PICK_RANDOM);
|
PICK_RANDOM);
|
||||||
if (sel < 0)
|
if (sel < 0)
|
||||||
sel = randrole();
|
sel = randrole(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
flags.initrole = sel;
|
flags.initrole = sel;
|
||||||
|
|||||||
+2
-2
@@ -510,7 +510,7 @@ tty_player_selection()
|
|||||||
k = pick_role(RACE, GEND, ALGN, PICK_RANDOM);
|
k = pick_role(RACE, GEND, ALGN, PICK_RANDOM);
|
||||||
if (k < 0) {
|
if (k < 0) {
|
||||||
tty_putstr(BASE_WINDOW, 0, "Incompatible role!");
|
tty_putstr(BASE_WINDOW, 0, "Incompatible role!");
|
||||||
k = randrole();
|
k = randrole(FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Prompt for a role */
|
/* Prompt for a role */
|
||||||
@@ -572,7 +572,7 @@ tty_player_selection()
|
|||||||
} else if (choice == ROLE_RANDOM) {
|
} else if (choice == ROLE_RANDOM) {
|
||||||
k = pick_role(RACE, GEND, ALGN, PICK_RANDOM);
|
k = pick_role(RACE, GEND, ALGN, PICK_RANDOM);
|
||||||
if (k < 0)
|
if (k < 0)
|
||||||
k = randrole();
|
k = randrole(FALSE);
|
||||||
} else {
|
} else {
|
||||||
k = choice - 1;
|
k = choice - 1;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -271,7 +271,7 @@ mswin_player_selection(void)
|
|||||||
flags.initalign, PICK_RANDOM);
|
flags.initalign, PICK_RANDOM);
|
||||||
if (flags.initrole < 0) {
|
if (flags.initrole < 0) {
|
||||||
raw_print("Incompatible role!");
|
raw_print("Incompatible role!");
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,7 +395,7 @@ prompt_for_player_selection(void)
|
|||||||
flags.initalign, PICK_RANDOM);
|
flags.initalign, PICK_RANDOM);
|
||||||
if (flags.initrole < 0) {
|
if (flags.initrole < 0) {
|
||||||
/* tty_putstr(BASE_WINDOW, 0, "Incompatible role!"); */
|
/* tty_putstr(BASE_WINDOW, 0, "Incompatible role!"); */
|
||||||
flags.initrole = randrole();
|
flags.initrole = randrole(FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* tty_clear_nhwindow(BASE_WINDOW); */
|
/* tty_clear_nhwindow(BASE_WINDOW); */
|
||||||
@@ -433,7 +433,7 @@ prompt_for_player_selection(void)
|
|||||||
any.a_int = pick_role(flags.initrace, flags.initgend,
|
any.a_int = pick_role(flags.initrace, flags.initgend,
|
||||||
flags.initalign, PICK_RANDOM) + 1;
|
flags.initalign, PICK_RANDOM) + 1;
|
||||||
if (any.a_int == 0) /* must be non-zero */
|
if (any.a_int == 0) /* must be non-zero */
|
||||||
any.a_int = randrole() + 1;
|
any.a_int = randrole(FALSE) + 1;
|
||||||
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
add_menu(win, NO_GLYPH, &any, '*', 0, ATR_NONE, "Random",
|
||||||
MENU_UNSELECTED);
|
MENU_UNSELECTED);
|
||||||
any.a_int = i + 1; /* must be non-zero */
|
any.a_int = i + 1; /* must be non-zero */
|
||||||
|
|||||||
Reference in New Issue
Block a user