rnd-19981220-1
[rocksndiamonds.git] / src / screens.c
index f2076dce3518fe3f447e08ff04066f710eb90daf..f38ab8549b031169ce65e9c66ae5fbeea78e62b6 100644 (file)
@@ -58,6 +58,17 @@ void DrawMainMenu()
   int i;
   char *name_text = (!options.network && setup.team_mode ? "Team:" : "Name:");
 
+  /* needed if last screen was the playing screen, invoked from level editor */
+  if (level_editor_test_game)
+  {
+    game_status = LEVELED;
+    DrawLevelEd();
+    return;
+  }
+
+  /* needed if last screen was the level editor */
+  UnmapLevelEditorGadgets();
+
   FadeSounds();
   GetPlayerConfig();
   LoadLevel(level_nr);
@@ -158,7 +169,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
                 (x == 15 && level_nr < leveldir[leveldir_nr].levels - 1)) &&
       button)
   {
-    static long level_delay = 0;
+    static unsigned long level_delay = 0;
     int step = (button == 1 ? 1 : button == 2 ? 5 : 10);
     int new_level_nr, old_level_nr = level_nr;
     int font_color = (leveldir[leveldir_nr].readonly ? FC_RED : FC_YELLOW);
@@ -169,7 +180,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
     if (new_level_nr > leveldir[leveldir_nr].levels - 1)
       new_level_nr = leveldir[leveldir_nr].levels - 1;
 
-    if (old_level_nr == new_level_nr || !DelayReached(&level_delay, 150))
+    if (old_level_nr == new_level_nr ||
+       !DelayReached(&level_delay, GADGET_FRAME_DELAY))
       goto out;
 
     level_nr = new_level_nr;
@@ -656,7 +668,7 @@ void DrawHelpScreen()
 
 void HandleHelpScreen(int button)
 {
-  static long hs_delay = 0;
+  static unsigned long hs_delay = 0;
   int num_helpscreen_els_pages =
     (num_helpscreen_els + MAX_HELPSCREEN_ELS-1) / MAX_HELPSCREEN_ELS;
   int button_released = !button;
@@ -710,7 +722,6 @@ void HandleHelpScreen(int button)
 void HandleTypeName(int newxpos, KeySym key)
 {
   static int xpos = 0, ypos = 2;
-  unsigned char ascii;
 
   if (newxpos)
   {
@@ -723,9 +734,11 @@ void HandleTypeName(int newxpos, KeySym key)
   if (((key >= XK_A && key <= XK_Z) || (key >= XK_a && key <= XK_z)) && 
       xpos < MAX_NAMELEN - 1)
   {
+    char ascii;
+
     if (key >= XK_A && key <= XK_Z)
       ascii = 'A' + (char)(key - XK_A);
-    if (key >= XK_a && key <= XK_z)
+    else
       ascii = 'a' + (char)(key - XK_a);
 
     setup.player_name[xpos] = ascii;
@@ -800,9 +813,10 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
 {
   static int choice = 3;
   static int first_entry = 0;
-  static long choose_delay = 0;
+  static unsigned long choose_delay = 0;
   static int redraw = TRUE;
   int x = (mx + 32 - SX) / 32, y = (my + 32 - SY) / 32;
+  int step = (button == 1 ? 1 : button == 2 ? 5 : 10);
   int num_page_entries;
 
   if (num_leveldirs <= MAX_LEVEL_SERIES_ON_SCREEN)
@@ -848,9 +862,15 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
   if (x == 1 && y == 2)
   {
     if (first_entry > 0 &&
-       (dy || DelayReached(&choose_delay, 150)))
+       (dy || DelayReached(&choose_delay, GADGET_FRAME_DELAY)))
     {
+#if 0
       first_entry--;
+#else
+      first_entry -= step;
+      if (first_entry < 0)
+       first_entry = 0;
+#endif
       drawChooseLevelList(first_entry, num_page_entries);
       drawChooseLevelInfo(first_entry);
       DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
@@ -860,9 +880,15 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
   else if (x == 1 && y > num_page_entries + 2)
   {
     if (first_entry + num_page_entries < num_leveldirs &&
-       (dy || DelayReached(&choose_delay, 150)))
+       (dy || DelayReached(&choose_delay, GADGET_FRAME_DELAY)))
     {
+#if 0
       first_entry++;
+#else
+      first_entry += step;
+      if (first_entry + num_page_entries > num_leveldirs)
+       first_entry = num_leveldirs - num_page_entries;
+#endif
       drawChooseLevelList(first_entry, num_page_entries);
       drawChooseLevelInfo(first_entry + num_page_entries - 1);
       DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
@@ -1119,12 +1145,18 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button)
       }
       else if (y==7)
       {
+#if 0
        if (setup.double_buffering)
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
        setup.double_buffering = !setup.double_buffering;
        setup.direct_draw = !setup.double_buffering;
+#else
+       DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+       setup.double_buffering = TRUE;
+       setup.direct_draw = !setup.double_buffering;
+#endif
       }
       else if (y==8)
       {
@@ -1388,9 +1420,9 @@ void HandleSetupInputScreen(int mx, int my, int dx, int dy, int button)
 
   if (y == 3 && ((x == 1 && !button) || ((x == 11 || x == 13) && button)))
   {
-    static long delay = 0;
+    static unsigned long delay = 0;
 
-    if (!DelayReached(&delay, 150))
+    if (!DelayReached(&delay, GADGET_FRAME_DELAY))
       goto out;
 
     player_nr = (player_nr + (x == 11 ? -1 : +1) + MAX_PLAYERS) % MAX_PLAYERS;