X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=a8017155d78226cad43a2891794f528a7bc913b6;hb=884012f34f9f3c22bf75d1468e4ed57d7795a24b;hp=57c03bd0ab3060a5160435c13259012377558537;hpb=f648fc704c75dcfb0e7721a723c7c7391e708370;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 57c03bd0..a8017155 100644 --- a/src/init.c +++ b/src/init.c @@ -167,12 +167,15 @@ 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; +#if 0 else if (game_status == GAME_MODE_PLAYING) special = GFX_SPECIAL_ARG_DOOR; +#endif if (special != -1) return font_info[font_nr].special_bitmap_id[special]; @@ -180,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; @@ -190,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; } @@ -232,7 +249,7 @@ void InitFontGraphicInfo() int graphic = font_to_graphic[i].graphic; int base_graphic = font2baseimg(font_nr); - if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS) + if (IS_SPECIAL_GFX_ARG(special)) { boolean base_redefined = getImageListEntryFromImageID(base_graphic)->redefined; @@ -240,16 +257,6 @@ void InitFontGraphicInfo() getImageListEntryFromImageID(graphic)->redefined; boolean special_cloned = (graphic_info[graphic].clone_from != -1); -#if 0 - printf("::: %d, %d, %d / %d, %d, %d\n", - font_nr, special, graphic, - base_redefined, special_redefined, special_cloned); -#endif - -#if 0 - // special_cloned = 0; -#endif - /* if the base font ("font.title_1", for example) has been redefined, but not the special font ("font.title_1.LEVELS", for example), do not use an existing (in this case considered obsolete) special font @@ -275,7 +282,7 @@ void InitFontGraphicInfo() if (font_nr < 0) continue; - if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS) + if (IS_SPECIAL_GFX_ARG(special)) { font_info[font_nr].special_graphic[special] = graphic; font_info[font_nr].special_bitmap_id[special] = num_font_bitmaps; @@ -283,34 +290,18 @@ void InitFontGraphicInfo() } } -#if 0 - printf("-0- T3.P: %d, %d\n", - font_info[FONT_TEXT_3].special_graphic[GFX_SPECIAL_ARG_PREVIEW], - font_info[FONT_TEXT_3].special_bitmap_id[GFX_SPECIAL_ARG_PREVIEW]); - - printf("-0- T4.M: %d, %d\n", - font_info[FONT_TEXT_4].special_graphic[GFX_SPECIAL_ARG_MAIN], - font_info[FONT_TEXT_4].special_bitmap_id[GFX_SPECIAL_ARG_MAIN]); -#endif - -#if 1 - /* correct special font/graphic mapping for cloned fonts - (per definition only needed for static configuration) */ + /* correct special font/graphic mapping for cloned fonts for downwards + compatibility of PREVIEW fonts -- this is only needed for implicit + redefinition of special font by redefined base font, and only if other + 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; -#if 0 - int base_graphic = font2baseimg(font_nr); -#endif + int font_nr = font_to_graphic[i].font_nr; + int special = font_to_graphic[i].special; + int graphic = font_to_graphic[i].graphic; - if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS) + if (IS_SPECIAL_GFX_ARG(special)) { -#if 0 - boolean base_redefined = - getImageListEntryFromImageID(base_graphic)->redefined; -#endif boolean special_redefined = getImageListEntryFromImageID(graphic)->redefined; boolean special_cloned = (graphic_info[graphic].clone_from != -1); @@ -319,50 +310,24 @@ void InitFontGraphicInfo() { int j; -#if 0 - printf(":2: %d, %d, %d / %d, %d, %d\n", - font_nr, special, graphic, - base_redefined, special_redefined, special_cloned); -#endif - 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; -#if 0 - int base_graphic2 = font2baseimg(font_nr2); -#endif + int font_nr2 = font_to_graphic[j].font_nr; + int special2 = font_to_graphic[j].special; + int graphic2 = font_to_graphic[j].graphic; - if (graphic2 == graphic_info[graphic].clone_from) + if (IS_SPECIAL_GFX_ARG(special2) && + graphic2 == graphic_info[graphic].clone_from) { -#if 0 - printf(":2.1: %d, %d, %d, %d\n", - font_nr2, special2, graphic2, base_graphic2); -#endif - -#if 1 font_info[font_nr].special_graphic[special] = font_info[font_nr2].special_graphic[special2]; font_info[font_nr].special_bitmap_id[special] = font_info[font_nr2].special_bitmap_id[special2]; -#else -#if 1 - font_info[font_nr].special_graphic[special] = graphic2; - font_info[font_nr].special_bitmap_id[special] = - font_info[font_nr2].special_bitmap_id[special2]; -#else - font_info[font_nr].special_graphic[special] = graphic2; - font_info[font_nr].special_bitmap_id[special] = num_font_bitmaps; - num_font_bitmaps++; -#endif -#endif } } } } } -#endif /* reset non-redefined ".active" font graphics if normal font is redefined */ /* (this different treatment is needed because normal and active fonts are @@ -412,24 +377,6 @@ void InitFontGraphicInfo() } } -#if 0 - printf("-1- T4.M: %d, %d\n", - font_info[FONT_TEXT_4].special_graphic[GFX_SPECIAL_ARG_MAIN], - font_info[FONT_TEXT_4].special_bitmap_id[GFX_SPECIAL_ARG_MAIN]); - - font_info[FONT_TEXT_4].special_graphic[GFX_SPECIAL_ARG_MAIN] = - IMG_FONT_TEXT_3; - font_info[FONT_TEXT_4].special_bitmap_id[GFX_SPECIAL_ARG_MAIN] = - FONT_TEXT_3; - -#if 0 - font_info[FONT_TEXT_4].special_graphic[GFX_SPECIAL_ARG_MAIN] = - IMG_FONT_TEXT_3_PREVIEW; - font_info[FONT_TEXT_4].special_bitmap_id[GFX_SPECIAL_ARG_MAIN] = - FONT_TEXT_3; -#endif -#endif - /* ---------- initialize font bitmap array ---------- */ if (font_bitmap_info != NULL) @@ -479,17 +426,8 @@ void InitFontGraphicInfo() } } - InitFontInfo(font_bitmap_info, num_font_bitmaps, getFontBitmapID); - -#if 0 - printf("-X- T3.P: %d, %d\n", - font_info[FONT_TEXT_3].special_graphic[GFX_SPECIAL_ARG_PREVIEW], - font_info[FONT_TEXT_3].special_bitmap_id[GFX_SPECIAL_ARG_PREVIEW]); - - printf("-4- T4.M: %d, %d\n", - font_info[FONT_TEXT_4].special_graphic[GFX_SPECIAL_ARG_MAIN], - font_info[FONT_TEXT_4].special_bitmap_id[GFX_SPECIAL_ARG_MAIN]); -#endif + InitFontInfo(font_bitmap_info, num_font_bitmaps, + getFontBitmapID, getFontFromToken); } void InitElementGraphicInfo() @@ -988,7 +926,7 @@ void InitElementSpecialGraphicInfo() if (element >= MAX_NUM_ELEMENTS) continue; - if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS) + if (IS_SPECIAL_GFX_ARG(special)) element_info[element].special_graphic[special] = graphic; } @@ -1098,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 @@ -1293,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]; } @@ -1362,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, @@ -1712,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() @@ -5170,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; } } @@ -5254,6 +5197,8 @@ void OpenAll() return; } + fading = fading_none; + game_status = GAME_MODE_MAIN; DrawMainMenu();