Subversion Repositories Games.Chess Giants

Rev

Rev 119 | Rev 130 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 119 Rev 124
Line 41... Line 41...
41
   int index_line;
41
   int index_line;
42
   int index_column;
42
   int index_column;
43
   int part_index;
43
   int part_index;
44
   int part_color;
44
   int part_color;
45
   int viewer_index;
45
   int viewer_index;
-
 
46
   RECT rect;
46
 
47
 
47
   // filter out the commonly used message values
48
   // filter out the commonly used message values
48
   wParam_hiword = HIWORD (wParam);
49
   wParam_hiword = HIWORD (wParam);
49
   wParam_loword = LOWORD (wParam);
50
   wParam_loword = LOWORD (wParam);
-
 
51
 
-
 
52
   // get current and opposite players and see if we're online
-
 
53
   current_player = Player_GetCurrent ();
-
 
54
   opposite_player = Player_GetOpposite ();
-
 
55
   remote_player = Player_FindByType (PLAYER_INTERNET);
50
 
56
 
51
   ////////////////////////////////////////////////////////////////////////////////////////////////
57
   ////////////////////////////////////////////////////////////////////////////////////////////////
52
   // has the window just been fired up ?
58
   // has the window just been fired up ?
53
   if (message == WM_CREATE)
59
   if (message == WM_CREATE)
54
   {
60
   {
55
      the_scene.gui.is_entering_text = false; // we are NOT entering text yet
61
      the_scene.gui.is_entering_text = false; // we are NOT entering text yet
56
 
62
 
57
      // call the default window message processing function to keep things going
63
      // call the default window message processing function to keep things going
58
      return (DefWindowProc (hWnd, message, wParam, lParam));
64
      return (DefWindowProc (hWnd, message, wParam, lParam));
-
 
65
   }
-
 
66
 
-
 
67
   ////////////////////////////////////////////////////////////////////////////////////////////////
-
 
68
   // else is the window being resized ?
-
 
69
   else if ((message == WM_SIZE) || (message == WM_WINDOWPOSCHANGED))
-
 
70
   {
-
 
71
      GetWindowRect (hMainWnd, &rect); // grab the current window size and update the options accordingly
-
 
72
      options.want_maximized = (rect.right - rect.left > GetSystemMetrics (SM_CXMAXIMIZED) * 90 / 100) && (rect.bottom - rect.top > GetSystemMetrics (SM_CYMAXIMIZED) * 80 / 100);
-
 
73
      if (!options.want_maximized)
-
 
74
      {
-
 
75
         options.window_width = max (rect.right - rect.left, 640); // min window width
-
 
76
         options.window_height = max (rect.bottom - rect.top, 480); // min window height (only save them when the window is not maximized)
-
 
77
      }
-
 
78
 
-
 
79
      return (0); // don't let Windows do the default processing on this message
59
   }
80
   }
60
 
81
 
61
   ////////////////////////////////////////////////////////////////////////////////////////////////
82
   ////////////////////////////////////////////////////////////////////////////////////////////////
62
   // else have we clicked on the close button ?
83
   // else have we clicked on the close button ?
63
   else if (message == WM_CLOSE)
84
   else if (message == WM_CLOSE)
