rnd-19981121-2
authorHolger Schemel <info@artsoft.org>
Sat, 21 Nov 1998 02:37:00 +0000 (03:37 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:31:57 +0000 (10:31 +0200)
src/events.c
src/main.c
src/main.h
src/screens.c
src/tools.c
src/tools.h

index 9d4e3837bc7c9ff0cf3c80baad7d4ee68c32f891..f6bf55914775d87984939f4c9022d1c66714a714 100644 (file)
@@ -648,7 +648,7 @@ void HandleJoystick()
     {
       static long joystickmove_delay = 0;
 
     {
       static long joystickmove_delay = 0;
 
-      if (joystick && !button && !DelayReached(&joystickmove_delay,150))
+      if (joystick && !button && !DelayReached(&joystickmove_delay, 150))
        newbutton = dx = dy = 0;
 
       if (game_status==MAINMENU)
        newbutton = dx = dy = 0;
 
       if (game_status==MAINMENU)
index 969947e10f08aa3baa0aea88eaaea551c2e2cffc..bb9ef845d58905b865178f41312e5e523e5095e0 100644 (file)
@@ -50,10 +50,6 @@ char        *joystick_device_name[MAX_PLAYERS] =
   DEV_JOYSTICK_3
 };
 
   DEV_JOYSTICK_3
 };
 
-/*
-int            width, height;
-*/
-
 char          *program_name = NULL;
 
 int            game_status = MAINMENU;
 char          *program_name = NULL;
 
 int            game_status = MAINMENU;
index fffe9ab384032ebec51bbfb25c06c570b1316337..2026f3a4082344b8d0dec8771754cc4f77ad01d5 100644 (file)
@@ -199,8 +199,9 @@ typedef unsigned char byte;
 
 #define MAX_LEVDIR_FILENAME    (64+1)
 #define MAX_LEVDIR_NAME                (16+1)
 
 #define MAX_LEVDIR_FILENAME    (64+1)
 #define MAX_LEVDIR_NAME                (16+1)
-#define MAX_LEVDIR_ENTRIES     15
+#define MAX_LEVDIR_ENTRIES     100
 #define MAX_SCORE_ENTRIES      100
 #define MAX_SCORE_ENTRIES      100
+#define MAX_VISIBLE_ENTRIES    15
 
 #define MAX_OPTION_LEN         256
 #define MAX_FILENAME_LEN       256
 
 #define MAX_OPTION_LEN         256
 #define MAX_FILENAME_LEN       256
@@ -388,10 +389,6 @@ extern char               *sound_device_name;
 extern int             joystick_device;
 extern char           *joystick_device_name[];
 
 extern int             joystick_device;
 extern char           *joystick_device_name[];
 
-/*
-extern int                     width, height;
-*/
-
 extern char           *program_name;
 
 extern int             game_status;
 extern char           *program_name;
 
 extern int             game_status;
@@ -1123,17 +1120,14 @@ extern int              num_bg_loops;
 
 #define LEVEL_COOKIE           "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0"
 #define SCORE_COOKIE           "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.2"
 
 #define LEVEL_COOKIE           "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0"
 #define SCORE_COOKIE           "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.2"
-#define LEVELDIR_COOKIE                "ROCKSNDIAMONDS_LEVELDIR_FILE_VERSION_1.0"
 #define LEVELREC_COOKIE                "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.2"
 #define LEVELREC_COOKIE                "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.2"
-#define JOYSTICK_COOKIE                "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0"
 #define SETUP_COOKIE           "ROCKSNDIAMONDS_SETUP_FILE_VERSION_1.2"
 #define LEVELSETUP_COOKIE      "ROCKSNDIAMONDS_LEVELSETUP_FILE_VERSION_1.2"
 #define LEVELINFO_COOKIE       "ROCKSNDIAMONDS_LEVELINFO_FILE_VERSION_1.2"
 #define SETUP_COOKIE           "ROCKSNDIAMONDS_SETUP_FILE_VERSION_1.2"
 #define LEVELSETUP_COOKIE      "ROCKSNDIAMONDS_LEVELSETUP_FILE_VERSION_1.2"
 #define LEVELINFO_COOKIE       "ROCKSNDIAMONDS_LEVELINFO_FILE_VERSION_1.2"
+
 #define LEVEL_COOKIE_LEN       (strlen(LEVEL_COOKIE)+1)
 #define SCORE_COOKIE_LEN       (strlen(SCORE_COOKIE)+1)
 #define LEVEL_COOKIE_LEN       (strlen(LEVEL_COOKIE)+1)
 #define SCORE_COOKIE_LEN       (strlen(SCORE_COOKIE)+1)
-#define LEVELDIR_COOKIE_LEN    (strlen(LEVELDIR_COOKIE)+1)
 #define LEVELREC_COOKIE_LEN    (strlen(LEVELREC_COOKIE)+1)
 #define LEVELREC_COOKIE_LEN    (strlen(LEVELREC_COOKIE)+1)
-#define JOYSTICK_COOKIE_LEN    (strlen(JOYSTICK_COOKIE)+1)
 #define SETUP_COOKIE_LEN       (strlen(SETUP_COOKIE)+1)
 #define LEVELSETUP_COOKIE_LEN  (strlen(LEVELSETUP_COOKIE)+1)
 #define LEVELINFO_COOKIE_LEN   (strlen(LEVELINFO_COOKIE)+1)
 #define SETUP_COOKIE_LEN       (strlen(SETUP_COOKIE)+1)
 #define LEVELSETUP_COOKIE_LEN  (strlen(LEVELSETUP_COOKIE)+1)
 #define LEVELINFO_COOKIE_LEN   (strlen(LEVELINFO_COOKIE)+1)
index 87d7c39c995a1037b839115094bac5a5af6f210d..82c3e76478046933d034abfb348fa67a32615fad 100644 (file)
@@ -32,13 +32,10 @@ extern unsigned char get_ascii(KeySym);
 
 void DrawHeadline()
 {
 
 void DrawHeadline()
 {
-  int x1 = SX + (SXSIZE - strlen(GAMETITLE_STRING) * FONT1_XSIZE) / 2;
-  int y1 = SY + 8;
-  int x2 = SX + (SXSIZE - strlen(COPYRIGHT_STRING) * FONT2_XSIZE) / 2;
-  int y2 = SY + 46;
+  int x = SX + (SXSIZE - strlen(GAMETITLE_STRING) * FONT1_XSIZE) / 2;
 
 
-  DrawText(x1, y1, GAMETITLE_STRING, FS_BIG, FC_YELLOW);
-  DrawText(x2, y2, COPYRIGHT_STRING, FS_SMALL, FC_RED);
+  DrawText(x, SY + 8, GAMETITLE_STRING, FS_BIG, FC_YELLOW);
+  DrawTextFCentered(46, FC_RED, COPYRIGHT_STRING);
 }
 
 void DrawMainMenu()
 }
 
 void DrawMainMenu()
@@ -71,6 +68,8 @@ void DrawMainMenu()
   DrawGraphic(10, 3, GFX_PFEIL_L);
   DrawGraphic(14, 3, GFX_PFEIL_R);
 
   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);
 
   DrawText(SX + 56, SY + 326, "A Game by Artsoft Entertainment",
           FS_SMALL, FC_RED);
 
