rnd-20070320-3-src
[rocksndiamonds.git] / src / init.c
index c799cd3a24dc80d0269e87cbb9fba59b82f337a9..a8017155d78226cad43a2891794f528a7bc913b6 100644 (file)
@@ -167,7 +167,8 @@ static int getFontBitmapID(int font_nr)
 {
   int special = -1;
 
-  if (game_status >= GAME_MODE_TITLE && game_status <= GAME_MODE_PSEUDO_PREVIEW)
+  if (game_status >= GAME_MODE_TITLE_INITIAL &&
+      game_status <= GAME_MODE_PSEUDO_PREVIEW)
     special = game_status;
   else if (game_status == GAME_MODE_PSEUDO_TYPENAME)
     special = GFX_SPECIAL_ARG_MAIN;
@@ -182,6 +183,19 @@ static int getFontBitmapID(int font_nr)
     return font_nr;
 }
 
+static int getFontFromToken(char *token)
+{
+  int i;
+
+  /* !!! OPTIMIZE THIS BY USING HASH !!! */
+  for (i = 0; i < NUM_FONTS; i++)
+    if (strEqual(token, font_info[i].token_name))
+      return i;
+
+  /* if font not found, use reliable default value */
+  return FONT_INITIAL_1;
+}
+
 void InitFontGraphicInfo()
 {
   static struct FontBitmapInfo *font_bitmap_info = NULL;
@@ -192,7 +206,8 @@ void InitFontGraphicInfo()
 
   if (graphic_info == NULL)            /* still at startup phase */
   {
-    InitFontInfo(font_initial, NUM_INITIAL_FONTS, getFontBitmapID);
+    InitFontInfo(font_initial, NUM_INITIAL_FONTS,
+                getFontBitmapID, getFontFromToken);
 
     return;
   }
@@ -281,9 +296,9 @@ void InitFontGraphicInfo()
      fonts are cloned from this special font (like in the "Zelda" level set) */
   for (i = 0; font_to_graphic[i].font_nr > -1; i++)
   {
-    int font_nr      = font_to_graphic[i].font_nr;
-    int special      = font_to_graphic[i].special;
-    int graphic      = font_to_graphic[i].graphic;
+    int font_nr = font_to_graphic[i].font_nr;
+    int special = font_to_graphic[i].special;
+    int graphic = font_to_graphic[i].graphic;
 
     if (IS_SPECIAL_GFX_ARG(special))
     {
@@ -297,9 +312,9 @@ void InitFontGraphicInfo()
 
        for (j = 0; font_to_graphic[j].font_nr > -1; j++)
        {
-         int font_nr2      = font_to_graphic[j].font_nr;
-         int special2      = font_to_graphic[j].special;
-         int graphic2      = font_to_graphic[j].graphic;
+         int font_nr2 = font_to_graphic[j].font_nr;
+         int special2 = font_to_graphic[j].special;
+         int graphic2 = font_to_graphic[j].graphic;
 
          if (IS_SPECIAL_GFX_ARG(special2) &&
              graphic2 == graphic_info[graphic].clone_from)
@@ -411,7 +426,8 @@ void InitFontGraphicInfo()
     }
   }
 
-  InitFontInfo(font_bitmap_info, num_font_bitmaps, getFontBitmapID);
+  InitFontInfo(font_bitmap_info, num_font_bitmaps,
+              getFontBitmapID, getFontFromToken);
 }
 
 void InitElementGraphicInfo()
@@ -1020,6 +1036,7 @@ static void set_graphic_parameters(int graphic)
   graphic_info[graphic].post_delay = -1;
   graphic_info[graphic].auto_delay = -1;
   graphic_info[graphic].align = ALIGN_CENTER;  /* default for title screens */
+  graphic_info[graphic].valign = VALIGN_MIDDLE;        /* default for title screens */
   graphic_info[graphic].sort_priority = 0;     /* default for title screens */
 
 #if 1
@@ -1215,6 +1232,8 @@ static void set_graphic_parameters(int graphic)
     graphic_info[graphic].auto_delay = parameter[GFX_ARG_AUTO_DELAY];
   if (parameter[GFX_ARG_ALIGN] != ARG_UNDEFINED_VALUE)
     graphic_info[graphic].align = parameter[GFX_ARG_ALIGN];
+  if (parameter[GFX_ARG_VALIGN] != ARG_UNDEFINED_VALUE)
+    graphic_info[graphic].valign = parameter[GFX_ARG_VALIGN];
   if (parameter[GFX_ARG_SORT_PRIORITY] != ARG_UNDEFINED_VALUE)
     graphic_info[graphic].sort_priority = parameter[GFX_ARG_SORT_PRIORITY];
 }
@@ -1284,8 +1303,8 @@ static void InitGraphicInfo()
     IMG_BACKGROUND_ENVELOPE_4,
 
     IMG_BACKGROUND,
+    IMG_BACKGROUND_TITLE_INITIAL,
     IMG_BACKGROUND_TITLE,
-    IMG_BACKGROUND_MESSAGE,
     IMG_BACKGROUND_MAIN,
     IMG_BACKGROUND_LEVELS,
     IMG_BACKGROUND_SCORES,
@@ -1634,7 +1653,7 @@ static void set_sound_parameters(int sound, char **parameter_raw)
   sound_info[sound].volume = parameter[SND_ARG_VOLUME];
 
   /* sound priority to give certain sounds a higher or lower priority */
-  sound_info[sound].volume = parameter[SND_ARG_VOLUME];
+  sound_info[sound].priority = parameter[SND_ARG_PRIORITY];
 }
 
 static void InitSoundInfo()
@@ -5092,6 +5111,8 @@ void ReloadCustomArtwork(int force_reload)
     /* force redraw of (open or closed) door graphics */
     SetDoorState(DOOR_OPEN_ALL);
     CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY);
+
+    fading = fading_none;
   }
 }
 
@@ -5176,6 +5197,8 @@ void OpenAll()
     return;
   }
 
+  fading = fading_none;
+
   game_status = GAME_MODE_MAIN;
 
   DrawMainMenu();