64
   {
85
   {
65
      if ((the_board.game_state == STATE_PLAYING) && ((the_board.move_count > 1) || (Player_FindByType (PLAYER_INTERNET) != NULL)))
86
      if ((the_board.game_state == STATE_PLAYING) && ((the_board.move_count > 1) || (remote_player != NULL)))
66
         DialogBox_Quit (); // if a game has started OR if we are online against somebody, ask for confirmation
87
         DialogBox_Quit (); // if a game has started OR if we are online against somebody, ask for confirmation
67
      else
88
      else
68
         is_dialogbox_quit_validated = true; // if game hasn't started yet, quit without question
89
         is_dialogbox_quit_validated = true; // if game hasn't started yet, quit without question
69
 
90
 
70
      return (0); // don't let Windows do the default processing on this message
91
      return (0); // don't let Windows do the default processing on this message
Line 81... Line 102...
81
 
102
 
82
   ///////////////
103
   ///////////////
83
   // menu command
104
   // menu command
84
   else if (message == WM_COMMAND)
105
   else if (message == WM_COMMAND)
85
   {
106
   {
-
 
107
      // ANY menu choice makes the "new game" / "open game" front GUI button disappear
-
 
108
      GUIBUTTON_DISABLE (the_scene.gui.newgamebutton);
-
 
109
      GUIBUTTON_DISABLE (the_scene.gui.opengamebutton);
-
 
110
 
86
      // game menu, new game
111
      // game menu, new game
87
      if (wParam_loword == MENUID_GAME_NEWGAME)
112
      if (wParam_loword == MENUID_GAME_NEWGAME)
88
      {
113
      {
89
         if ((the_board.game_state == STATE_PLAYING) && (the_board.move_count > 1))
114
         if ((the_board.game_state == STATE_PLAYING) && (the_board.move_count > 1))
90
            DialogBox_Resign (); // if a game is playing, ask to resign first
115
            DialogBox_Resign (); // if a game is playing, ask to resign first
Line 159... Line 184...
159
         DialogBox_Options (); // fire up the options dialog box
184
         DialogBox_Options (); // fire up the options dialog box
160
 
185
 
161
      // game menu, quit
186
      // game menu, quit
162
      else if (wParam_loword == MENUID_GAME_QUIT)
187
      else if (wParam_loword == MENUID_GAME_QUIT)
163
      {
188
      {
164
         if ((the_board.game_state == STATE_PLAYING) && ((the_board.move_count > 1) || (Player_FindByType (PLAYER_INTERNET) != NULL)))
189
         if ((the_board.game_state == STATE_PLAYING) && ((the_board.move_count > 1) || (remote_player != NULL)))
165
            DialogBox_Quit (); // if a game has started OR if we are online against somebody, ask for confirmation
190
            DialogBox_Quit (); // if a game has started OR if we are online against somebody, ask for confirmation
166
         else
191
         else
167
            is_dialogbox_quit_validated = true; // if game hasn't started yet, quit without question
192
            is_dialogbox_quit_validated = true; // if game hasn't started yet, quit without question
168
      }
193
      }
169
 
194
 
Line 400... Line 425...
400
   else if (message == WM_LBUTTONDOWN)
425
   else if (message == WM_LBUTTONDOWN)
401
   {
426
   {
402
      // are we in animation OR are mouse commands NOT allowed ?
427
      // are we in animation OR are mouse commands NOT allowed ?
403
      if ((animation_endtime + 1.0f >= current_time) || (command_ignoretime >= current_time))
428
      if ((animation_endtime + 1.0f >= current_time) || (command_ignoretime >= current_time))
404
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default message proc to keep things going
429
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default message proc to keep things going
-
 
430
 
-
 
431
      // are we in board closeup mode OR are we online AND do we NOT have the right to select anything ?
-
 
432
      if (((current_distance == CLOSEUP_VIEW_DISTANCE) && (current_pitch == CLOSEUP_VIEW_PITCH))
-
 
433
          || ((remote_player != NULL) && !remote_player->is_in_game))
-
 
434
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default window message processing function to keep things going
405
 
435
 
406
      // is the ctrl key pressed (emulates a right click) ?
436
      // is the ctrl key pressed (emulates a right click) ?
407
      if (ctrl_pressed)
437
      if (ctrl_pressed)
408
      {
438
      {
409
         prevgui_x = GET_X_LPARAM (lParam); // remember mouse coordinates
439
         prevgui_x = GET_X_LPARAM (lParam); // remember mouse coordinates
Line 451... Line 481...
451
 
481
 
452
      // get mouse coordinates
482
      // get mouse coordinates
453
      gui_x = GET_X_LPARAM (lParam);
483
      gui_x = GET_X_LPARAM (lParam);
454
      gui_y = GET_Y_LPARAM (lParam);
484
      gui_y = GET_Y_LPARAM (lParam);
455
 
485
 
456
      // is the left arrow displayed AND is the mouse hovering it ?
486
      // is the "new game" button displayed AND is the mouse hovering it ?
457
      if ((the_scene.gui.larrow.state != 0) && Button_IsHovered (&the_scene.gui.larrow, gui_x, gui_y))
487
      if ((the_scene.gui.newgamebutton.state != 0) && Button_IsHovered (&the_scene.gui.newgamebutton, gui_x, gui_y))
-
 
488
      {
-
 
489
         GUIBUTTON_DISABLE (the_scene.gui.newgamebutton); // hide the "new game" button
458
         SendMessage (hWnd, WM_COMMAND, MENUID_CHESSBOARD_PREVIOUSMOVE, NULL); // send a "previous move" event
490
         GUIBUTTON_DISABLE (the_scene.gui.opengamebutton); // hide the "open game" button
-
 
491
         DialogBox_NewGame (); // fire up the "new game" dialog box
-
 
492
      }
459
 
493
 
460
      // is the right arrow displayed AND is the mouse hovering it ?
494
      // is the "open game" button displayed AND is the mouse hovering it ?
461
      if ((the_scene.gui.rarrow.state != 0) && Button_IsHovered (&the_scene.gui.rarrow, gui_x, gui_y))
495
      if ((the_scene.gui.opengamebutton.state != 0) && Button_IsHovered (&the_scene.gui.opengamebutton, gui_x, gui_y))
-
 
496
      {
462
         SendMessage (hWnd, WM_COMMAND, MENUID_CHESSBOARD_NEXTMOVE, NULL); // send a "next move" event
497
         GUIBUTTON_DISABLE (the_scene.gui.newgamebutton); // hide the "new game" button
-
 
498
         GUIBUTTON_DISABLE (the_scene.gui.opengamebutton); // hide the "open game" button
-
 
499
         DialogBox_Load (); // fire up the "open game" dialog box
-
 
500
      }
463
 
501
 
464
      // is the chat button displayed AND is the mouse hovering it ?
502
      // is the chat button displayed AND is the mouse hovering it ?
465
      if ((the_scene.gui.chatbutton.state != 0) && Button_IsHovered (&the_scene.gui.chatbutton, gui_x, gui_y))
503
      if ((the_scene.gui.chatbutton.state != 0) && Button_IsHovered (&the_scene.gui.chatbutton, gui_x, gui_y))
466
      {
504
      {
467
         opposite_player = Player_FindByType (PLAYER_INTERNET); // get a hand on the remote player
-
 
468
 
-
 
469
         // find or create the corresponding interlocutor structure and fire it up
505
         // find or create the corresponding interlocutor structure and fire it up
470
         if (opposite_player != NULL)
506
         if (remote_player != NULL)
471
            Interlocutor_FindOrCreate (opposite_player->name);
507
            Interlocutor_FindOrCreate (remote_player->name);
472
      }
508
      }
473
 
509
 
474
      // is the games button displayed AND is the mouse hovering it ?
510
      // is the games button displayed AND is the mouse hovering it ?
475
      if ((the_scene.gui.gamesbutton.state != 0) && Button_IsHovered (&the_scene.gui.gamesbutton, gui_x, gui_y))
511
      if ((the_scene.gui.gamesbutton.state != 0) && Button_IsHovered (&the_scene.gui.gamesbutton, gui_x, gui_y))
476
         Window_Sought (); // if so, display the sought games window
512
         Window_Sought (); // if so, display the sought games window
477
 
513
 
478
      // is the people button displayed AND is the mouse hovering it ?
514
      // is the people button displayed AND is the mouse hovering it ?
479
      if ((the_scene.gui.peoplebutton.state != 0) && Button_IsHovered (&the_scene.gui.peoplebutton, gui_x, gui_y))
515
      if ((the_scene.gui.peoplebutton.state != 0) && Button_IsHovered (&the_scene.gui.peoplebutton, gui_x, gui_y))
480
         Window_Opponents (); // if so, display the opponents window
516
         Window_Opponents (); // if so, display the opponents window
-
 
517
 
-
 
518
      // are we in board closeup mode OR are we online AND do we NOT have the right to select anything ?
-
 
519
      if (((current_distance == CLOSEUP_VIEW_DISTANCE) && (current_pitch == CLOSEUP_VIEW_PITCH))
-
 
520
          || ((remote_player != NULL) && !remote_player->is_in_game))
-
 
521
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default window message processing function to keep things going
-
 
522
 
-
 
523
      // is the left arrow displayed AND is the mouse hovering it ?
-
 
524
      if ((the_scene.gui.larrow.state != 0) && Button_IsHovered (&the_scene.gui.larrow, gui_x, gui_y))
-
 
525
         SendMessage (hWnd, WM_COMMAND, MENUID_CHESSBOARD_PREVIOUSMOVE, NULL); // send a "previous move" event
-
 
526
 
-
 
527
      // is the right arrow displayed AND is the mouse hovering it ?
-
 
528
      if ((the_scene.gui.rarrow.state != 0) && Button_IsHovered (&the_scene.gui.rarrow, gui_x, gui_y))
-
 
529
         SendMessage (hWnd, WM_COMMAND, MENUID_CHESSBOARD_NEXTMOVE, NULL); // send a "next move" event
481
 
530
 
482
      // is the parts selection line displayed AND is the mouse anywhere near it ?
531
      // is the parts selection line displayed AND is the mouse anywhere near it ?
483
      if (the_scene.gui.is_partspick_displayed && Render_IsMouseInBox (gui_x, gui_y, 0.0f, 0.0f, 100.0f, 11.0f))
532
      if (the_scene.gui.is_partspick_displayed && Render_IsMouseInBox (gui_x, gui_y, 0.0f, 0.0f, 100.0f, 11.0f))
484
      {
533
      {
485
         // for each selectable part, if the mouse is on it, mark it as selected
534
         // for each selectable part, if the mouse is on it, mark it as selected
Line 489... Line 538...
489
               the_scene.gui.partspick_selectedpart = selectable_parts[part_index]; // mark it as selected
538
               the_scene.gui.partspick_selectedpart = selectable_parts[part_index]; // mark it as selected
490
               Audio_PlaySound (SOUNDTYPE_CLICK, 0.0f, 0.0f, 0.04f); // make a click sound at the center of the board
539
               Audio_PlaySound (SOUNDTYPE_CLICK, 0.0f, 0.0f, 0.04f); // make a click sound at the center of the board
491
               break; // no need to search further if one selection was found
540
               break; // no need to search further if one selection was found
492
            }
541
            }
493
      }
542
      }
494
 
-
 
495
      // get current player and see if we're online
-
 
496
      current_player = Player_GetCurrent ();
-
 
497
      remote_player = Player_FindByType (PLAYER_INTERNET);
-
 
498
 
543
 
499
      // if we are not allowed to select anything, don't even try
544
      // if we are not allowed to select anything, don't even try
500
      if (is_paused || (current_player->type != PLAYER_HUMAN) || (the_board.viewed_move != the_board.move_count - 1)
545
      if (is_paused || (current_player->type != PLAYER_HUMAN) || (the_board.viewed_move != the_board.move_count - 1)
501
          || ((remote_player != NULL) && !remote_player->is_in_game))
546
          || ((remote_player != NULL) && !remote_player->is_in_game))
502
      {
547
      {
Line 789... Line 834...
789
      gui_y = GET_Y_LPARAM (lParam);
834
      gui_y = GET_Y_LPARAM (lParam);
790
 
835
 
791
      // handle button update status
836
      // handle button update status
792
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.larrow, gui_x, gui_y);
837
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.larrow, gui_x, gui_y);
793
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.rarrow, gui_x, gui_y);
838
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.rarrow, gui_x, gui_y);
-
 
839
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.newgamebutton, gui_x, gui_y);
-
 
840
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.opengamebutton, gui_x, gui_y);
794
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.chatbutton, gui_x, gui_y);
841
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.chatbutton, gui_x, gui_y);
795
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.gamesbutton, gui_x, gui_y);
842
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.gamesbutton, gui_x, gui_y);
796
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.peoplebutton, gui_x, gui_y);
843
      the_scene.update |= Button_UpdateHoverState (&the_scene.gui.peoplebutton, gui_x, gui_y);