@@ -185,8 +184,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       {
        DrawGraphic(0, y-1, GFX_KUGEL_ROT);
        DrawGraphic(0, choice - 1, GFX_KUGEL_BLAU);
       {
        DrawGraphic(0, y-1, GFX_KUGEL_ROT);
        DrawGraphic(0, choice - 1, GFX_KUGEL_BLAU);
+       choice = y;
       }
       }
-      choice = y;
     }
     else
     {
     }
     else
     {
@@ -513,7 +512,7 @@ void DrawHelpScreenElText(int start)
   ClearWindow();
   DrawHeadline();
 
   ClearWindow();
   DrawHeadline();
 
-  DrawTextCentered(100, FC_GREEN, "The game elements:");
+  DrawTextFCentered(100, FC_GREEN, "The game elements:");
 
   for(i=start; i < start + MAX_HELPSCREEN_ELS && i < num_helpscreen_els; i++)
   {
 
   for(i=start; i < start + MAX_HELPSCREEN_ELS && i < num_helpscreen_els; i++)
   {
@@ -524,7 +523,7 @@ void DrawHelpScreenElText(int start)
             helpscreen_eltext[i][1], FS_SMALL, FC_YELLOW);
   }
 
             helpscreen_eltext[i][1], FS_SMALL, FC_YELLOW);
   }
 
