X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=4ae7ac786e50266add635f325f26463f70dfaf15;hb=50f0681cf3069e35f434c03825ad56bd80dabcbf;hp=ae35cda2e225c8b999e98111604d95207978218f;hpb=dbe473b63ac67dabfb47c82e104f2b8f33ca2d51;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index ae35cda2..4ae7ac78 100644 --- a/src/screens.c +++ b/src/screens.c @@ -317,6 +317,9 @@ static struct } volumes_list[] = { { 0, "0 %" }, + { 1, "1 %" }, + { 2, "2 %" }, + { 5, "5 %" }, { 10, "10 %" }, { 20, "20 %" }, { 30, "30 %" }, @@ -961,10 +964,8 @@ static void InitializeMainControls() if (pos_button != NULL) /* (x/y may be -1/-1 here) */ { - if (pos_button->width == 0) - pos_button->width = button_width; - if (pos_button->height == 0) - pos_button->height = button_height; + pos_button->width = button_width; + pos_button->height = button_height; } if (pos_text != NULL) /* (x/y may be -1/-1 here) */ @@ -1311,9 +1312,6 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading) KeyboardAutoRepeatOn(); ActivateJoystick(); - SetDrawDeactivationMask(REDRAW_NONE); - SetDrawBackgroundMask(REDRAW_FIELD); - audio.sound_deactivated = FALSE; GetPlayerConfig(); @@ -1375,10 +1373,14 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading) LoadLevel(level_nr); LoadScore(level_nr); + // set this after "ChangeViewportPropertiesIfNeeded()" (which may reset it) + SetDrawDeactivationMask(REDRAW_NONE); + SetDrawBackgroundMask(REDRAW_FIELD); + SetMainBackgroundImage(IMG_BACKGROUND_MAIN); if (fade_mask == REDRAW_ALL) - RedrawBackground(); + RedrawGlobalBorder(); ClearField(); @@ -1620,9 +1622,11 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (game_status == GAME_MODE_INFO) { + int fade_mask = (num_title_screens == 0 ? REDRAW_FIELD : REDRAW_ALL); + info_mode = INFO_MODE_MAIN; - DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu); + DrawInfoScreenExt(fade_mask, use_fading_main_menu); } else /* default: return to main menu */ { @@ -1952,7 +1956,7 @@ static void DrawInfoScreen_Main(int fade_mask, boolean do_fading) if (fade_mask == REDRAW_ALL) { - RedrawBackground(); + RedrawGlobalBorder(); OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); } @@ -2091,7 +2095,7 @@ void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) int ystart2 = mSY - SY + 150; int ybottom = mSY - SY + SYSIZE - 20; - SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); + SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO); FadeOut(REDRAW_FIELD); @@ -3018,6 +3022,41 @@ void DrawInfoScreen_LevelSet() { struct TitleMessageInfo *tmi = &readme; char *filename = getLevelSetInfoFilename(); + char *title = "Level Set Information:"; + int ystart1 = mSY - SY + 100; + int ybottom = mSY - SY + SYSIZE - 20; + + if (filename == NULL) + { + DrawInfoScreen_NotAvailable(title, "No information for this level set."); + + return; + } + + SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); + + FadeOut(REDRAW_FIELD); + + ClearField(); + DrawHeadline(); + + DrawTextSCentered(ystart1, FONT_TEXT_1, title); + + /* if x position set to "-1", automatically determine by playfield width */ + if (tmi->x == -1) + tmi->x = SXSIZE / 2; + + /* if y position set to "-1", use static default value */ + if (tmi->y == -1) + tmi->y = 150; + + /* if width set to "-1", automatically determine by playfield width */ + if (tmi->width == -1) + tmi->width = SXSIZE - 2 * TILEX; + + /* if height set to "-1", automatically determine by playfield height */ + if (tmi->height == -1) + tmi->height = SYSIZE - 20 - tmi->y - 10; /* if chars set to "-1", automatically determine by text and font width */ if (tmi->chars == -1) @@ -3031,25 +3070,12 @@ void DrawInfoScreen_LevelSet() else tmi->height = tmi->lines * getFontHeight(tmi->font); - SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); - - FadeOut(REDRAW_FIELD); - - ClearField(); - DrawHeadline(); - - DrawTextCentered(mSY + 100, FONT_TEXT_1, "Level Set Information:"); - - if (filename != NULL) - DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi), - filename, tmi->font, tmi->chars, -1, tmi->lines, 0, -1, - tmi->autowrap, tmi->centered, tmi->parse_comments); - else - DrawTextCentered(mSY + ALIGNED_TEXT_YPOS(tmi), FONT_TEXT_2, - "No information for this level set."); + DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi), + filename, tmi->font, tmi->chars, -1, tmi->lines, 0, -1, + tmi->autowrap, tmi->centered, tmi->parse_comments); - DrawTextCentered(mSY + SYSIZE - 20, FONT_TEXT_4, - "Press any key or button for info menu"); + DrawTextSCentered(ybottom, FONT_TEXT_4, + "Press any key or button for info menu"); FadeIn(REDRAW_FIELD); } @@ -3230,6 +3256,8 @@ void HandleTypeName(int newxpos, Key key) static void DrawChooseTree(TreeInfo **ti_ptr) { + int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD); + UnmapAllGadgets(); FreeScreenGadgets(); @@ -3237,14 +3265,14 @@ static void DrawChooseTree(TreeInfo **ti_ptr) CloseDoor(DOOR_CLOSE_2); - FadeOut(REDRAW_FIELD); + FadeOut(fade_mask); ClearField(); HandleChooseTree(0, 0, 0, 0, MB_MENU_INITIALIZE, ti_ptr); MapScreenTreeGadgets(*ti_ptr); - FadeIn(REDRAW_FIELD); + FadeIn(fade_mask); InitAnimation(); } @@ -3273,8 +3301,8 @@ static void clearMenuListArea() int scrollbar_xpos = mSX + SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset; /* correct scrollbar position if placed outside menu (playfield) area */ - if (scrollbar_xpos > SC_SCROLLBAR_XPOS) - scrollbar_xpos = SC_SCROLLBAR_XPOS; + if (scrollbar_xpos > SX + SC_SCROLLBAR_XPOS) + scrollbar_xpos = SX + SC_SCROLLBAR_XPOS; /* clear menu list area, but not title or scrollbar */ DrawBackground(mSX, mSY + MENU_SCREEN_START_YPOS * 32, @@ -3746,6 +3774,8 @@ void HandleChooseLevelNr(int mx, int my, int dx, int dy, int button) void DrawHallOfFame(int highlight_position) { + int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD); + UnmapAllGadgets(); FadeSoundsAndMusic(); @@ -3764,7 +3794,7 @@ void DrawHallOfFame(int highlight_position) FadeSetEnterScreen(); - FadeOut(REDRAW_FIELD); + FadeOut(fade_mask); InitAnimation(); @@ -3773,7 +3803,7 @@ void DrawHallOfFame(int highlight_position) HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE); - FadeIn(REDRAW_FIELD); + FadeIn(fade_mask); } static void drawHallOfFameList(int first_entry, int highlight_position) @@ -4322,6 +4352,7 @@ static void execSetupSound() { if (volumes_simple == NULL) { + boolean current_volume_simple_found = FALSE; int i; for (i = 0; volumes_list[i].value != -1; i++) @@ -4343,6 +4374,31 @@ static void execSetupSound() setString(&ti->infotext, "Sound Volume"); pushTreeInfo(&volumes_simple, ti); + + if (value == setup.volume_simple) + current_volume_simple_found = TRUE; + } + + if (!current_volume_simple_found) + { + // add entry for non-preset volume value + + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = setup.volume_simple; + + ti->node_top = &volumes_simple; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%d %% (Current)", value); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Sound Volume"); + + pushTreeInfo(&volumes_simple, ti); } /* sort volume values to start with lowest volume value */ @@ -4364,6 +4420,7 @@ static void execSetupSound() if (volumes_loops == NULL) { + boolean current_volume_loops_found = FALSE; int i; for (i = 0; volumes_list[i].value != -1; i++) @@ -4385,6 +4442,31 @@ static void execSetupSound() setString(&ti->infotext, "Loops Volume"); pushTreeInfo(&volumes_loops, ti); + + if (value == setup.volume_loops) + current_volume_loops_found = TRUE; + } + + if (!current_volume_loops_found) + { + // add entry for non-preset volume value + + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = setup.volume_loops; + + ti->node_top = &volumes_loops; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%d %% (Current)", value); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Loops Volume"); + + pushTreeInfo(&volumes_loops, ti); } /* sort volume values to start with lowest volume value */ @@ -4406,6 +4488,7 @@ static void execSetupSound() if (volumes_music == NULL) { + boolean current_volume_music_found = FALSE; int i; for (i = 0; volumes_list[i].value != -1; i++) @@ -4427,6 +4510,31 @@ static void execSetupSound() setString(&ti->infotext, "Music Volume"); pushTreeInfo(&volumes_music, ti); + + if (value == setup.volume_music) + current_volume_music_found = TRUE; + } + + if (!current_volume_music_found) + { + // add entry for non-preset volume value + + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = setup.volume_music; + + ti->node_top = &volumes_music; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%d %% (Current)", value); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Music Volume"); + + pushTreeInfo(&volumes_music, ti); } /* sort volume values to start with lowest volume value */ @@ -5291,6 +5399,7 @@ static void drawSetupInfoList(struct TokenInfo *setup_info, static void DrawSetupScreen_Generic() { + int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD); boolean redraw_all = FALSE; char *title_string = NULL; int i; @@ -5305,7 +5414,7 @@ static void DrawSetupScreen_Generic() if (redraw_mask & REDRAW_ALL) redraw_all = TRUE; - FadeOut(REDRAW_FIELD); + FadeOut(fade_mask); ClearField(); @@ -5392,9 +5501,9 @@ static void DrawSetupScreen_Generic() MapScreenGadgets(max_setup_info); if (redraw_all) - redraw_mask = REDRAW_ALL; + redraw_mask = fade_mask = REDRAW_ALL; - FadeIn(redraw_mask); + FadeIn(fade_mask); InitAnimation(); } @@ -6569,8 +6678,8 @@ static void CreateScreenScrollbuttons() height = SC_SCROLLBUTTON_YSIZE; /* correct scrollbar position if placed outside menu (playfield) area */ - if (x > SC_SCROLL_UP_XPOS) - x = SC_SCROLL_UP_XPOS; + if (x > SX + SC_SCROLL_UP_XPOS) + x = SX + SC_SCROLL_UP_XPOS; if (id == SCREEN_CTRL_ID_SCROLL_DOWN) y = mSY + (SC_SCROLL_VERTICAL_YPOS + @@ -6638,8 +6747,8 @@ static void CreateScreenScrollbars() height = scrollbar_info[i].height; /* correct scrollbar position if placed outside menu (playfield) area */ - if (x > SC_SCROLL_VERTICAL_XPOS) - x = SC_SCROLL_VERTICAL_XPOS; + if (x > SX + SC_SCROLL_VERTICAL_XPOS) + x = SX + SC_SCROLL_VERTICAL_XPOS; if (id == SCREEN_CTRL_ID_SCROLL_VERTICAL) height = (NUM_MENU_ENTRIES_ON_SCREEN - 2) * SC_SCROLLBUTTON_YSIZE;