797
 
844
 
798
      // see if we're online
-
 
799
      remote_player = Player_FindByType (PLAYER_INTERNET);
845
      // are we in board closeup mode OR are we online AND do we NOT have the right to select anything ?
800
 
-
 
801
      // are we online AND do we NOT have the right to select anything ?
846
      if (((current_distance == CLOSEUP_VIEW_DISTANCE) && (current_pitch == CLOSEUP_VIEW_PITCH))
802
      if ((remote_player != NULL) && !remote_player->is_in_game)
847
          || ((remote_player != NULL) && !remote_player->is_in_game))
803
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default window message processing function to keep things going
848
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default window message processing function to keep things going
804
 
849
 
805
      // is the parts selection line displayed AND is the mouse anywhere in it ?
850
      // is the parts selection line displayed AND is the mouse anywhere in it ?
806
      if (the_scene.gui.is_partspick_displayed && Render_IsMouseInBox (gui_x, gui_y, 0.0f, 0.0f, 100.0f, 11.0f))
851
      if (the_scene.gui.is_partspick_displayed && Render_IsMouseInBox (gui_x, gui_y, 0.0f, 0.0f, 100.0f, 11.0f))
807
      {
852
      {
Line 827... Line 872...
827
            }
872
            }
828
         }
873
         }
