added setup option to show/hide classic elements in the editor palette
[rocksndiamonds.git] / src / game.c
index de245df51c6b571301d58eca00d70e43fce5135d..b543e6d2e14132d345e14aca528e069efdc98e54 100644 (file)
@@ -827,6 +827,14 @@ static struct GamePanelControlInfo game_panel_controls[] =
 #define DOUBLE_PLAYER_SPEED(p) (HALVE_MOVE_DELAY( (p)->move_delay_value))
 #define HALVE_PLAYER_SPEED(p)  (DOUBLE_MOVE_DELAY((p)->move_delay_value))
 
+/* values for scroll positions */
+#define SCROLL_POSITION_X(x)   ((x) < SBX_Left  + MIDPOSX ? SBX_Left : \
+                                (x) > SBX_Right + MIDPOSX ? SBX_Right :\
+                                (x) - MIDPOSX)
+#define SCROLL_POSITION_Y(y)   ((y) < SBY_Upper + MIDPOSY ? SBY_Upper :\
+                                (y) > SBY_Lower + MIDPOSY ? SBY_Lower :\
+                                (y) - MIDPOSY)
+
 /* values for other actions */
 #define MOVE_STEPSIZE_NORMAL   (TILEX / MOVE_DELAY_NORMAL_SPEED)
 #define MOVE_STEPSIZE_MIN      (1)
@@ -3896,23 +3904,13 @@ void InitGame()
       }
     }
 
-    scroll_x = (start_x < SBX_Left  + MIDPOSX ? SBX_Left :
-               start_x > SBX_Right + MIDPOSX ? SBX_Right :
-               start_x - MIDPOSX);
-
-    scroll_y = (start_y < SBY_Upper + MIDPOSY ? SBY_Upper :
-               start_y > SBY_Lower + MIDPOSY ? SBY_Lower :
-               start_y - MIDPOSY);
+    scroll_x = SCROLL_POSITION_X(start_x);
+    scroll_y = SCROLL_POSITION_Y(start_y);
   }
   else
   {
-    scroll_x = (local_player->jx < SBX_Left  + MIDPOSX ? SBX_Left :
-               local_player->jx > SBX_Right + MIDPOSX ? SBX_Right :
-               local_player->jx - MIDPOSX);
-
-    scroll_y = (local_player->jy < SBY_Upper + MIDPOSY ? SBY_Upper :
-               local_player->jy > SBY_Lower + MIDPOSY ? SBY_Lower :
-               local_player->jy - MIDPOSY);
+    scroll_x = SCROLL_POSITION_X(local_player->jx);
+    scroll_y = SCROLL_POSITION_Y(local_player->jy);
   }
 
   /* !!! FIX THIS (START) !!! */
@@ -4496,6 +4494,7 @@ int NewHiScore()
 {
   int k, l;
   int position = -1;
+  boolean one_score_entry_per_name = !program.many_scores_per_name;
 
   LoadScore(level_nr);
 
@@ -4513,13 +4512,15 @@ int NewHiScore()
       {
        int m = MAX_SCORE_ENTRIES - 1;
 
-#ifdef ONE_PER_NAME
-       for (l = k; l < MAX_SCORE_ENTRIES; l++)
-         if (strEqual(setup.player_name, highscore[l].Name))
-           m = l;
-       if (m == k)     /* player's new highscore overwrites his old one */
-         goto put_into_list;
-#endif
+       if (one_score_entry_per_name)
+       {
+         for (l = k; l < MAX_SCORE_ENTRIES; l++)
+           if (strEqual(setup.player_name, highscore[l].Name))
+             m = l;
+
+         if (m == k)   /* player's new highscore overwrites his old one */
+           goto put_into_list;
+       }
 
        for (l = m; l > k; l--)
        {
@@ -4528,22 +4529,19 @@ int NewHiScore()
        }
       }
 
-#ifdef ONE_PER_NAME
       put_into_list:
-#endif
+
       strncpy(highscore[k].Name, setup.player_name, MAX_PLAYER_NAME_LEN);
       highscore[k].Name[MAX_PLAYER_NAME_LEN] = '\0';
       highscore[k].Score = local_player->score_final; 
       position = k;
+
       break;
     }
-
-#ifdef ONE_PER_NAME
-    else if (!strncmp(setup.player_name, highscore[k].Name,
+    else if (one_score_entry_per_name &&
+            !strncmp(setup.player_name, highscore[k].Name,
                      MAX_PLAYER_NAME_LEN))
       break;   /* player already there with a higher score */
-#endif
-
   }
 
   if (position >= 0) 
@@ -4924,36 +4922,21 @@ void DrawRelocateScreen(int old_x, int old_y, int x, int y, int move_dir,
   {
     /* relocation _with_ centering of screen */
 
-    new_scroll_x = (x < SBX_Left  + MIDPOSX ? SBX_Left :
-                   x > SBX_Right + MIDPOSX ? SBX_Right :
-                   x - MIDPOSX);
-
-    new_scroll_y = (y < SBY_Upper + MIDPOSY ? SBY_Upper :
-                   y > SBY_Lower + MIDPOSY ? SBY_Lower :
-                   y - MIDPOSY);
+    new_scroll_x = SCROLL_POSITION_X(x);
+    new_scroll_y = SCROLL_POSITION_Y(y);
   }
   else
   {
     /* relocation _without_ centering of screen */
 
-    int center_scroll_x = (old_x < SBX_Left  + MIDPOSX ? SBX_Left :
-                          old_x > SBX_Right + MIDPOSX ? SBX_Right :
-                          old_x - MIDPOSX);
-
-    int center_scroll_y = (old_y < SBY_Upper + MIDPOSY ? SBY_Upper :
-                          old_y > SBY_Lower + MIDPOSY ? SBY_Lower :
-                          old_y - MIDPOSY);
-
+    int center_scroll_x = SCROLL_POSITION_X(old_x);
+    int center_scroll_y = SCROLL_POSITION_Y(old_y);
     int offset_x = x + (scroll_x - center_scroll_x);
     int offset_y = y + (scroll_y - center_scroll_y);
 
-    new_scroll_x = (offset_x < SBX_Left  + MIDPOSX ? SBX_Left :
-                   offset_x > SBX_Right + MIDPOSX ? SBX_Right :
-                   offset_x - MIDPOSX);
-
-    new_scroll_y = (offset_y < SBY_Upper + MIDPOSY ? SBY_Upper :
-                   offset_y > SBY_Lower + MIDPOSY ? SBY_Lower :
-                   offset_y - MIDPOSY);
+    /* for new screen position, apply previous offset to center position */
+    new_scroll_x = SCROLL_POSITION_X(offset_x);
+    new_scroll_y = SCROLL_POSITION_Y(offset_y);
   }
 
   if (quick_relocation)