-  DrawTextCentered(ybottom, FC_BLUE, "Press any key or button for next page");
+  DrawTextFCentered(ybottom, FC_BLUE, "Press any key or button for next page");
 }
 
 void DrawHelpScreenMusicText(int num)
 }
 
 void DrawHelpScreenMusicText(int num)
@@ -536,22 +535,22 @@ void DrawHelpScreenMusicText(int num)
   ClearWindow();
   DrawHeadline();
 
   ClearWindow();
   DrawHeadline();
 
-  DrawTextCentered(100, FC_GREEN, "The game background music loops:");
+  DrawTextFCentered(100, FC_GREEN, "The game background music loops:");
 
 
-  DrawTextCentered(ystart + 0 * ystep, FC_YELLOW,
-                  "Excerpt from");
-  DrawTextCentered(ystart + 1 * ystep, FC_RED, "\"%s\"",
-                  helpscreen_music[num][0]);
-  DrawTextCentered(ystart + 2 * ystep, FC_YELLOW,
-                  "by");
-  DrawTextCentered(ystart + 3 * ystep, FC_RED,
-                  "%s", helpscreen_music[num][1]);
-  DrawTextCentered(ystart + 4 * ystep, FC_YELLOW,
-                  "from the album");
-  DrawTextCentered(ystart + 5 * ystep, FC_RED, "\"%s\"",
-                  helpscreen_music[num][2]);
+  DrawTextFCentered(ystart + 0 * ystep, FC_YELLOW,
+                   "Excerpt from");
+  DrawTextFCentered(ystart + 1 * ystep, FC_RED, "\"%s\"",
+                   helpscreen_music[num][0]);
+  DrawTextFCentered(ystart + 2 * ystep, FC_YELLOW,
+                   "by");
+  DrawTextFCentered(ystart + 3 * ystep, FC_RED,
+                   "%s", helpscreen_music[num][1]);
+  DrawTextFCentered(ystart + 4 * ystep, FC_YELLOW,
+                   "from the album");
+  DrawTextFCentered(ystart + 5 * ystep, FC_RED, "\"%s\"",
+                   helpscreen_music[num][2]);
 
 
-  DrawTextCentered(ybottom, FC_BLUE, "Press any key or button for next page");
+  DrawTextFCentered(ybottom, FC_BLUE, "Press any key or button for next page");
 
   PlaySoundLoop(background_loop[num]);
 }
 
   PlaySoundLoop(background_loop[num]);
 }
@@ -565,22 +564,22 @@ void DrawHelpScreenCreditsText()
   ClearWindow();
   DrawHeadline();
 
   ClearWindow();
   DrawHeadline();
 
-  DrawTextCentered(100, FC_GREEN,
-                  "Credits:");
-  DrawTextCentered(ystart + 0 * ystep, FC_YELLOW,
-                  "DOS/Windows port of the game:");
-  DrawTextCentered(ystart + 1 * ystep, FC_RED,
-                  "Guido Schulz");
-  DrawTextCentered(ystart + 2 * ystep, FC_YELLOW,
-                  "Additional toons:");
-  DrawTextCentered(ystart + 3 * ystep, FC_RED,
-                  "Karl Hörnell");
-  DrawTextCentered(ystart + 5 * ystep, FC_YELLOW,
-                  "...and many thanks to all contributors");
-  DrawTextCentered(ystart + 6 * ystep, FC_YELLOW,
-                  "of new levels!");
-
-  DrawTextCentered(ybottom, FC_BLUE, "Press any key or button for next page");
+  DrawTextFCentered(100, FC_GREEN,
+                   "Credits:");
+  DrawTextFCentered(ystart + 0 * ystep, FC_YELLOW,
+                   "DOS/Windows port of the game:");
+  DrawTextFCentered(ystart + 1 * ystep, FC_RED,
+                   "Guido Schulz");
+  DrawTextFCentered(ystart + 2 * ystep, FC_YELLOW,
+                   "Additional toons:");
+  DrawTextFCentered(ystart + 3 * ystep, FC_RED,
+                   "Karl Hörnell");
+  DrawTextFCentered(ystart + 5 * ystep, FC_YELLOW,
+                   "...and many thanks to all contributors");
+  DrawTextFCentered(ystart + 6 * ystep, FC_YELLOW,
+                   "of new levels!");
+
+  DrawTextFCentered(ybottom, FC_BLUE, "Press any key or button for next page");
 }
 
 void DrawHelpScreenContactText()
 }
 
 void DrawHelpScreenContactText()
