]> granicus.if.org Git - nethack/commitdiff
(from <Someone>)
authornethack.allison <nethack.allison>
Wed, 6 Mar 2002 02:56:46 +0000 (02:56 +0000)
committernethack.allison <nethack.allison>
Wed, 6 Mar 2002 02:56:46 +0000 (02:56 +0000)
- added support for iflags.randomall (-@)
- echo yn_function selection to the message window (as From a bug report

win/win32/mhmsg.h
win/win32/mhmsgwnd.c
win/win32/mswproc.c
win/win32/winMS.h

index e626b14dab7dd358930d7b0bc7ee86b0eb7f7939..1d08b89de2a6335f162727d5158f86bdef09486a 100644 (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 {
index 5696c790dddc1f57a782a3907ec7e2ea3284451a..b09c4aa807798c81732ec2cfbeb69b6fd88ba6f3 100644 (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( *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( 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]));
+                       }
 
-               /* 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;
index f1f230e2928086776882dd39f7350127e3521f97..1b58e3248025c048e9aa7d7dd683b0895e70ffd3 100644 (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;
 }
 
index 48366dae3dd9cad38a7cfe445325d213b9d3c7e3..abbde807a35c68a6b1cb3221d962ed1dc64566a2 100644 (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,