]> granicus.if.org Git - nethack/commitdiff
win32gui: prevent male valkyrie (from <Someone>)
authornethack.allison <nethack.allison>
Mon, 26 May 2003 09:58:15 +0000 (09:58 +0000)
committernethack.allison <nethack.allison>
Mon, 26 May 2003 09:58:15 +0000 (09:58 +0000)
>Steps to reproduce problem:
>1) make sure you don't have race, role, gender specified in your
>   defaults.h, then add
>   OPTIONS=role:Valkyrie,race:Human,gender:male,align:lawful
>2) start a new nethackw.exe game
>3) Uncheck "Random" from gender box, now you can select from male
>   or female, not only female.
>4) Select male and click OK.
>5) When game begins press shift+O (Options) and look to gender.
>   Your valkyrie is male.

defaults.nh values were not used the dialog initialization. That's
why both male/female options were available for Valkyries. This is
now fixed.

Also added: checking for consistency of the initial settings and
resetting all incompatible values to ROLE_NONE.

doc/fixes34.2
win/win32/mhdlg.c

index f39c0886dfe16199ac0ce9826783e69b6362dc51..babc5698010ccccaebd97e91ebc328254bf6c51b 100644 (file)
@@ -90,6 +90,7 @@ unix: Makefile.utl would put OBJDIR objects in the wrong directory
 vms: create an empty paniclog file during playground installation
 win32tty: add subkeyvalue option to alter key values; Finnish keyboard fix
 win32tty: distinguish between black/gray/white (by Quietust)
+win32gui: prevent male Valkyrie and other incorrect startup settings
 tiles: high priest tile had a couple bad pixels
 tiles: bad pixels in Croesus and Yeenoghu tiles
 FreeBSD: incorrect srandom declaration
index e3defb4f34e0a98276ae605319a5a890c8d71fb7..4cd1110c32de2ecd5511ed0ae4283686b3da1532 100644 (file)
@@ -446,6 +446,22 @@ void plselInitDialog(HWND hWnd)
        /* set player name */
        SetDlgItemText(hWnd, IDC_PLSEL_NAME, NH_A2W(plname, wbuf, sizeof(wbuf)));
 
+       /* check flags for consistency */
+       if( flags.initrole>=0 ) {
+               if (flags.initrace>=0 && !validrace(flags.initrole, flags.initrace)) {
+                       flags.initrace = ROLE_NONE;
+               }
+
+               if (flags.initgend>=0 && !validgend(flags.initrole, flags.initrace, flags.initgend)) {
+                       flags.initgend = ROLE_NONE;
+               }
+
+               if (flags.initalign>=0 && !validalign(flags.initrole, flags.initrace, flags.initalign)) {
+                       flags.initalign = ROLE_NONE;
+               }
+       }
+
+       /* populate select boxes */
        plselAdjustLists(hWnd, -1);
 
        /* intialize roles list */
@@ -511,16 +527,16 @@ void  plselAdjustLists(HWND hWnd, int changed_sel)
 
        /* get current selections */    
        ind = SendMessage(control_role, CB_GETCURSEL, 0, 0);
-       initrole = (ind==LB_ERR)? ROLE_NONE : SendMessage(control_role, CB_GETITEMDATA, ind, 0);
+       initrole = (ind==LB_ERR)? flags.initrole : SendMessage(control_role, CB_GETITEMDATA, ind, 0);
 
        ind = SendMessage(control_race, CB_GETCURSEL, 0, 0);
-       initrace = (ind==LB_ERR)? ROLE_NONE : SendMessage(control_race, CB_GETITEMDATA, ind, 0);
+       initrace = (ind==LB_ERR)? flags.initrace : SendMessage(control_race, CB_GETITEMDATA, ind, 0);
 
        ind = SendMessage(control_gender, CB_GETCURSEL, 0, 0);
-       initgend = (ind==LB_ERR)? ROLE_NONE : SendMessage(control_gender, CB_GETITEMDATA, ind, 0);
+       initgend = (ind==LB_ERR)? flags.initgend : SendMessage(control_gender, CB_GETITEMDATA, ind, 0);
 
        ind = SendMessage(control_align, CB_GETCURSEL, 0, 0);
-       initalign = (ind==LB_ERR)? ROLE_NONE : SendMessage(control_align, CB_GETITEMDATA, ind, 0);
+       initalign = (ind==LB_ERR)? flags.initalign : SendMessage(control_align, CB_GETITEMDATA, ind, 0);
 
        /* intialize roles list */
        if( changed_sel==-1 ) {
@@ -598,6 +614,7 @@ void  plselAdjustLists(HWND hWnd, int changed_sel)
                                SendMessage(control_gender, CB_SETITEMDATA, (WPARAM)ind, (LPARAM)i ); 
                                if( i==initgend ) { 
                                        SendMessage(control_gender, CB_SETCURSEL, (WPARAM)ind, (LPARAM)0 );
+                                       valid_opt = 1;
                                }
                        }