@@ -591,34 +590,33 @@ void DrawHelpScreenContactText()
   ClearWindow();
   DrawHeadline();
 
   ClearWindow();
   DrawHeadline();
 
-  DrawTextCentered(100, FC_GREEN, "Program information:");
-
-  DrawTextCentered(ystart + 0 * ystep, FC_YELLOW,
-                  "This game is Freeware!");
-  DrawTextCentered(ystart + 1 * ystep, FC_YELLOW,
-                  "If you like it, send e-mail to:");
-  DrawTextCentered(ystart + 2 * ystep, FC_RED,
-                  "aeglos@valinor.owl.de");
-  DrawTextCentered(ystart + 3 * ystep, FC_YELLOW,
-                  "or SnailMail to:");
-  DrawTextCentered(ystart + 4 * ystep + 0, FC_RED,
-                  "Holger Schemel");
-  DrawTextCentered(ystart + 4 * ystep + 20, FC_RED,
-                  "Oststrasse 11a");
-  DrawTextCentered(ystart + 4 * ystep + 40, FC_RED,
-                  "33604 Bielefeld");
-  DrawTextCentered(ystart + 4 * ystep + 60, FC_RED,
-                  "Germany");
-
-  DrawTextCentered(ystart + 7 * ystep, FC_YELLOW,
-                  "If you have created new levels,");
-  DrawTextCentered(ystart + 8 * ystep, FC_YELLOW,
-                  "send them to me to include them!");
-  DrawTextCentered(ystart + 9 * ystep, FC_YELLOW,
-                  ":-)");
-
-  DrawTextCentered(ybottom, FC_BLUE,
-                  "Press any key or button for main menu");
+  DrawTextFCentered(100, FC_GREEN, "Program information:");
+
+  DrawTextFCentered(ystart + 0 * ystep, FC_YELLOW,
+                   "This game is Freeware!");
+  DrawTextFCentered(ystart + 1 * ystep, FC_YELLOW,
+                   "If you like it, send e-mail to:");
+  DrawTextFCentered(ystart + 2 * ystep, FC_RED,
+                   "aeglos@valinor.owl.de");
+  DrawTextFCentered(ystart + 3 * ystep, FC_YELLOW,
+                   "or SnailMail to:");
+  DrawTextFCentered(ystart + 4 * ystep + 0, FC_RED,
+                   "Holger Schemel");
+  DrawTextFCentered(ystart + 4 * ystep + 20, FC_RED,
+                   "Oststrasse 11a");
+  DrawTextFCentered(ystart + 4 * ystep + 40, FC_RED,
+                   "33604 Bielefeld");
+  DrawTextFCentered(ystart + 4 * ystep + 60, FC_RED,
+                   "Germany");
+
+  DrawTextFCentered(ystart + 7 * ystep, FC_YELLOW,
+                   "If you have created new levels,");
+  DrawTextFCentered(ystart + 8 * ystep, FC_YELLOW,
+                   "send them to me to include them!");
+  DrawTextFCentered(ystart + 9 * ystep, FC_YELLOW,
+                   ":-)");
+
+  DrawTextFCentered(ybottom, FC_BLUE, "Press any key or button for main menu");
 }
 
 void DrawHelpScreen()
 }
 
 void DrawHelpScreen()
@@ -713,10 +711,19 @@ void HandleTypeName(int newxpos, KeySym key)
       ascii = 'A'+(char)(key-XK_A);
     if (key>=XK_a && key<=XK_z)
       ascii = 'a'+(char)(key-XK_a);
       ascii = 'A'+(char)(key-XK_A);
     if (key>=XK_a && key<=XK_z)
       ascii = 'a'+(char)(key-XK_a);
