fixed bug with player moving when releasing one of several pressed snap keys
[rocksndiamonds.git] / src / screens.c
index bf8ca0ef9d3dc6e6ef228183bfcaf5e32e74ac7b..c8324210de2648e2cec37e8865946783b2148b0b 100644 (file)
@@ -1745,10 +1745,10 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
                                    "No title screen for this level set.");
        return;
       }
-
-      FadeMenuSoundsAndMusic();
     }
 
+    FadeMenuSoundsAndMusic();
+
     FadeOut(REDRAW_ALL);
 
     // title screens may have different window size
@@ -2035,9 +2035,23 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 
       if (pos == MAIN_CONTROL_NAME)
       {
-       SetGameStatus(GAME_MODE_PSEUDO_TYPENAME);
+       if ((mx || my) &&
+           insideTextPosRect(main_controls[i].pos_text, mx - mSX, my - mSY))
+       {
+         // special case: menu text "name/team" clicked -- toggle team mode
+         setup.team_mode = !setup.team_mode;
+
+         InitializeMainControls();
+         DrawCursorAndText_Main(choice, TRUE, FALSE);
 
-       HandleTypeName(strlen(setup.player_name), 0);
+         DrawPreviewPlayers();
+       }
+       else
+       {
+         SetGameStatus(GAME_MODE_PSEUDO_TYPENAME);
+
+         HandleTypeName(strlen(setup.player_name), 0);
+       }
       }
       else if (pos == MAIN_CONTROL_LEVELS)
       {
@@ -8891,3 +8905,71 @@ boolean DoScreenAction(int image_id)
 
   return FALSE;
 }
+
+void DrawScreenAfterAddingSet(char *tree_subdir_new, int tree_type)
+{
+  // get tree info node of newly added level or artwork set
+  TreeInfo *tree_node_first = TREE_FIRST_NODE(tree_type);
+  TreeInfo *tree_node_new = getTreeInfoFromIdentifier(tree_node_first,
+                                                     tree_subdir_new);
+  if (tree_node_new == NULL)   // should not happen
+    return;
+
+  // if request dialog is active, do nothing
+  if (game.request_active)
+    return;
+
+  if (game_status == GAME_MODE_MAIN &&
+      tree_type == TREE_TYPE_LEVEL_DIR)
+  {
+    // when adding new level set in main menu, select it as current level set
+
+    // change current level set to newly added level set from zip file
+    leveldir_current = tree_node_new;
+
+    // change current level number to first level of newly added level set
+    level_nr = leveldir_current->first_level;
+
+    // redraw screen to reflect changed level set
+    DrawMainMenu();
+
+    // save this level set and level number as last selected level set
+    SaveLevelSetup_LastSeries();
+    SaveLevelSetup_SeriesInfo();
+  }
+  else if (game_status == GAME_MODE_LEVELS &&
+          tree_type == TREE_TYPE_LEVEL_DIR)
+  {
+    // when adding new level set in level set menu, set cursor and update screen
+
+    leveldir_current = tree_node_new;
+
+    DrawChooseTree(&leveldir_current);
+  }
+  else if (game_status == GAME_MODE_SETUP)
+  {
+    // when adding new artwork set in setup menu, set cursor and update screen
+
+    if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS &&
+       tree_type == TREE_TYPE_GRAPHICS_DIR)
+    {
+      artwork.gfx_current = tree_node_new;
+
+      DrawChooseTree(&artwork.gfx_current);
+    }
+    else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS &&
+            tree_type == TREE_TYPE_SOUNDS_DIR)
+    {
+      artwork.snd_current = tree_node_new;
+
+      DrawChooseTree(&artwork.snd_current);
+    }
+    else if (setup_mode == SETUP_MODE_CHOOSE_MUSIC &&
+            tree_type == TREE_TYPE_MUSIC_DIR)
+    {
+      artwork.mus_current = tree_node_new;
+
+      DrawChooseTree(&artwork.mus_current);
+    }
+  }
+}