(from <Someone>)

- added support for iflags.randomall (-@)
- echo yn_function selection to the message window (as From a bug report
This commit is contained in:
nethack.allison
2002-03-06 02:56:46 +00:00
parent bc99fd14a6
commit 3e582e40da
4 changed files with 79 additions and 14 deletions

View File

@@ -25,6 +25,7 @@ typedef struct mswin_nhmsg_add_wnd {
typedef struct mswin_nhmsg_putstr {
int attr;
const char* text;
boolean append;
} MSNHMsgPutstr, *PMSNHMsgPutstr;
typedef struct mswin_nhmsg_print_glyph {

View File

@@ -199,19 +199,24 @@ void onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
SCROLLINFO si;
char* p;
/* check if the string is empty */
for(p = data->window_text[MSG_LINES-1].text; *p && isspace(*p); p++);
if( msg_data->append ) {
strncat(data->window_text[MSG_LINES-1].text, msg_data->text,
MAXWINDOWTEXT - strlen(data->window_text[MSG_LINES-1].text));
} else {
/* check if the string is empty */
for(p = data->window_text[MSG_LINES-1].text; *p && isspace(*p); p++);
if( *p ) {
/* last string is not empty - scroll up */
memmove(&data->window_text[0],
&data->window_text[1],
(MSG_LINES-1)*sizeof(data->window_text[0]));
if( *p ) {
/* last string is not empty - scroll up */
memmove(&data->window_text[0],
&data->window_text[1],
(MSG_LINES-1)*sizeof(data->window_text[0]));
}
/* append new text to the end of the array */
data->window_text[MSG_LINES-1].attr = msg_data->attr;
strncpy(data->window_text[MSG_LINES-1].text, msg_data->text, MAXWINDOWTEXT);
}
/* append new text to the end of the array */
data->window_text[MSG_LINES-1].attr = msg_data->attr;
strncpy(data->window_text[MSG_LINES-1].text, msg_data->text, MAXWINDOWTEXT);
/* reset V-scroll position to display new text */
data->yPos = data->yMax;

View File

@@ -193,9 +193,50 @@ void mswin_player_selection(void)
logDebug("mswin_player_selection()\n");
/* select a role */
if( mswin_player_selection_window( &nRole ) == IDCANCEL ) {
bail(0);
/* pick player type randomly (use pre-selected role/race/gender/alignment) */
if( flags.randomall ) {
if (flags.initrole < 0) {
flags.initrole = pick_role(flags.initrace, flags.initgend,
flags.initalign, PICK_RANDOM);
if (flags.initrole < 0) {
raw_print("Incompatible role!");
flags.initrole = randrole();
}
}
if (flags.initrace < 0 || !validrace(flags.initrole, flags.initrace)) {
flags.initrace = pick_race(flags.initrole, flags.initgend,
flags.initalign, PICK_RANDOM);
if (flags.initrace < 0) {
raw_print("Incompatible race!");
flags.initrace = randrace(flags.initrole);
}
}
if (flags.initgend < 0 || !validgend(flags.initrole, flags.initrace,
flags.initgend)) {
flags.initgend = pick_gend(flags.initrole, flags.initrace,
flags.initalign, PICK_RANDOM);
if (flags.initgend < 0) {
raw_print("Incompatible gender!");
flags.initgend = randgend(flags.initrole, flags.initrace);
}
}
if (flags.initalign < 0 || !validalign(flags.initrole, flags.initrace,
flags.initalign)) {
flags.initalign = pick_align(flags.initrole, flags.initrace,
flags.initgend, PICK_RANDOM);
if (flags.initalign < 0) {
raw_print("Incompatible alignment!");
flags.initalign = randalign(flags.initrole, flags.initrace);
}
}
} else {
/* select a role */
if( mswin_player_selection_window( &nRole ) == IDCANCEL ) {
bail(0);
}
}
}
@@ -485,7 +526,12 @@ Attributes
void mswin_putstr(winid wid, int attr, const char *text)
{
logDebug("mswin_putstr(%d, %d, %s)\n", wid, attr, text);
mswin_putstr_ex(wid, attr, text, 0);
}
void mswin_putstr_ex(winid wid, int attr, const char *text, boolean app)
{
if( (wid >= 0) &&
(wid < MAXWINDOWS) )
{
@@ -498,8 +544,10 @@ void mswin_putstr(winid wid, int attr, const char *text)
if (GetNHApp()->windowlist[wid].win != NULL)
{
MSNHMsgPutstr data;
ZeroMemory(&data, sizeof(data));
data.attr = attr;
data.text = text;
data.append = app;
SendMessage(
GetNHApp()->windowlist[wid].win,
WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_PUTSTR, (LPARAM)&data );
@@ -918,6 +966,7 @@ char mswin_yn_function(const char *question, const char *choices,
char ch;
char yn_esc_map='\033';
char message[BUFSZ];
char res_ch[2];
logDebug("mswin_yn_function(%s, %s, %d)\n", question, choices, def);
@@ -951,6 +1000,7 @@ char mswin_yn_function(const char *question, const char *choices,
(index(choices, 'n') ? 'n' : def));
} else {
Strcpy(message, question);
Strcat(message, " ");
}
mswin_putstr(WIN_MESSAGE, ATR_BOLD, message);
@@ -972,6 +1022,14 @@ char mswin_yn_function(const char *question, const char *choices,
result=ch;
}
}
/* display selection in the message window */
if( isprint(ch) ) {
res_ch[0] = ch;
res_ch[1] = '\x0';
mswin_putstr_ex(WIN_MESSAGE, ATR_BOLD, res_ch, 1);
}
return result;
}

View File

@@ -85,6 +85,7 @@ void mswin_display_nhwindow(winid wid, BOOLEAN_P block);
void mswin_destroy_nhwindow(winid wid);
void mswin_curs(winid wid, int x, int y);
void mswin_putstr(winid wid, int attr, const char *text);
void mswin_putstr_ex(winid wid, int attr, const char *text, boolean append);
void mswin_display_file(const char *filename,BOOLEAN_P must_exist);
void mswin_start_menu(winid wid);
void mswin_add_menu(winid wid, int glyph, const ANY_P * identifier,