+
+    setup.player_name[xpos] = ascii;
+    setup.player_name[xpos+1] = 0;
+    xpos++;
+    DrawTextExt(drawto,gc,SX+6*32,SY+ypos*32,
+               setup.player_name,FS_BIG,FC_YELLOW);
+    DrawTextExt(window,gc,SX+6*32,SY+ypos*32,
+               setup.player_name,FS_BIG,FC_YELLOW);
+    DrawGraphic(xpos+6,ypos,GFX_KUGEL_ROT);
+  }
 #else
 #else
-  if((ascii = get_ascii(key)) && xpos<MAX_NAMELEN-1)
+  if ((ascii = get_ascii(key)) && xpos<MAX_NAMELEN-1)
   {
   {
-#endif
     setup.player_name[xpos] = ascii;
     setup.player_name[xpos+1] = 0;
     xpos++;
     setup.player_name[xpos] = ascii;
     setup.player_name[xpos+1] = 0;
     xpos++;
@@ -726,6 +733,7 @@ void HandleTypeName(int newxpos, KeySym key)
                setup.player_name,FS_BIG,FC_YELLOW);
     DrawGraphic(xpos+6,ypos,GFX_KUGEL_ROT);
   }
                setup.player_name,FS_BIG,FC_YELLOW);
     DrawGraphic(xpos+6,ypos,GFX_KUGEL_ROT);
   }
+#endif
   else if ((key==XK_Delete || key==XK_BackSpace) && xpos>0)
   {
     xpos--;
   else if ((key==XK_Delete || key==XK_BackSpace) && xpos>0)
   {
     xpos--;
@@ -747,39 +755,76 @@ void HandleTypeName(int newxpos, KeySym key)
 
 void DrawChooseLevel()
 {
 
 void DrawChooseLevel()
 {
-  int i;
-
   CloseDoor(DOOR_CLOSE_2);
 
   CloseDoor(DOOR_CLOSE_2);
 
+  FadeToFront();
+  InitAnimation();
+  HandleChooseLevel(0,0, 0,0, MB_MENU_INITIALIZE);
+}
+
+static void drawChooseLevelList(int first_entry, int num_page_entries)
+{
+  int i;
+  char buffer[SCR_FIELDX];
+
   ClearWindow();
   DrawText(SX, SY, "Level Directories", FS_BIG, FC_GREEN);
   ClearWindow();
   DrawText(SX, SY, "Level Directories", FS_BIG, FC_GREEN);
-  for(i=0; i<num_leveldirs; i++)
+
+  for(i=0; i<num_page_entries; i++)
   {
   {
-    DrawText(SX + 32, SY + (i + 2) * 32, leveldir[i].name, FS_BIG,
-            (leveldir[i].readonly ? FC_RED : FC_YELLOW));
+    strncpy(buffer, leveldir[first_entry + i].name , SCR_FIELDX - 1);
+    buffer[SCR_FIELDX - 1] = '\0';
+    DrawText(SX + 32, SY + (i + 2) * 32, buffer, FS_BIG, FC_YELLOW);
     DrawGraphic(0, i + 2, GFX_KUGEL_BLAU);
   }
 
     DrawGraphic(0, i + 2, GFX_KUGEL_BLAU);
   }
 
-  FadeToFront();
-  InitAnimation();
-  HandleChooseLevel(0,0, 0,0, MB_MENU_INITIALIZE);
+  if (first_entry > 0)
+    DrawGraphic(0, 1, GFX_PFEIL_O);
+
+  if (first_entry + num_page_entries < num_leveldirs)
+    DrawGraphic(0, MAX_VISIBLE_ENTRIES + 1, GFX_PFEIL_U);
+}
+
+static void drawChooseLevelInfo(int leveldir_nr)
+{
+  XFillRectangle(display, drawto, gc, SX + 32, SY + 32, SXSIZE - 32, 32);
+  DrawTextFCentered(40, FC_RED, "%3d levels (%s)",
+                   leveldir[leveldir_nr].levels,
+                   leveldir[leveldir_nr].readonly ? "readonly" : "writable");
 }
 
 void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
 {
   static int choice = 3;
 }
 
 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 int redraw = TRUE;
   static int redraw = TRUE;
-  int x = (mx+32-SX)/32, y = (my+32-SY)/32;
+  int x = (mx + 32 - SX) / 32, y = (my + 32 - SY) / 32;
+  int num_page_entries;
+
+  if (num_leveldirs <= MAX_VISIBLE_ENTRIES)
+    num_page_entries = num_leveldirs;
+  else
+    num_page_entries = MAX_VISIBLE_ENTRIES - 1;
 
   if (button == MB_MENU_INITIALIZE)
   {
     redraw = TRUE;
 
   if (button == MB_MENU_INITIALIZE)
   {
     redraw = TRUE;
-    choice = leveldir_nr + 3;
+    choice = leveldir_nr + 3 - first_entry;
+
+    if (choice > num_page_entries + 2)
+    {
+      choice = num_page_entries + 2;
+      first_entry = num_leveldirs - num_page_entries;
+    }
+
+    drawChooseLevelList(first_entry, num_page_entries);
+    drawChooseLevelInfo(leveldir_nr);
   }
 
   if (redraw)
   {
   }
 
   if (redraw)
   {
-    DrawGraphic(0,choice-1,GFX_KUGEL_ROT);
+    DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
     redraw = FALSE;
   }
 
     redraw = FALSE;
   }
 
@@ -791,15 +836,35 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
     if (dy)
     {
       x = 1;
     if (dy)
     {
       x = 1;
-      y = choice+dy;
+      y = choice + dy;
     }
     else
       x = y = 0;
     }
     else
       x = y = 0;
+  }
 
 
-    if (y<3)
-      y = 3;
-    else if (y>num_leveldirs+2)
-      y = num_leveldirs+2;
+  if (x == 1 && y == 2)
+  {
+    if (first_entry > 0 &&
+       (dy || DelayReached(&choose_delay, 150)))
+    {
+      first_entry--;
+      drawChooseLevelList(first_entry, num_page_entries);
+      drawChooseLevelInfo(first_entry);
+      DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
+      return;
+    }
+  }
+  else if (x == 1 && y > num_page_entries + 2)
+  {
+    if (first_entry + num_page_entries < num_leveldirs &&
+       (dy || DelayReached(&choose_delay, 150)))
+    {
+      first_entry++;
+      drawChooseLevelList(first_entry, num_page_entries);
+      drawChooseLevelInfo(first_entry + num_page_entries - 1);
+      DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
+      return;
+    }
   }
 
   if (!mx && !my && !dx && !dy)
   }
 
   if (!mx && !my && !dx && !dy)
@@ -808,20 +873,21 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
     y = choice;
   }
 
     y = choice;
   }
 
