X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=61f34507ee8d11ad6077020fd7ec1d5c54251b99;hb=590e9a86daa2b0d3923673bfe02525766224808e;hp=1aaf95d0457650b76459e304e194a46a08109b72;hpb=37d67ecd5de70639fa2818501f17fea5b49a3d6a;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 1aaf95d0..61f34507 100644 --- a/src/screens.c +++ b/src/screens.c @@ -245,7 +245,6 @@ static Bitmap *scrollbar_bitmap[NUM_SCROLLBAR_BITMAPS]; #define MAX_NUM_TITLE_SCREENS (2 * MAX_NUM_TITLE_IMAGES + \ 2 * MAX_NUM_TITLE_MESSAGES) -static boolean show_title_initial = TRUE; static int num_title_screens = 0; struct TitleControlInfo @@ -253,6 +252,7 @@ struct TitleControlInfo boolean is_image; boolean initial; int local_nr; + int sort_priority; }; struct TitleControlInfo title_controls[MAX_NUM_TITLE_SCREENS]; @@ -260,30 +260,56 @@ struct TitleControlInfo title_controls[MAX_NUM_TITLE_SCREENS]; /* main menu display and control definitions */ -#define MAIN_CONTROL_NAME 0 -#define MAIN_CONTROL_LEVELS 1 -#define MAIN_CONTROL_SCORES 2 -#define MAIN_CONTROL_EDITOR 3 -#define MAIN_CONTROL_INFO 4 -#define MAIN_CONTROL_GAME 5 -#define MAIN_CONTROL_SETUP 6 -#define MAIN_CONTROL_QUIT 7 -#define MAIN_CONTROL_PREV_LEVEL 8 -#define MAIN_CONTROL_NEXT_LEVEL 9 -#define MAIN_CONTROL_CURRENT_LEVEL 10 -#define MAIN_CONTROL_FIRST_LEVEL 11 -#define MAIN_CONTROL_LAST_LEVEL 12 -#define MAIN_CONTROL_LEVEL_INFO_1 13 -#define MAIN_CONTROL_LEVEL_INFO_2 14 -#define MAIN_CONTROL_TITLE_1 15 -#define MAIN_CONTROL_TITLE_2 16 -#define MAIN_CONTROL_TITLE_3 17 - -static char main_text_name[10]; -static char main_text_current_level[10]; -static char main_text_first_level[10]; -static char main_text_last_level[10]; -static char main_input_name[MAX_PLAYER_NAME_LEN + 1]; +#define MAIN_CONTROL_NAME 0 +#define MAIN_CONTROL_LEVELS 1 +#define MAIN_CONTROL_SCORES 2 +#define MAIN_CONTROL_EDITOR 3 +#define MAIN_CONTROL_INFO 4 +#define MAIN_CONTROL_GAME 5 +#define MAIN_CONTROL_SETUP 6 +#define MAIN_CONTROL_QUIT 7 +#define MAIN_CONTROL_PREV_LEVEL 8 +#define MAIN_CONTROL_NEXT_LEVEL 9 +#define MAIN_CONTROL_CURRENT_LEVEL 10 +#define MAIN_CONTROL_FIRST_LEVEL 11 +#define MAIN_CONTROL_LAST_LEVEL 12 +#define MAIN_CONTROL_LEVEL_INFO_1 13 +#define MAIN_CONTROL_LEVEL_INFO_2 14 +#define MAIN_CONTROL_LEVEL_NAME 15 +#define MAIN_CONTROL_LEVEL_AUTHOR 16 +#define MAIN_CONTROL_LEVEL_YEAR 17 +#define MAIN_CONTROL_LEVEL_IMPORTED_FROM 18 +#define MAIN_CONTROL_LEVEL_IMPORTED_BY 19 +#define MAIN_CONTROL_LEVEL_TESTED_BY 20 +#define MAIN_CONTROL_TITLE_1 21 +#define MAIN_CONTROL_TITLE_2 22 +#define MAIN_CONTROL_TITLE_3 23 + +static char str_main_text_name[10]; +static char str_main_text_current_level[10]; +static char str_main_text_first_level[10]; +static char str_main_text_last_level[10]; + +static char *main_text_name = str_main_text_name; +static char *main_text_current_level = str_main_text_current_level; +static char *main_text_first_level = str_main_text_first_level; +static char *main_text_last_level = str_main_text_last_level; +static char *main_text_levels = "Levelset"; +static char *main_text_scores = "Hall Of Fame"; +static char *main_text_editor = "Level Creator"; +static char *main_text_info = "Info Screen"; +static char *main_text_game = "Start Game"; +static char *main_text_setup = "Setup"; +static char *main_text_quit = "Quit"; +static char *main_text_level_name = level.name; +static char *main_text_level_author = level.author; +static char *main_text_level_year = NULL; +static char *main_text_level_imported_from = NULL; +static char *main_text_level_imported_by = NULL; +static char *main_text_level_tested_by = NULL; +static char *main_text_title_1 = PROGRAM_TITLE_STRING; +static char *main_text_title_2 = PROGRAM_COPYRIGHT_STRING; +static char *main_text_title_3 = PROGRAM_GAME_BY_STRING; struct MainControlInfo { @@ -293,11 +319,11 @@ struct MainControlInfo int button_graphic; struct TextPosInfo *pos_text; - char *text; + char **text; int font_text; - struct MenuPosInfo *pos_input; - char *input; + struct TextPosInfo *pos_input; + char **input; int font_input; }; @@ -306,49 +332,49 @@ static struct MainControlInfo main_controls[] = { MAIN_CONTROL_NAME, &menu.main.button.name, IMG_MENU_BUTTON, - &menu.main.text.name, main_text_name, FONT_MENU_1, - &menu.main.input.name, main_input_name, FONT_INPUT_1, + &menu.main.text.name, &main_text_name, FONT_MENU_1, + &menu.main.input.name, &setup.player_name, FONT_INPUT_1, }, { MAIN_CONTROL_LEVELS, &menu.main.button.levels, IMG_MENU_BUTTON_ENTER_MENU, - &menu.main.text.levels, "Levelset", FONT_MENU_1, + &menu.main.text.levels, &main_text_levels, FONT_MENU_1, NULL, NULL, -1, }, { MAIN_CONTROL_SCORES, &menu.main.button.scores, IMG_MENU_BUTTON, - &menu.main.text.scores, "Hall Of Fame", FONT_MENU_1, + &menu.main.text.scores, &main_text_scores, FONT_MENU_1, NULL, NULL, -1, }, { MAIN_CONTROL_EDITOR, &menu.main.button.editor, IMG_MENU_BUTTON, - &menu.main.text.editor, "Level Creator", FONT_MENU_1, + &menu.main.text.editor, &main_text_editor, FONT_MENU_1, NULL, NULL, -1, }, { MAIN_CONTROL_INFO, &menu.main.button.info, IMG_MENU_BUTTON_ENTER_MENU, - &menu.main.text.info, "Info Screen", FONT_MENU_1, + &menu.main.text.info, &main_text_info, FONT_MENU_1, NULL, NULL, -1, }, { MAIN_CONTROL_GAME, &menu.main.button.game, IMG_MENU_BUTTON, - &menu.main.text.game, "Start Game", FONT_MENU_1, + &menu.main.text.game, &main_text_game, FONT_MENU_1, NULL, NULL, -1, }, { MAIN_CONTROL_SETUP, &menu.main.button.setup, IMG_MENU_BUTTON_ENTER_MENU, - &menu.main.text.setup, "Setup", FONT_MENU_1, + &menu.main.text.setup, &main_text_setup, FONT_MENU_1, NULL, NULL, -1, }, { MAIN_CONTROL_QUIT, &menu.main.button.quit, IMG_MENU_BUTTON, - &menu.main.text.quit, "Quit", FONT_MENU_1, + &menu.main.text.quit, &main_text_quit, FONT_MENU_1, NULL, NULL, -1, }, #if 0 @@ -369,19 +395,19 @@ static struct MainControlInfo main_controls[] = { MAIN_CONTROL_CURRENT_LEVEL, NULL, -1, - &menu.main.text.current_level, main_text_current_level,FONT_VALUE_1, + &menu.main.text.current_level, &main_text_current_level, FONT_VALUE_1, NULL, NULL, -1, }, { MAIN_CONTROL_FIRST_LEVEL, NULL, -1, - &menu.main.text.first_level, main_text_first_level, FONT_TEXT_3, + &menu.main.text.first_level, &main_text_first_level, FONT_TEXT_3, NULL, NULL, -1, }, { MAIN_CONTROL_LAST_LEVEL, NULL, -1, - &menu.main.text.last_level, main_text_last_level, FONT_TEXT_3, + &menu.main.text.last_level, &main_text_last_level, FONT_TEXT_3, NULL, NULL, -1, }, { @@ -396,22 +422,60 @@ static struct MainControlInfo main_controls[] = &menu.main.text.level_info_2, NULL, -1, NULL, NULL, -1, }, + { + MAIN_CONTROL_LEVEL_NAME, + NULL, -1, + &menu.main.text.level_name, &main_text_level_name, FONT_TEXT_2, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LEVEL_AUTHOR, + NULL, -1, + &menu.main.text.level_author, &main_text_level_author,FONT_TEXT_2, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LEVEL_YEAR, + NULL, -1, + &menu.main.text.level_year, &main_text_level_year, FONT_TEXT_2, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LEVEL_IMPORTED_FROM, + NULL, -1, + &menu.main.text.level_imported_from, &main_text_level_imported_from, + FONT_TEXT_2, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LEVEL_IMPORTED_BY, + NULL, -1, + &menu.main.text.level_imported_by, &main_text_level_imported_by, + FONT_TEXT_2, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LEVEL_TESTED_BY, + NULL, -1, + &menu.main.text.level_tested_by, &main_text_level_tested_by, FONT_TEXT_2, + NULL, NULL, -1, + }, { MAIN_CONTROL_TITLE_1, NULL, -1, - &menu.main.text.title_1, PROGRAM_TITLE_STRING, FONT_TITLE_1, + &menu.main.text.title_1, &main_text_title_1, FONT_TITLE_1, NULL, NULL, -1, }, { MAIN_CONTROL_TITLE_2, NULL, -1, - &menu.main.text.title_2, PROGRAM_COPYRIGHT_STRING, FONT_TITLE_2, + &menu.main.text.title_2, &main_text_title_2, FONT_TITLE_2, NULL, NULL, -1, }, { MAIN_CONTROL_TITLE_3, NULL, -1, - &menu.main.text.title_3, PROGRAM_GAME_BY_STRING, FONT_TITLE_2, + &menu.main.text.title_3, &main_text_title_3, FONT_TITLE_2, NULL, NULL, -1, }, @@ -429,12 +493,35 @@ static int getTitleScreenGraphic(int nr, boolean initial) return (initial ? IMG_TITLESCREEN_INITIAL_1 : IMG_TITLESCREEN_1) + nr; } +static struct TitleMessageInfo *getTitleMessageInfo(int nr, boolean initial) +{ + return (initial ? &titlemessage_initial[nr] : &titlemessage[nr]); +} + +static int compareTitleControlInfo(const void *object1, const void *object2) +{ + const struct TitleControlInfo *tci1 = (struct TitleControlInfo *)object1; + const struct TitleControlInfo *tci2 = (struct TitleControlInfo *)object2; + int compare_result; + + if (tci1->initial != tci2->initial) + compare_result = (tci1->initial ? -1 : +1); + else if (tci1->sort_priority != tci2->sort_priority) + compare_result = tci1->sort_priority - tci2->sort_priority; + else + compare_result = tci1->local_nr - tci2->local_nr; + + return compare_result; +} + static void InitializeTitleControlsExt_AddTitleInfo(boolean is_image, - boolean initial, int nr) + boolean initial, + int nr, int sort_priority) { title_controls[num_title_screens].is_image = is_image; title_controls[num_title_screens].initial = initial; title_controls[num_title_screens].local_nr = nr; + title_controls[num_title_screens].sort_priority = sort_priority; num_title_screens++; } @@ -444,15 +531,27 @@ static void InitializeTitleControls_CheckTitleInfo(boolean initial) int i; for (i = 0; i < MAX_NUM_TITLE_IMAGES; i++) - if (graphic_info[getTitleScreenGraphic(i, initial)].bitmap != NULL) - InitializeTitleControlsExt_AddTitleInfo(TRUE, initial, i); + { + int graphic = getTitleScreenGraphic(i, initial); + Bitmap *bitmap = graphic_info[graphic].bitmap; + int sort_priority = graphic_info[graphic].sort_priority; + + if (bitmap != NULL) + InitializeTitleControlsExt_AddTitleInfo(TRUE, initial, i, sort_priority); + } for (i = 0; i < MAX_NUM_TITLE_MESSAGES; i++) - if (getLevelSetTitleMessageFilename(i, initial) != NULL) - InitializeTitleControlsExt_AddTitleInfo(FALSE, initial, i); + { + struct TitleMessageInfo *tmi = getTitleMessageInfo(i, initial); + char *filename = getLevelSetTitleMessageFilename(i, initial); + int sort_priority = tmi->sort_priority; + + if (filename != NULL) + InitializeTitleControlsExt_AddTitleInfo(FALSE, initial, i, sort_priority); + } } -static void InitializeTitleControls() +static void InitializeTitleControls(boolean show_title_initial) { num_title_screens = 0; @@ -460,6 +559,20 @@ static void InitializeTitleControls() InitializeTitleControls_CheckTitleInfo(TRUE); InitializeTitleControls_CheckTitleInfo(FALSE); + + /* sort title screens according to sort_priority and title number */ + qsort(title_controls, num_title_screens, sizeof(struct TitleControlInfo), + compareTitleControlInfo); +} + +static boolean visibleMenuPos(struct MenuPosInfo *pos) +{ + return (pos != NULL && pos->x != -1 && pos->y != -1); +} + +static boolean visibleTextPos(struct TextPosInfo *pos) +{ + return (pos != NULL && pos->x != -1 && pos->y != -1); } static void InitializeMainControls() @@ -472,7 +585,11 @@ static void InitializeMainControls() sprintf(main_text_current_level, "%s", int2str(level_nr, 3)); sprintf(main_text_first_level, "%03d", leveldir_current->first_level); sprintf(main_text_last_level, "%03d", leveldir_current->last_level); - sprintf(main_input_name, "%s", setup.player_name); + + main_text_level_year = leveldir_current->year; + main_text_level_imported_from = leveldir_current->imported_from; + main_text_level_imported_by = leveldir_current->imported_by; + main_text_level_tested_by = leveldir_current->tested_by; /* set main control screen positions to dynamically determined values */ for (i = 0; main_controls[i].nr != -1; i++) @@ -481,9 +598,9 @@ static void InitializeMainControls() int nr = mci->nr; struct MenuPosInfo *pos_button = mci->pos_button; struct TextPosInfo *pos_text = mci->pos_text; - struct MenuPosInfo *pos_input = mci->pos_input; - char *text = mci->text; - char *input = mci->input; + struct TextPosInfo *pos_input = mci->pos_input; + char *text = (mci->text ? *mci->text : NULL); + char *input = (mci->input ? *mci->input : NULL); int button_graphic = mci->button_graphic; int font_text = mci->font_text; int font_input = mci->font_input; @@ -522,7 +639,7 @@ static void InitializeMainControls() #endif } - if (pos_button != NULL) + if (pos_button != NULL) /* (x/y may be -1/-1 here) */ { if (pos_button->width == 0) pos_button->width = button_width; @@ -530,15 +647,18 @@ static void InitializeMainControls() pos_button->height = button_height; } - if (pos_text != NULL) + if (pos_text != NULL) /* (x/y may be -1/-1 here) */ { /* calculate width for non-clickable text -- needed for text alignment */ boolean calculate_text_width = (pos_button == NULL && text != NULL); - if (pos_text->x == -1 && pos_button != NULL) - pos_text->x = pos_button->x + pos_button->width; - if (pos_text->y == -1 && pos_button != NULL) - pos_text->y = pos_button->y; + if (visibleMenuPos(pos_button)) + { + if (pos_text->x == -1) + pos_text->x = pos_button->x + pos_button->width; + if (pos_text->y == -1) + pos_text->y = pos_button->y; + } if (pos_text->width == -1 || calculate_text_width) pos_text->width = text_width; @@ -546,12 +666,15 @@ static void InitializeMainControls() pos_text->height = text_height; } - if (pos_input != NULL) + if (pos_input != NULL) /* (x/y may be -1/-1 here) */ { - if (pos_input->x == -1 && pos_text != NULL) - pos_input->x = pos_text->x + pos_text->width; - if (pos_input->y == -1 && pos_text != NULL) - pos_input->y = pos_text->y; + if (visibleTextPos(pos_text)) + { + if (pos_input->x == -1) + pos_input->x = pos_text->x + pos_text->width; + if (pos_input->y == -1) + pos_input->y = pos_text->y; + } if (pos_input->width == -1) pos_input->width = input_width; @@ -574,9 +697,9 @@ static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, { struct MenuPosInfo *pos_button = mci->pos_button; struct TextPosInfo *pos_text = mci->pos_text; - struct MenuPosInfo *pos_input = mci->pos_input; - char *text = mci->text; - char *input = mci->input; + struct TextPosInfo *pos_input = mci->pos_input; + char *text = (mci->text ? *mci->text : NULL); + char *input = (mci->input ? *mci->input : NULL); int button_graphic = mci->button_graphic; int font_text = mci->font_text; int font_input = mci->font_input; @@ -592,7 +715,7 @@ static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, font_input = FONT_ACTIVE(font_input); } - if (pos_button != NULL) + if (visibleMenuPos(pos_button)) { struct MenuPosInfo *pos = pos_button; int x = mSX + pos->x; @@ -602,7 +725,7 @@ static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, DrawGraphicThruMaskExt(drawto, x, y, button_graphic, 0); } - if (pos_text != NULL && text != NULL) + if (visibleTextPos(pos_text) && text != NULL) { struct TextPosInfo *pos = pos_text; int x = mSX + ALIGNED_MENU_XPOS(pos); @@ -612,9 +735,9 @@ static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, DrawText(x, y, text, font_text); } - if (pos_input != NULL && input != NULL) + if (visibleTextPos(pos_input) && input != NULL) { - struct MenuPosInfo *pos = pos_input; + struct TextPosInfo *pos = pos_input; int x = mSX + ALIGNED_MENU_XPOS(pos); int y = mSY + ALIGNED_MENU_YPOS(pos); @@ -792,6 +915,9 @@ void DrawTitleScreenImage(int nr, boolean initial) dst_x = (WIN_XSIZE - width) / 2; dst_y = (WIN_YSIZE - height) / 2; + SetDrawBackgroundMask(REDRAW_ALL); + SetWindowBackgroundImage(IMG_BACKGROUND_TITLE); + ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); if (DrawingOnBackground(dst_x, dst_y)) @@ -833,7 +959,7 @@ void DrawTitleScreenMessage(int nr, boolean initial) return; SetDrawBackgroundMask(REDRAW_ALL); - SetWindowBackgroundImageIfDefined(IMG_BACKGROUND_MESSAGE); + SetWindowBackgroundImage(IMG_BACKGROUND_MESSAGE); ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); @@ -845,8 +971,8 @@ void DrawTitleScreenMessage(int nr, boolean initial) 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); + DrawTextFile(sx, sy, filename, font_nr, max_chars_per_line, -1, + max_lines_per_screen, -1, FALSE, FALSE, FALSE); game_status = last_game_status; /* restore current game status */ } @@ -855,13 +981,32 @@ void DrawTitleScreen() { KeyboardAutoRepeatOff(); +#if 0 SetMainBackgroundImage(IMG_BACKGROUND_TITLE); +#endif HandleTitleScreen(0, 0, 0, 0, MB_MENU_INITIALIZE); StopAnimation(); } +boolean CheckTitleScreen(boolean levelset_has_changed) +{ + static boolean show_title_initial = TRUE; + boolean show_titlescreen = FALSE; + + /* needed to be able to skip title screen, if no image or message defined */ + InitializeTitleControls(show_title_initial); + + if (setup.show_titlescreen && (show_title_initial || levelset_has_changed)) + show_titlescreen = TRUE; + + /* show initial title images and messages only once at program start */ + show_title_initial = FALSE; + + return (show_titlescreen && num_title_screens > 0); +} + void DrawMainMenuExt(int redraw_mask, boolean do_fading) { static LevelDirTree *leveldir_last_valid = NULL; @@ -921,21 +1066,17 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) #endif #if 1 - if (setup.show_titlescreen && (show_title_initial || levelset_has_changed)) + if (CheckTitleScreen(levelset_has_changed)) { - /* needed to be able to skip title screen, if no image or message defined */ - InitializeTitleControls(); - - if (num_title_screens > 0) - { - game_status = GAME_MODE_TITLE; + game_status = GAME_MODE_TITLE; - DrawTitleScreen(); + DrawTitleScreen(); - return; - } + return; } + #else + if (setup.show_titlescreen && ((levelset_has_changed && (graphic_info[IMG_TITLESCREEN_1].bitmap != NULL || @@ -1114,7 +1255,11 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) static int title_screen_nr = 0; boolean return_to_main_menu = FALSE; boolean use_fading_main_menu = TRUE; +#if 1 + boolean use_cross_fading = FALSE; +#else boolean use_cross_fading = !show_title_initial; /* default */ +#endif struct TitleControlInfo *tci; if (button == MB_MENU_INITIALIZE) @@ -1125,8 +1270,10 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) title_screen_nr = 0; tci = &title_controls[title_screen_nr]; +#if 0 /* determine number of title screens to display (images and messages) */ InitializeTitleControls(); +#endif if (game_status == GAME_MODE_INFO) { @@ -1244,9 +1391,6 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (return_to_main_menu) { - /* show initial title images and messages only once at program start */ - show_title_initial = FALSE; - RedrawBackground(); SetMouseCursor(CURSOR_DEFAULT); @@ -1525,7 +1669,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) { if (insideMenuPosRect(main_controls[i].pos_button, mx - mSX, my - mSY) || insideTextPosRect(main_controls[i].pos_text, mx - mSX, my - mSY) || - insideMenuPosRect(main_controls[i].pos_input, mx - mSX, my - mSY)) + insideTextPosRect(main_controls[i].pos_input, mx - mSX, my - mSY)) { pos = main_controls[i].nr; @@ -2188,8 +2332,14 @@ void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos) if (strlen(text) <= max_chars_per_line) /* only one line of text */ sy += getFontHeight(font_nr) / 2; +#if 1 + DrawTextBuffer(sx, sy + ypos * ystep, text, font_nr, + max_chars_per_line, -1, max_lines_per_text, -1, + TRUE, FALSE, FALSE); +#else DrawTextWrapped(sx, sy + ypos * ystep, text, font_nr, max_chars_per_line, max_lines_per_text); +#endif } void DrawInfoScreen_TitleScreen() @@ -2775,14 +2925,16 @@ void DrawInfoScreen_Version() int ystart2 = mSY - SY + 150; int ybottom = mSY - SY + SYSIZE - 20; int xstart1 = mSX + 2 * xstep; - int xstart2 = mSX + 18 * xstep; + int xstart2 = mSX + 19 * xstep; #if defined(TARGET_SDL) - int xstart3 = mSX + 28 * xstep; + int xstart3 = mSX + 29 * xstep; SDL_version sdl_version_compiled; const SDL_version *sdl_version_linked; + int driver_name_len = 8; + char driver_name[driver_name_len]; #endif - SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM); + SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_VERSION); FadeOut(REDRAW_FIELD); @@ -2871,6 +3023,25 @@ void DrawInfoScreen_Version() sdl_version_linked->major, sdl_version_linked->minor, sdl_version_linked->patch); + + ystart2 += 3 * ystep; + DrawTextF(xstart1, ystart2, font_header, "Driver"); + DrawTextF(xstart2, ystart2, font_header, "Requested"); + DrawTextF(xstart3, ystart2, font_header, "Used"); + + SDL_VideoDriverName(driver_name, driver_name_len); + + ystart2 += 2 * ystep; + DrawTextF(xstart1, ystart2, font_text, "SDL_VideoDriver"); + DrawTextF(xstart2, ystart2, font_text, "%s", setup.system.sdl_videodriver); + DrawTextF(xstart3, ystart2, font_text, "%s", driver_name); + + SDL_AudioDriverName(driver_name, driver_name_len); + + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_text, "SDL_AudioDriver"); + DrawTextF(xstart2, ystart2, font_text, "%s", setup.system.sdl_audiodriver); + DrawTextF(xstart3, ystart2, font_text, "%s", driver_name); #endif DrawTextSCentered(ybottom, FONT_TEXT_4, @@ -2939,8 +3110,8 @@ void DrawInfoScreen_LevelSet() "Press any key or button for info menu"); if (filename != NULL) - DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line, - max_lines_per_screen, TRUE); + DrawTextFile(sx, sy, filename, font_nr, max_chars_per_line, -1, + max_lines_per_screen, -1, TRUE, FALSE, TRUE); else DrawTextSCentered(ystart2, FONT_TEXT_2, "No information for this level set."); @@ -3047,7 +3218,7 @@ void HandleTypeName(int newxpos, Key key) static char last_player_name[MAX_PLAYER_NAME_LEN + 1]; struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME); #if 1 - struct MenuPosInfo *pos = mci->pos_input; + struct TextPosInfo *pos = mci->pos_input; int startx = mSX + ALIGNED_MENU_XPOS(pos); int starty = mSY + ALIGNED_MENU_YPOS(pos); #endif @@ -3162,8 +3333,6 @@ void HandleTypeName(int newxpos, Key key) DrawText(startx, starty, setup.player_name, font_nr); } - - sprintf(main_input_name, "%s", setup.player_name); }