X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=bd9b5fd1449f0ef80c9a3fd27a679bea7005452c;hb=e300f91a9ee9f6160aff68d3bc50a21b797d9941;hp=57f7a4bcd35035605ddaaecacff1156370eaba5b;hpb=8acfa954d5b7d689ee20ffd1ed5a238909e1a1cc;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 57f7a4bc..bd9b5fd1 100644 --- a/src/screens.c +++ b/src/screens.c @@ -461,7 +461,8 @@ static void InitializeMainControls() } } -static void DrawCursorAndText_Main(int nr, boolean active) +static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, + boolean active_input) { int i; @@ -480,12 +481,17 @@ static void DrawCursorAndText_Main(int nr, boolean active) int font_text = mci->font_text; int font_input = mci->font_input; - if (active) + if (active_text) { button_graphic = BUTTON_GRAPHIC_ACTIVE(button_graphic); font_text = FONT_ACTIVE(font_text); } + if (active_input) + { + font_input = FONT_ACTIVE(font_input); + } + if (pos_button != NULL) { struct MenuPosInfo *pos = pos_button; @@ -519,6 +525,18 @@ static void DrawCursorAndText_Main(int nr, boolean active) } } +static void DrawCursorAndText_Main(int nr, boolean active_text) +{ + DrawCursorAndText_Main_Ext(nr, active_text, FALSE); +} + +#if 0 +static void DrawCursorAndText_Main_Input(int nr, boolean active_text) +{ + DrawCursorAndText_Main_Ext(nr, active_text, TRUE); +} +#endif + static struct MainControlInfo *getMainControlInfo(int nr) { int i; @@ -624,6 +642,14 @@ static int getTitleScreenGraphic() IMG_TITLESCREEN_1); } +int effectiveGameStatus() +{ + if (game_status == GAME_MODE_INFO && info_mode == INFO_MODE_TITLE) + return GAME_MODE_TITLE; + + return game_status; +} + void DrawTitleScreenImage(int nr) { int graphic = getTitleScreenGraphic() + nr; @@ -683,6 +709,41 @@ void DrawTitleScreenImage(int nr) title.auto_delay_final = graphic_info[graphic].auto_delay; } +void DrawTitleScreenMessage(char *filename) +{ + int font_nr = FONT_TEXT_1; + int font_width; + int font_height; + int pad_x = 16; + int pad_y = 32; + int sx = pad_x; + int sy = pad_y; + int max_chars_per_line; + int max_lines_per_screen; + int last_game_status = game_status; /* save current game status */ + + if (filename == NULL) + return; + + SetDrawBackgroundMask(REDRAW_ALL); + SetWindowBackgroundImageIfDefined(IMG_BACKGROUND_MESSAGE); + + ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); + + /* force MESSAGE font on title message screen */ + game_status = GAME_MODE_MESSAGE; + + font_width = getFontWidth(font_nr); + font_height = getFontHeight(font_nr); + max_chars_per_line = (WIN_XSIZE - 2 * pad_x) / font_width; + max_lines_per_screen = (WIN_YSIZE - pad_y) / font_height - 1; + + DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line, + max_lines_per_screen, FALSE); + + game_status = last_game_status; /* restore current game status */ +} + void DrawTitleScreen() { KeyboardAutoRepeatOff(); @@ -754,7 +815,8 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) if (setup.show_titlescreen && ((levelset_has_changed && - graphic_info[IMG_TITLESCREEN_1].bitmap != NULL) || + (graphic_info[IMG_TITLESCREEN_1].bitmap != NULL || + getLevelSetMessageFilename() != NULL)) || (show_titlescreen_initial && graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap != NULL))) { @@ -922,9 +984,13 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { static unsigned long title_delay = 0; static int title_nr = 0; + static boolean showing_message = FALSE; + char *filename = getLevelSetMessageFilename(); boolean return_to_main_menu = FALSE; boolean use_fading_main_menu = TRUE; boolean use_cross_fading = !show_titlescreen_initial; /* default */ + boolean no_title_info = (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL && + filename == NULL); if (button == MB_MENU_INITIALIZE) { @@ -932,6 +998,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) title_delay = 0; title_nr = 0; + showing_message = FALSE; if (show_titlescreen_initial && graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap == NULL) @@ -939,7 +1006,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (game_status == GAME_MODE_INFO) { - if (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL) + if (no_title_info) { DrawInfoScreen_NotAvailable("Title screen information:", "No title screen for this level set."); @@ -962,7 +1029,20 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) game_status = last_game_status; /* restore current game status */ - DrawTitleScreenImage(title_nr); + if (graphic_info[getTitleScreenGraphic()].bitmap != NULL) + { + DrawTitleScreenImage(title_nr); + } + else + { + DrawTitleScreenMessage(filename); + + showing_message = TRUE; + + title.fade_delay_final = title.fade_delay; + title.post_delay_final = title.post_delay; + title.auto_delay_final = -1; + } FadeIn(REDRAW_ALL); @@ -984,8 +1064,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { int anim_mode; - if (game_status == GAME_MODE_INFO && - graphic_info[IMG_TITLESCREEN_1].bitmap == NULL) + if (game_status == GAME_MODE_INFO && no_title_info) { FadeOut(REDRAW_FIELD); @@ -1030,6 +1109,22 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) DelayReached(&title_delay, 0); /* reset delay counter */ } + else if (!showing_message && filename != NULL) + { + if (use_cross_fading) + FadeCrossSaveBackbuffer(); + + DrawTitleScreenMessage(filename); + + if (use_cross_fading) + FadeCross(REDRAW_ALL); + else + FadeIn(REDRAW_ALL); + + DelayReached(&title_delay, 0); /* reset delay counter */ + + showing_message = TRUE; + } else { FadeSoundsAndMusic(); @@ -1091,6 +1186,8 @@ void HandleMainMenu_SelectLevel(int step, int direction) { struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_CURRENT_LEVEL); + PlaySound(SND_MENU_ITEM_SELECTING); + level_nr = new_level_nr; #if 1 @@ -1163,6 +1260,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) { if (pos != choice) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + DrawCursorAndText_Main(choice, FALSE); DrawCursorAndText_Main(pos, TRUE); @@ -1171,6 +1270,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) } else { + PlaySound(SND_MENU_ITEM_SELECTING); + if (pos == MAIN_CONTROL_NAME) { game_status = GAME_MODE_PSEUDO_TYPENAME; @@ -1571,6 +1672,8 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button) { if (y != choice) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + #if 1 DrawCursorAndText_Info(choice, FALSE); DrawCursorAndText_Info(y, TRUE); @@ -1584,6 +1687,8 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button) } else if (!(info_info[y].type & TYPE_GHOSTED)) { + PlaySound(SND_MENU_ITEM_SELECTING); + if (info_info[y].type & TYPE_ENTER_OR_LEAVE) { void (*menu_callback_function)(void) = info_info[choice].value; @@ -1834,6 +1939,8 @@ void HandleInfoScreen_Elements(int button) if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -1842,7 +1949,11 @@ void HandleInfoScreen_Elements(int button) else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE) { if (button != MB_MENU_INITIALIZE) + { + PlaySound(SND_MENU_ITEM_SELECTING); + page++; + } if (page >= num_pages) { @@ -1917,6 +2028,10 @@ void HandleInfoScreen_Music(int button) if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + + FadeSoundsAndMusic(); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -1927,8 +2042,12 @@ void HandleInfoScreen_Music(int button) int y = 0; if (button != MB_MENU_INITIALIZE) + { + PlaySound(SND_MENU_ITEM_SELECTING); + if (list != NULL) list = list->next; + } if (list == NULL) { @@ -2216,6 +2335,8 @@ void HandleInfoScreen_Credits(int button) } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2225,6 +2346,8 @@ void HandleInfoScreen_Credits(int button) { boolean show_screen; + PlaySound(SND_MENU_ITEM_SELECTING); + screen_nr++; FadeCrossSaveBackbuffer(); @@ -2301,6 +2424,8 @@ void HandleInfoScreen_Program(int button) { if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2308,6 +2433,8 @@ void HandleInfoScreen_Program(int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSoundsAndMusic(); FadeOut(REDRAW_FIELD); @@ -2349,7 +2476,7 @@ void DrawInfoScreen_LevelSet() if (filename != NULL) DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line, - max_lines_per_screen); + max_lines_per_screen, TRUE); else DrawTextSCentered(ystart, FONT_TEXT_2, "No information for this level set."); @@ -2361,6 +2488,8 @@ void HandleInfoScreen_LevelSet(int button) { if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2368,6 +2497,8 @@ void HandleInfoScreen_LevelSet(int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSoundsAndMusic(); FadeOut(REDRAW_FIELD); @@ -2446,6 +2577,11 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button) void HandleTypeName(int newxpos, Key key) { struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME); +#if 1 + struct MenuPosInfo *pos = mci->pos_input; + int startx = mSX + ALIGNED_XPOS(pos->x, pos->width, pos->align); + int starty = mSY + pos->y; +#endif #if 1 static int xpos = 0; #else @@ -2455,8 +2591,10 @@ void HandleTypeName(int newxpos, Key key) int font_active_nr = FONT_ACTIVE(font_nr); int font_width = getFontWidth(font_active_nr); #if 1 +#if 0 int startx = mSX + mci->pos_input->x; int starty = mSY + mci->pos_input->y; +#endif #else int name_width = getFontWidth(FONT_MENU_1) * strlen("Name:"); int startx = mSX + 32 + name_width; @@ -2705,6 +2843,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + if (ti->node_parent) { *ti_ptr = ti->node_parent; @@ -2805,6 +2945,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, if (node_cursor->node_group) { + PlaySound(SND_MENU_ITEM_SELECTING); + node_cursor->cl_first = ti->cl_first; node_cursor->cl_cursor = ti->cl_cursor; *ti_ptr = node_cursor->node_group; @@ -2815,6 +2957,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else if (dx == -1 && ti->node_parent) { + PlaySound(SND_MENU_ITEM_SELECTING); + *ti_ptr = ti->node_parent; DrawChooseTree(ti_ptr); @@ -2830,6 +2974,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, { if (y != ti->cl_cursor) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + drawChooseTreeCursor(ti->cl_cursor, FALSE); drawChooseTreeCursor(y, TRUE); drawChooseTreeInfo(ti->cl_first + y, ti); @@ -2842,6 +2988,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, TreeInfo *node_first, *node_cursor; int entry_pos = ti->cl_first + y; + PlaySound(SND_MENU_ITEM_SELECTING); + node_first = getTreeInfoFirstGroupEntry(ti); node_cursor = getTreeInfoFromPos(node_first, entry_pos); @@ -3015,6 +3163,8 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSound(SND_BACKGROUND_SCORES); game_status = GAME_MODE_MAIN; @@ -3023,6 +3173,8 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSound(SND_BACKGROUND_SCORES); FadeOut(REDRAW_FIELD); @@ -3255,6 +3407,7 @@ static struct TokenInfo setup_info_editor[] = { TYPE_SWITCH, &setup.editor.el_dx_boulderdash,"DX-Boulderdash:" }, #endif { TYPE_SWITCH, &setup.editor.el_chars, "Text Characters:" }, + { TYPE_SWITCH, &setup.editor.el_steelchars,"Text Characters (Steel):"}, { TYPE_SWITCH, &setup.editor.el_custom, "Custom & Group Elements:" }, #if 0 { TYPE_SWITCH, &setup.editor.el_headlines, "Headlines:" }, @@ -3714,6 +3867,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + for (y = 0; y < num_setup_info; y++) { if (setup_info[y].type & TYPE_LEAVE_MENU) @@ -3759,6 +3914,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) { if (y != choice && setup_info[y].type & ~TYPE_SKIP_ENTRY) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + #if 1 DrawCursorAndText_Setup(choice, FALSE); DrawCursorAndText_Setup(y, TRUE); @@ -3772,6 +3929,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) } else if (!(setup_info[y].type & TYPE_GHOSTED)) { + PlaySound(SND_MENU_ITEM_SELECTING); + /* when selecting key headline, execute function for key value change */ if (setup_info[y].type & TYPE_KEYTEXT && setup_info[y + 1].type & TYPE_KEY)