-  if (x==1 && y>=3 && y<=num_leveldirs+2)
+  if (x == 1 && y >= 3 && y <= num_page_entries + 2)
   {
     if (button)
     {
   {
     if (button)
     {
-      if (y!=choice)
+      if (y != choice)
       {
       {
-        DrawGraphic(0,y-1,GFX_KUGEL_ROT);
-        DrawGraphic(0,choice-1,GFX_KUGEL_BLAU);
+        DrawGraphic(0, y - 1, GFX_KUGEL_ROT);
+        DrawGraphic(0, choice - 1, GFX_KUGEL_BLAU);
+       drawChooseLevelInfo(first_entry + y - 3);
+       choice = y;
       }
       }
-      choice = y;
     }
     else
     {
     }
     else
     {
-      leveldir_nr = y-3;
+      leveldir_nr = first_entry + y - 3;
       level_nr =
        getLastPlayedLevelOfLevelSeries(leveldir[leveldir_nr].filename);
 
       level_nr =
        getLastPlayedLevelOfLevelSeries(leveldir[leveldir_nr].filename);
 
@@ -838,32 +904,33 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
 
   BackToFront();
 
 
   BackToFront();
 
-  if (game_status==CHOOSELEVEL)
+  if (game_status == CHOOSELEVEL)
     DoAnimation();
 }
 
     DoAnimation();
 }
 
-void DrawHallOfFame(int pos)
+void DrawHallOfFame(int highlight_position)
 {
 {
-  int y;
-  char txt[40];
+  int i;
 
   CloseDoor(DOOR_CLOSE_2);
 
 
   CloseDoor(DOOR_CLOSE_2);
 
-  if (pos<0) 
+  if (highlight_position < 0) 
     LoadScore(level_nr);
     LoadScore(level_nr);
+
   ClearWindow();
   ClearWindow();
-  DrawText(SX+64,SY+10,"Hall Of Fame",FS_BIG,FC_YELLOW);
-  sprintf(txt,"HighScores of Level %d",level_nr);
-  DrawText(SX+256-strlen(txt)*7,SY+48,txt,FS_SMALL,FC_RED);
-  for(y=0; y<15; y++)
+
+  DrawText(SX + 80, SY + 8, "Hall Of Fame", FS_BIG, FC_YELLOW);
+  DrawTextFCentered(46, FC_RED, "HighScores of Level %d", level_nr);
+
+  for(i=0; i<MAX_VISIBLE_ENTRIES; i++)
   {
   {
-    DrawText(SX,SY+64+y*32,".................",FS_BIG,
-            (y==pos ? FC_RED : FC_GREEN));
-    DrawText(SX,SY+64+y*32,highscore[y].Name,FS_BIG,
-            (y==pos ? FC_RED : FC_GREEN));
-    DrawText(SX+12*32,SY+64+y*32,
-            int2str(highscore[y].Score,5),FS_BIG,
-            (y==pos ? FC_RED : FC_GREEN));
+    DrawText(SX, SY + 64 + i * 32, ".................", FS_BIG,
+            (i == highlight_position ? FC_RED : FC_GREEN));
+    DrawText(SX, SY + 64 + i * 32, highscore[i].Name, FS_BIG,
+            (i == highlight_position ? FC_RED : FC_GREEN));
+    DrawText(SX + 12 * 32, SY + 64 + i * 32,
+            int2str(highscore[i].Score, 5), FS_BIG,
+            (i == highlight_position ? FC_RED : FC_GREEN));
   }
 
   FadeToFront();
   }
 
   FadeToFront();
index a5aeb218940df516e836c1f544abbd022d3d0d39..671e2d89348b41c53c17935a534c29b757104735 100644 (file)
@@ -282,7 +282,7 @@ void ClearWindow()
   redraw_mask |= REDRAW_FIELD;
 }
 
   redraw_mask |= REDRAW_FIELD;
 }
 
-void DrawTextCentered(int y, int font_type, char *format, ...)
+void DrawTextFCentered(int y, int font_type, char *format, ...)
 {
   char buffer[FULL_SXSIZE / FONT3_XSIZE + 10];
   int font_xsize;
 {
   char buffer[FULL_SXSIZE / FONT3_XSIZE + 10];
   int font_xsize;
@@ -299,6 +299,18 @@ void DrawTextCentered(int y, int font_type, char *format, ...)
           buffer, FS_SMALL, font_type);
 }
 
           buffer, FS_SMALL, font_type);
 }
 