829
      }
874
      }
830
      else
875
      else
831
         the_scene.gui.partspick_hoveredpart = 0; // clear the hovered part
876
         the_scene.gui.partspick_hoveredpart = 0; // clear the hovered part
832
 
-
 
833
      // get current and opposite players
-
 
834
      current_player = Player_GetCurrent ();
-
 
835
      opposite_player = Player_GetOpposite ();
-
 
836
 
877
 
837
      // if right button was clicked, compute new pitch and yaw
878
      // if right button was clicked, compute new pitch and yaw
838
      if (rbutton_pushed)
879
      if (rbutton_pushed)
839
      {
880
      {
840
         // cycle through both players and change their view angles EXCEPT the opponent if he's human
881
         // cycle through both players and change their view angles EXCEPT the opponent if he's human
Line 842... Line 883...
842
            if ((the_board.players[viewer_index].type == PLAYER_COMPUTER)
883
            if ((the_board.players[viewer_index].type == PLAYER_COMPUTER)
843
                || (the_board.players[viewer_index].type == PLAYER_INTERNET)
884
                || (the_board.players[viewer_index].type == PLAYER_INTERNET)
844
                || (viewer_index == current_viewer))
885
                || (viewer_index == current_viewer))
845
            {
886
            {
846
               the_board.players[viewer_index].view_pitch += (gui_y - prevgui_y) * 0.3f;
887
               the_board.players[viewer_index].view_pitch += (gui_y - prevgui_y) * 0.3f;
847
               if (the_board.players[viewer_index].view_pitch < 10.0f)
888
               if (the_board.players[viewer_index].view_pitch < MIN_VIEW_PITCH)
848
                  the_board.players[viewer_index].view_pitch = 10.0f; // wrap angles around so that they
889
                  the_board.players[viewer_index].view_pitch = MIN_VIEW_PITCH; // wrap angles around so that they
849
               if (the_board.players[viewer_index].view_pitch > 89.99f)
890
               if (the_board.players[viewer_index].view_pitch > MAX_VIEW_PITCH)
850
                  the_board.players[viewer_index].view_pitch = 89.99f; // stay in the [10, 89.99] bounds
891
                  the_board.players[viewer_index].view_pitch = MAX_VIEW_PITCH; // stay in the min-max pitch bounds
851
 
892
 
852
               the_board.players[viewer_index].view_yaw += (gui_x - prevgui_x) * 0.3f;
893
               the_board.players[viewer_index].view_yaw += (gui_x - prevgui_x) * 0.3f;
853
               the_board.players[viewer_index].view_yaw = WrapAngle (the_board.players[viewer_index].view_yaw);
894
               the_board.players[viewer_index].view_yaw = WrapAngle (the_board.players[viewer_index].view_yaw);
854
 
895
 
855
               // save these as the new custom angles
896
               // save these as the new custom angles
Line 920... Line 961...
920
   {
961
   {
921
      // are we in animation OR are mouse commands NOT allowed ?
962
      // are we in animation OR are mouse commands NOT allowed ?
922
      if ((animation_endtime + 1.0f >= current_time) || (command_ignoretime >= current_time))
963
      if ((animation_endtime + 1.0f >= current_time) || (command_ignoretime >= current_time))
923
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default message proc to keep things going
964
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default message proc to keep things going
924
 
965
 
925
      // see if we're online
-
 
926
      remote_player = Player_FindByType (PLAYER_INTERNET);
966
      // are we in board closeup mode OR are we online AND do we NOT have the right to select anything ?
927
 
-
 
928
      // are we online AND do we NOT have the right to select anything ?
967
      if (((current_distance == CLOSEUP_VIEW_DISTANCE) && (current_pitch == CLOSEUP_VIEW_PITCH))
929
      if ((remote_player != NULL) && !remote_player->is_in_game)
968
          || ((remote_player != NULL) && !remote_player->is_in_game))
930
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default window message processing function to keep things going
969
         return (DefWindowProc (hWnd, message, wParam, lParam)); // if so, call the default window message processing function to keep things going
931
 
970
 
932
      // scroll up / scroll down ?
971
      // scroll up / scroll down ?
933
      if (GET_WHEEL_DELTA_WPARAM (wParam) > 0)
972
      if (GET_WHEEL_DELTA_WPARAM (wParam) > 0)
934
         the_board.players[current_viewer].view_distance = max (48.0f, the_board.players[current_viewer].view_distance - 2.0f);
973
         the_board.players[current_viewer].view_distance = max (MIN_VIEW_DISTANCE, the_board.players[current_viewer].view_distance - 2.0f);
935
      else if (GET_WHEEL_DELTA_WPARAM (wParam) < 0)
974
      else if (GET_WHEEL_DELTA_WPARAM (wParam) < 0)
936
         the_board.players[current_viewer].view_distance = min (100.0f, the_board.players[current_viewer].view_distance + 2.0f);
975
         the_board.players[current_viewer].view_distance = min (MAX_VIEW_DISTANCE, the_board.players[current_viewer].view_distance + 2.0f);
937
 
976
 
938
      // save this as the new custom distance
977
      // save this as the new custom distance
939
      the_board.players[current_viewer].custom_distance = the_board.players[current_viewer].view_distance;
978
      the_board.players[current_viewer].custom_distance = the_board.players[current_viewer].view_distance;
940
 
979
 
941
      // when moving the table around, jump to ideal angles immediately
980
      // when moving the table around, jump to ideal angles immediately
Line 956... Line 995...
956
      {
995
      {
957
         // is it the enter key ? if so, exit setup mode and start playing
996
         // is it the enter key ? if so, exit setup mode and start playing
958
         if (wParam == L'\r')
997
         if (wParam == L'\r')
959
         {
998
         {
960
            current_move = &the_board.moves[the_board.viewed_move]; // quick access to current move
999
            current_move = &the_board.moves[the_board.viewed_move]; // quick access to current move
-
 
1000
 
-
 
1001
            // make sure there is at least one king of each color (i.e. two kings)
-
 
1002
            part_index = 0;
-
 
1003
            for (line = 0; line < 8; line++)
-
 
1004
               for (column = 0; column < 8; column++)
-
 
1005
                  if (current_move->slots[line][column].part == PART_KING)
-
 
1006
                     part_index++; // there's one king more on this board
-
 
1007
            if (part_index != 2)
-
 
1008
               return (DefWindowProc (hWnd, message, wParam, lParam)); // when at least one king is missing, we just can't leave edition mode
961
 
1009
 
962
            // (in)validate the castling positions
1010
            // (in)validate the castling positions
963
            if ((current_move->slots[0][0].color == COLOR_WHITE) && (current_move->slots[0][0].part == PART_ROOK)
1011
            if ((current_move->slots[0][0].color == COLOR_WHITE) && (current_move->slots[0][0].part == PART_ROOK)
964
                && (current_move->slots[0][4].color == COLOR_WHITE) && (current_move->slots[0][4].part == PART_KING))
1012
                && (current_move->slots[0][4].color == COLOR_WHITE) && (current_move->slots[0][4].part == PART_KING))
965
               current_move->sides[COLOR_WHITE].longcastle_allowed = true; // white castling queenside allowed
1013
               current_move->sides[COLOR_WHITE].longcastle_allowed = true; // white castling queenside allowed
Line 998... Line 1046...
998
            return (DefWindowProc (hWnd, message, wParam, lParam));
1046
            return (DefWindowProc (hWnd, message, wParam, lParam));
999
         }
1047
         }
1000
      }
1048
      }
1001
 
1049
 
1002
      // else are we in internet mode ?
1050
      // else are we in internet mode ?
1003
      else if (Player_FindByType (PLAYER_INTERNET) != NULL)
1051
      else if (remote_player != NULL)
1004
      {
1052
      {
1005
         entered_ccreply = &the_scene.gui.entered_ccreply; // quick access to entered ccreply
1053
         entered_ccreply = &the_scene.gui.entered_ccreply; // quick access to entered ccreply
1006
         local_player = Player_FindByType (PLAYER_HUMAN); // quick access to local player
1054
         local_player = Player_FindByType (PLAYER_HUMAN); // quick access to local player
1007
         if (local_player == NULL)
1055
         if (local_player == NULL)
1008
            return (DefWindowProc (hWnd, message, wParam, lParam)); // theoretically impossible condition, but better be sure
1056
            return (DefWindowProc (hWnd, message, wParam, lParam)); // theoretically impossible condition, but better be sure