rnd-19990122-2
[rocksndiamonds.git] / src / screens.c
index 0da69783facb5efcaa718d3191a2a785a44ed3c9..11c6bf2a9c9e011a89a6d4b2ecb067125d154aff 100644 (file)
@@ -58,8 +58,18 @@ void DrawMainMenu()
   int i;
   char *name_text = (!options.network && setup.team_mode ? "Team:" : "Name:");
 
+  XAutoRepeatOn(display);
+
+  /* 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 */
-  UnmapLevelEditorControlButtons();
+  UnmapLevelEditorGadgets();
 
   FadeSounds();
   GetPlayerConfig();
@@ -79,15 +89,23 @@ void DrawMainMenu()
   DrawText(SX + 32,    SY + 8*32, "Setup", FS_BIG, FC_GREEN);
   DrawText(SX + 32,    SY + 9*32, "Quit", FS_BIG, FC_GREEN);
 
-  DrawMicroLevel(MICROLEV_XPOS,MICROLEV_YPOS);
+  DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS, TRUE);
+
+  DrawTextF(7*32 + 6, 3*32 + 9, FC_RED, "%d-%d",
+           leveldir[leveldir_nr].first_level,
+           leveldir[leveldir_nr].last_level);
+
+  if (leveldir[leveldir_nr].readonly)
+  {
+    DrawTextF(15*32 + 6, 3*32 + 9 - 7, FC_RED, "READ");
+    DrawTextF(15*32 + 6, 3*32 + 9 + 7, FC_RED, "ONLY");
+  }
 
   for(i=2; i<10; i++)
     DrawGraphic(0, i, GFX_KUGEL_BLAU);
   DrawGraphic(10, 3, GFX_PFEIL_L);
   DrawGraphic(14, 3, GFX_PFEIL_R);
 
-  DrawTextF(15*32 + 6, 3*32 + 9, FC_RED, "%d", leveldir[leveldir_nr].levels);
-
   DrawText(SX + 56, SY + 326, "A Game by Artsoft Entertainment",
           FS_SMALL, FC_RED);
 
@@ -112,7 +130,6 @@ void DrawMainMenu()
   OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2);
 
   ClearEventQueue();
-  XAutoRepeatOn(display);
 }
 
 void HandleMainMenu(int mx, int my, int dx, int dy, int button)
@@ -157,8 +174,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
     y = choice;
   }
 
-  if (y == 4 && ((x == 11 && level_nr > 0) ||
-                (x == 15 && level_nr < leveldir[leveldir_nr].levels - 1)) &&
+  if (y == 4 && ((x == 11 && level_nr > leveldir[leveldir_nr].first_level) ||
+                (x == 15 && level_nr < leveldir[leveldir_nr].last_level)) &&
       button)
   {
     static unsigned long level_delay = 0;
@@ -167,12 +184,13 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
     int font_color = (leveldir[leveldir_nr].readonly ? FC_RED : FC_YELLOW);
 
     new_level_nr = level_nr + (x == 11 ? -step : +step);
-    if (new_level_nr < 0)
-      new_level_nr = 0;
-    if (new_level_nr > leveldir[leveldir_nr].levels - 1)
-      new_level_nr = leveldir[leveldir_nr].levels - 1;
+    if (new_level_nr < leveldir[leveldir_nr].first_level)
+      new_level_nr = leveldir[leveldir_nr].first_level;
+    if (new_level_nr > leveldir[leveldir_nr].last_level)
+      new_level_nr = leveldir[leveldir_nr].last_level;
 
-    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;
@@ -183,7 +201,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
                int2str(level_nr, 3), FS_BIG, font_color);
 
     LoadLevel(level_nr);
-    DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS);
+    DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS, TRUE);
 
     TapeErase();
     LoadTape(level_nr);
@@ -228,7 +246,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       }
       else if (y == 6)
       {
-       if (leveldir[leveldir_nr].readonly)
+       if (leveldir[leveldir_nr].readonly &&
+           strcmp(setup.player_name, "Artsoft") != 0)
          Request("This level is read only !", REQ_CONFIRM);
        game_status = LEVELED;
        DrawLevelEd();
@@ -273,7 +292,10 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
   out:
 
   if (game_status == MAINMENU)
+  {
+    DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS, FALSE);
     DoAnimation();
+  }
 }
 
 #define MAX_HELPSCREEN_ELS     10
@@ -377,8 +399,8 @@ static int helpscreen_action[] =
   GFX_DIAMANT,1,10,                                            HA_NEXT,
   GFX_LIFE,1,100,                                              HA_NEXT,
   GFX_LIFE_ASYNC,1,100,                                                HA_NEXT,
-  GFX_SIEB_LEER,4,2,                                           HA_NEXT,
-  GFX_SIEB2_LEER,4,2,                                          HA_NEXT,
+  GFX_SIEB_INAKTIV,4,2,                                                HA_NEXT,
+  GFX_SIEB2_INAKTIV,4,2,                                       HA_NEXT,
   GFX_AUSGANG_ZU,1,100, GFX_AUSGANG_ACT,4,2,
   GFX_AUSGANG_AUF+0,4,2, GFX_AUSGANG_AUF+3,1,2,
   GFX_AUSGANG_AUF+2,1,2, GFX_AUSGANG_AUF+1,1,2,                        HA_NEXT,
@@ -853,7 +875,7 @@ 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--;
@@ -871,7 +893,7 @@ 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++;
@@ -1413,7 +1435,7 @@ void HandleSetupInputScreen(int mx, int my, int dx, int dy, int button)
   {
     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;