+void DrawTextF(int x, int y, int font_type, char *format, ...)
+{
+  char buffer[FULL_SXSIZE / FONT3_XSIZE + 10];
+  va_list ap;
+
+  va_start(ap, format);
+  vsprintf(buffer, format, ap);
+  va_end(ap);
+
+  DrawText(SX + x, SY + y, buffer, FS_SMALL, font_type);
+}
+
 void DrawText(int x, int y, char *text, int font_size, int font_type)
 {
   DrawTextExt(drawto, gc, x, y, text, font_size, font_type);
 void DrawText(int x, int y, char *text, int font_size, int font_type)
 {
   DrawTextExt(drawto, gc, x, y, text, font_size, font_type);
index e94f195b48ae9fd324ace6bd6487b072f54d6e66..6d70852092b5617f9eb67adb6195019e6eda5978 100644 (file)
@@ -62,7 +62,8 @@ void SetDrawtoField(int);
 void BackToFront();
 void FadeToFront();
 void ClearWindow();
 void BackToFront();
 void FadeToFront();
 void ClearWindow();
-void DrawTextCentered(int, int, char *, ...);
+void DrawTextF(int, int, int, char *, ...);
+void DrawTextFCentered(int, int, char *, ...);
 void DrawText(int, int, char *, int, int);
 void DrawTextExt(Drawable, GC, int, int, char *, int, int);
 void DrawAllPlayers(void);
 void DrawText(int, int, char *, int, int);
 void DrawTextExt(Drawable, GC, int, int, char *, int, int);
 void DrawAllPlayers(void);