From 04cfb5daeff6cbceef152fc01ad5852407c0c918 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 15 Mar 2007 01:37:40 +0100 Subject: [PATCH] rnd-20070315-1-src * added full configurability of "readme.txt" screen appearance: - readme.x: - readme.y: - readme.width: - readme.height: - readme.chars: - readme.lines: - readme.align: left,center,right (default: center) - readme.font: font name - readme.autowrap: true,false (default: true) - readme.centered: true,false (default: false) - readme.skip_comments: true,false (default: true) - readme.sort_priority: (currently not used) when "readme.chars" and/or "readme.lines" is set to "-1" (this is the default), they are automatically determined from "readme.width" and "readme.height" accordingly; when they are not "-1", they have precedence over "readme.width" and "readme.height" --- ChangeLog | 32 ++++++++++++++-- src/conf_g2m.c | 80 +++++++++++++++++++++++++++++++++++++++ src/conf_g2s.c | 80 +++++++++++++++++++++++++++++++++++++++ src/conf_gfx.c | 8 ++-- src/conf_mus.c | 21 +++++++++++ src/conf_mus.h | 22 ++++++++++- src/conf_snd.c | 21 +++++++++++ src/conf_snd.h | 22 ++++++++++- src/conftime.h | 2 +- src/game.c | 4 +- src/libgame/setup.c | 30 +++++++++++---- src/libgame/system.h | 4 +- src/libgame/text.c | 5 ++- src/screens.c | 90 +++++++++++++++++++++++++++++++++----------- 14 files changed, 376 insertions(+), 45 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5a9ed202..5b5d2656 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,34 @@ 2007-03-14 + * added full configurability of "readme.txt" screen appearance: + - readme.x: + - readme.y: + - readme.width: + - readme.height: + - readme.chars: + - readme.lines: + - readme.align: left,center,right (default: center) + - readme.font: font name + - readme.autowrap: true,false (default: true) + - readme.centered: true,false (default: false) + - readme.skip_comments: true,false (default: true) + - readme.sort_priority: (currently not used) + when "readme.chars" and/or "readme.lines" is set to "-1" (this is the + default), they are automatically determined from "readme.width" and + "readme.height" accordingly; when they are not "-1", they have + precedence over "readme.width" and "readme.height" * added internal ad-hoc config settings for displaying text files like title messages or "readme.txt" style level set info files: - - .autowrap: true,false (default: true) - - .centered: true,false (default: false) - - .skip_comments: true,false (default: true) - (the leading '.' and the separating ':' are mandatory here) + - .autowrap: true,false (default: value of readme.autowrap) + - .centered: true,false (default: value of readme.autowrap) + - .skip_comments: true,false (default: value of readme.autowrap) + (the leading '.' and the separating ':' are mandatory here); to use + these ad-hoc settings, they have to be written inside a comment, like + "# .autowrap: false" or "# .centered: true"; these settings then + override the above global settings (they can even be used more than + once, like "# .centered: true", then some text that should be drawn + centered, then "# .centered: false" to go back to non-centered text; + only ".skip_comments" can not be used after a ".skip_comments: false" + again, as this generally disables detecting comments at all) 2007-03-08 * changed some numerical limits in the level editor from 255 to 999 diff --git a/src/conf_g2m.c b/src/conf_g2m.c index 447025c1..f1ba0754 100644 --- a/src/conf_g2m.c +++ b/src/conf_g2m.c @@ -62,6 +62,86 @@ gamemode_to_music[] = GFX_SPECIAL_ARG_SETUP, MUS_BACKGROUND_SETUP }, + { + -1, + MUS_TITLESCREEN_INITIAL_1 + }, + { + -1, + MUS_TITLESCREEN_INITIAL_2 + }, + { + -1, + MUS_TITLESCREEN_INITIAL_3 + }, + { + -1, + MUS_TITLESCREEN_INITIAL_4 + }, + { + -1, + MUS_TITLESCREEN_INITIAL_5 + }, + { + -1, + MUS_TITLESCREEN_1 + }, + { + -1, + MUS_TITLESCREEN_2 + }, + { + -1, + MUS_TITLESCREEN_3 + }, + { + -1, + MUS_TITLESCREEN_4 + }, + { + -1, + MUS_TITLESCREEN_5 + }, + { + -1, + MUS_TITLEMESSAGE_INITIAL_1 + }, + { + -1, + MUS_TITLEMESSAGE_INITIAL_2 + }, + { + -1, + MUS_TITLEMESSAGE_INITIAL_3 + }, + { + -1, + MUS_TITLEMESSAGE_INITIAL_4 + }, + { + -1, + MUS_TITLEMESSAGE_INITIAL_5 + }, + { + -1, + MUS_TITLEMESSAGE_1 + }, + { + -1, + MUS_TITLEMESSAGE_2 + }, + { + -1, + MUS_TITLEMESSAGE_3 + }, + { + -1, + MUS_TITLEMESSAGE_4 + }, + { + -1, + MUS_TITLEMESSAGE_5 + }, { -1, -1 diff --git a/src/conf_g2s.c b/src/conf_g2s.c index b4c9ff8f..f38fe7fe 100644 --- a/src/conf_g2s.c +++ b/src/conf_g2s.c @@ -58,6 +58,86 @@ gamemode_to_sound[] = GFX_SPECIAL_ARG_SETUP, SND_BACKGROUND_SETUP }, + { + -1, + SND_TITLESCREEN_INITIAL_1 + }, + { + -1, + SND_TITLESCREEN_INITIAL_2 + }, + { + -1, + SND_TITLESCREEN_INITIAL_3 + }, + { + -1, + SND_TITLESCREEN_INITIAL_4 + }, + { + -1, + SND_TITLESCREEN_INITIAL_5 + }, + { + -1, + SND_TITLESCREEN_1 + }, + { + -1, + SND_TITLESCREEN_2 + }, + { + -1, + SND_TITLESCREEN_3 + }, + { + -1, + SND_TITLESCREEN_4 + }, + { + -1, + SND_TITLESCREEN_5 + }, + { + -1, + SND_TITLEMESSAGE_INITIAL_1 + }, + { + -1, + SND_TITLEMESSAGE_INITIAL_2 + }, + { + -1, + SND_TITLEMESSAGE_INITIAL_3 + }, + { + -1, + SND_TITLEMESSAGE_INITIAL_4 + }, + { + -1, + SND_TITLEMESSAGE_INITIAL_5 + }, + { + -1, + SND_TITLEMESSAGE_1 + }, + { + -1, + SND_TITLEMESSAGE_2 + }, + { + -1, + SND_TITLEMESSAGE_3 + }, + { + -1, + SND_TITLEMESSAGE_4 + }, + { + -1, + SND_TITLEMESSAGE_5 + }, { -1, -1 diff --git a/src/conf_gfx.c b/src/conf_gfx.c index f75a4671..fc506b54 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -5079,10 +5079,10 @@ struct ConfigInfo image_config[] = { "titlemessage_5.skip_comments", "false" }, { "titlemessage_5.sort_priority", "0" }, - { "readme.x", "-1" }, - { "readme.y", "-1" }, - { "readme.width", "-1" }, - { "readme.height", "-1" }, + { "readme.x", "272" }, + { "readme.y", "150" }, + { "readme.width", "480" }, + { "readme.height", "364" }, { "readme.chars", "-1" }, { "readme.lines", "-1" }, { "readme.align", "center" }, diff --git a/src/conf_mus.c b/src/conf_mus.c index 2d2cd8a9..c47a5c88 100644 --- a/src/conf_mus.c +++ b/src/conf_mus.c @@ -38,6 +38,27 @@ struct ConfigInfo music_config[] = { "background.INFO", "rhythmloop.wav" }, { "background.SETUP", UNDEFINED_FILENAME }, + { "titlescreen_initial_1", UNDEFINED_FILENAME }, + { "titlescreen_initial_2", UNDEFINED_FILENAME }, + { "titlescreen_initial_3", UNDEFINED_FILENAME }, + { "titlescreen_initial_4", UNDEFINED_FILENAME }, + { "titlescreen_initial_5", UNDEFINED_FILENAME }, + { "titlescreen_1", UNDEFINED_FILENAME }, + { "titlescreen_2", UNDEFINED_FILENAME }, + { "titlescreen_3", UNDEFINED_FILENAME }, + { "titlescreen_4", UNDEFINED_FILENAME }, + { "titlescreen_5", UNDEFINED_FILENAME }, + { "titlemessage_initial_1", UNDEFINED_FILENAME }, + { "titlemessage_initial_2", UNDEFINED_FILENAME }, + { "titlemessage_initial_3", UNDEFINED_FILENAME }, + { "titlemessage_initial_4", UNDEFINED_FILENAME }, + { "titlemessage_initial_5", UNDEFINED_FILENAME }, + { "titlemessage_1", UNDEFINED_FILENAME }, + { "titlemessage_2", UNDEFINED_FILENAME }, + { "titlemessage_3", UNDEFINED_FILENAME }, + { "titlemessage_4", UNDEFINED_FILENAME }, + { "titlemessage_5", UNDEFINED_FILENAME }, + /* there is no definition for "background.PLAYING", because this would prevent selecting music from music directory that is not defined in "musicinfo.conf", when no default music is defined here */ diff --git a/src/conf_mus.h b/src/conf_mus.h index 6c7f9352..ec924639 100644 --- a/src/conf_mus.h +++ b/src/conf_mus.h @@ -27,7 +27,27 @@ #define MUS_BACKGROUND_EDITOR 6 #define MUS_BACKGROUND_INFO 7 #define MUS_BACKGROUND_SETUP 8 +#define MUS_TITLESCREEN_INITIAL_1 9 +#define MUS_TITLESCREEN_INITIAL_2 10 +#define MUS_TITLESCREEN_INITIAL_3 11 +#define MUS_TITLESCREEN_INITIAL_4 12 +#define MUS_TITLESCREEN_INITIAL_5 13 +#define MUS_TITLESCREEN_1 14 +#define MUS_TITLESCREEN_2 15 +#define MUS_TITLESCREEN_3 16 +#define MUS_TITLESCREEN_4 17 +#define MUS_TITLESCREEN_5 18 +#define MUS_TITLEMESSAGE_INITIAL_1 19 +#define MUS_TITLEMESSAGE_INITIAL_2 20 +#define MUS_TITLEMESSAGE_INITIAL_3 21 +#define MUS_TITLEMESSAGE_INITIAL_4 22 +#define MUS_TITLEMESSAGE_INITIAL_5 23 +#define MUS_TITLEMESSAGE_1 24 +#define MUS_TITLEMESSAGE_2 25 +#define MUS_TITLEMESSAGE_3 26 +#define MUS_TITLEMESSAGE_4 27 +#define MUS_TITLEMESSAGE_5 28 -#define NUM_MUSIC_FILES 9 +#define NUM_MUSIC_FILES 29 #endif /* CONF_MUS_H */ diff --git a/src/conf_snd.c b/src/conf_snd.c index 8f8d58dc..b3761601 100644 --- a/src/conf_snd.c +++ b/src/conf_snd.c @@ -266,6 +266,27 @@ struct ConfigInfo sound_config[] = { "background.INFO", UNDEFINED_FILENAME }, { "background.SETUP", UNDEFINED_FILENAME }, + { "titlescreen_initial_1", UNDEFINED_FILENAME }, + { "titlescreen_initial_2", UNDEFINED_FILENAME }, + { "titlescreen_initial_3", UNDEFINED_FILENAME }, + { "titlescreen_initial_4", UNDEFINED_FILENAME }, + { "titlescreen_initial_5", UNDEFINED_FILENAME }, + { "titlescreen_1", UNDEFINED_FILENAME }, + { "titlescreen_2", UNDEFINED_FILENAME }, + { "titlescreen_3", UNDEFINED_FILENAME }, + { "titlescreen_4", UNDEFINED_FILENAME }, + { "titlescreen_5", UNDEFINED_FILENAME }, + { "titlemessage_initial_1", UNDEFINED_FILENAME }, + { "titlemessage_initial_2", UNDEFINED_FILENAME }, + { "titlemessage_initial_3", UNDEFINED_FILENAME }, + { "titlemessage_initial_4", UNDEFINED_FILENAME }, + { "titlemessage_initial_5", UNDEFINED_FILENAME }, + { "titlemessage_1", UNDEFINED_FILENAME }, + { "titlemessage_2", UNDEFINED_FILENAME }, + { "titlemessage_3", UNDEFINED_FILENAME }, + { "titlemessage_4", UNDEFINED_FILENAME }, + { "titlemessage_5", UNDEFINED_FILENAME }, + #if 0 { "[not used]", "antigrav.wav" }, { "[not used]", "bong.wav" }, diff --git a/src/conf_snd.h b/src/conf_snd.h index 6691c8e0..860ac5ca 100644 --- a/src/conf_snd.h +++ b/src/conf_snd.h @@ -222,7 +222,27 @@ #define SND_BACKGROUND_EDITOR 201 #define SND_BACKGROUND_INFO 202 #define SND_BACKGROUND_SETUP 203 +#define SND_TITLESCREEN_INITIAL_1 204 +#define SND_TITLESCREEN_INITIAL_2 205 +#define SND_TITLESCREEN_INITIAL_3 206 +#define SND_TITLESCREEN_INITIAL_4 207 +#define SND_TITLESCREEN_INITIAL_5 208 +#define SND_TITLESCREEN_1 209 +#define SND_TITLESCREEN_2 210 +#define SND_TITLESCREEN_3 211 +#define SND_TITLESCREEN_4 212 +#define SND_TITLESCREEN_5 213 +#define SND_TITLEMESSAGE_INITIAL_1 214 +#define SND_TITLEMESSAGE_INITIAL_2 215 +#define SND_TITLEMESSAGE_INITIAL_3 216 +#define SND_TITLEMESSAGE_INITIAL_4 217 +#define SND_TITLEMESSAGE_INITIAL_5 218 +#define SND_TITLEMESSAGE_1 219 +#define SND_TITLEMESSAGE_2 220 +#define SND_TITLEMESSAGE_3 221 +#define SND_TITLEMESSAGE_4 222 +#define SND_TITLEMESSAGE_5 223 -#define NUM_SOUND_FILES 204 +#define NUM_SOUND_FILES 224 #endif /* CONF_SND_H */ diff --git a/src/conftime.h b/src/conftime.h index 335ff3a5..248978e2 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2007-03-14 00:32" +#define COMPILE_DATE_STRING "2007-03-14 23:19" diff --git a/src/game.c b/src/game.c index 297efe85..17981be5 100644 --- a/src/game.c +++ b/src/game.c @@ -90,8 +90,8 @@ #if 1 #define PANEL_OFF() (local_player->LevelSolved_PanelOff) #define PANEL_DEACTIVATED(p) ((p)->x < 0 || (p)->y < 0 || PANEL_OFF()) -#define PANEL_XPOS(p) (DX + ALIGNED_MENU_XPOS(p)) -#define PANEL_YPOS(p) (DY + ALIGNED_MENU_YPOS(p)) +#define PANEL_XPOS(p) (DX + ALIGNED_TEXT_XPOS(p)) +#define PANEL_YPOS(p) (DY + ALIGNED_TEXT_YPOS(p)) #else #define PANEL_DEACTIVATED(p) ((p).x < 0 || (p).y < 0) #define PANEL_XPOS(p) (ALIGNED_XPOS((p).x, (p).width, (p).align)) diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 45a9895a..985c160a 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -1760,8 +1760,8 @@ boolean getTokenValueFromSetupLine(char *line, char **token, char **value) } #if 1 -static void loadSetupFileData(void *setup_file_data, char *filename, - boolean top_recursion_level, boolean is_hash) +static boolean loadSetupFileData(void *setup_file_data, char *filename, + boolean top_recursion_level, boolean is_hash) { static SetupFileHash *include_filename_hash = NULL; char line[MAX_LINE_LEN], line_raw[MAX_LINE_LEN], previous_line[MAX_LINE_LEN]; @@ -1780,7 +1780,7 @@ static void loadSetupFileData(void *setup_file_data, char *filename, { Error(ERR_WARN, "cannot open configuration file '%s'", filename); - return; + return FALSE; } /* use "insert pointer" to store list end for constant insertion complexity */ @@ -1895,12 +1895,14 @@ static void loadSetupFileData(void *setup_file_data, char *filename, if (top_recursion_level) freeSetupFileHash(include_filename_hash); + + return TRUE; } #else -static void loadSetupFileData(void *setup_file_data, char *filename, - boolean top_recursion_level, boolean is_hash) +static boolean loadSetupFileData(void *setup_file_data, char *filename, + boolean top_recursion_level, boolean is_hash) { static SetupFileHash *include_filename_hash = NULL; char line[MAX_LINE_LEN], line_raw[MAX_LINE_LEN], previous_line[MAX_LINE_LEN]; @@ -1919,7 +1921,7 @@ static void loadSetupFileData(void *setup_file_data, char *filename, { Error(ERR_WARN, "cannot open configuration file '%s'", filename); - return; + return FALSE; } /* use "insert pointer" to store list end for constant insertion complexity */ @@ -2125,6 +2127,8 @@ static void loadSetupFileData(void *setup_file_data, char *filename, if (top_recursion_level) freeSetupFileHash(include_filename_hash); + + return TRUE; } #endif @@ -2154,7 +2158,12 @@ SetupFileList *loadSetupFileList(char *filename) SetupFileList *setup_file_list = newSetupFileList("", ""); SetupFileList *first_valid_list_entry; - loadSetupFileData(setup_file_list, filename, TRUE, FALSE); + if (!loadSetupFileData(setup_file_list, filename, TRUE, FALSE)) + { + freeSetupFileList(setup_file_list); + + return NULL; + } first_valid_list_entry = setup_file_list->next; @@ -2169,7 +2178,12 @@ SetupFileHash *loadSetupFileHash(char *filename) { SetupFileHash *setup_file_hash = newSetupFileHash(); - loadSetupFileData(setup_file_hash, filename, TRUE, TRUE); + if (!loadSetupFileData(setup_file_hash, filename, TRUE, TRUE)) + { + freeSetupFileHash(setup_file_hash); + + return NULL; + } return setup_file_hash; } diff --git a/src/libgame/system.h b/src/libgame/system.h index 5825fc53..6df8df04 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -210,8 +210,8 @@ #define ALIGNED_XPOS(x,w,a) ((a) == ALIGN_CENTER ? (x) - (w) / 2 : \ (a) == ALIGN_RIGHT ? (x) - (w) : (x)) -#define ALIGNED_MENU_XPOS(p) ALIGNED_XPOS((p)->x, (p)->width, (p)->align) -#define ALIGNED_MENU_YPOS(p) ((p)->y) +#define ALIGNED_TEXT_XPOS(p) ALIGNED_XPOS((p)->x, (p)->width, (p)->align) +#define ALIGNED_TEXT_YPOS(p) ((p)->y) /* values for redraw_mask */ #define REDRAW_NONE (0) diff --git a/src/libgame/text.c b/src/libgame/text.c index f781a563..6446ffe2 100644 --- a/src/libgame/text.c +++ b/src/libgame/text.c @@ -753,7 +753,11 @@ int DrawTextBuffer(int x, int y, char *text_buffer, int font_nr, char line[MAX_LINE_LEN + 1]; char *line_ptr; boolean last_line_was_empty = TRUE; +#if 1 + int num_line_chars = MAX_LINE_LEN; +#else int num_line_chars = (autowrap ? MAX_LINE_LEN : line_length); +#endif int i; /* copy next line from text buffer to line buffer (nearly fgets() style) */ @@ -830,7 +834,6 @@ int DrawTextBuffer(int x, int y, char *text_buffer, int font_nr, } else { - /* !!! CAN NEVER HAPPEN -- CHECK + CORRECT !!! */ buffer_len = line_length; strncpy(buffer, line_ptr, line_length); } diff --git a/src/screens.c b/src/screens.c index a5c9c003..51a30367 100644 --- a/src/screens.c +++ b/src/screens.c @@ -504,6 +504,8 @@ static int compareTitleControlInfo(const void *object1, const void *object2) compare_result = (tci1->initial ? -1 : +1); else if (tci1->sort_priority != tci2->sort_priority) compare_result = tci1->sort_priority - tci2->sort_priority; + else if (tci1->is_image != tci2->is_image) + compare_result = (tci1->is_image ? -1 : +1); else compare_result = tci1->local_nr - tci2->local_nr; @@ -734,8 +736,8 @@ static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, if (visibleTextPos(pos_text) && text != NULL) { struct TextPosInfo *pos = pos_text; - int x = mSX + ALIGNED_MENU_XPOS(pos); - int y = mSY + ALIGNED_MENU_YPOS(pos); + int x = mSX + ALIGNED_TEXT_XPOS(pos); + int y = mSY + ALIGNED_TEXT_YPOS(pos); #if 1 /* (check why/if this is needed) */ @@ -747,8 +749,8 @@ static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, if (visibleTextPos(pos_input) && input != NULL) { struct TextPosInfo *pos = pos_input; - int x = mSX + ALIGNED_MENU_XPOS(pos); - int y = mSY + ALIGNED_MENU_YPOS(pos); + int x = mSX + ALIGNED_TEXT_XPOS(pos); + int y = mSY + ALIGNED_TEXT_YPOS(pos); #if 1 /* (check why/if this is needed) */ @@ -788,8 +790,8 @@ static boolean insideMenuPosRect(struct MenuPosInfo *rect, int x, int y) if (rect == NULL) return FALSE; - int rect_x = ALIGNED_MENU_XPOS(rect); - int rect_y = ALIGNED_MENU_YPOS(rect); + int rect_x = ALIGNED_TEXT_XPOS(rect); + int rect_y = ALIGNED_TEXT_YPOS(rect); return (x >= rect_x && x < rect_x + rect->width && y >= rect_y && y < rect_y + rect->height); @@ -800,8 +802,8 @@ static boolean insideTextPosRect(struct TextPosInfo *rect, int x, int y) if (rect == NULL) return FALSE; - int rect_x = ALIGNED_MENU_XPOS(rect); - int rect_y = ALIGNED_MENU_YPOS(rect); + int rect_x = ALIGNED_TEXT_XPOS(rect); + int rect_y = ALIGNED_TEXT_YPOS(rect); return (x >= rect_x && x < rect_x + rect->width && y >= rect_y && y < rect_y + rect->height); @@ -956,6 +958,7 @@ void DrawTitleScreenImage(int nr, boolean initial) void DrawTitleScreenMessage(int nr, boolean initial) { char *filename = getLevelSetTitleMessageFilename(nr, initial); + struct TitleMessageInfo *tmi = getTitleMessageInfo(nr, initial); int font_nr = FONT_TEXT_1; int font_width; int font_height; @@ -984,7 +987,8 @@ void DrawTitleScreenMessage(int nr, boolean initial) max_lines_per_screen = (WIN_YSIZE - pad_y) / font_height - 1; DrawTextFile(sx, sy, filename, font_nr, max_chars_per_line, -1, - max_lines_per_screen, -1, FALSE, FALSE, FALSE); + max_lines_per_screen, -1, tmi->autowrap, tmi->centered, + tmi->skip_comments); game_status = last_game_status; /* restore current game status */ } @@ -3091,23 +3095,66 @@ void HandleInfoScreen_Version(int button) void DrawInfoScreen_LevelSet() { + struct TitleMessageInfo *tmi = &readme; int ystart1 = mSY - SY + 100; int ystart2 = mSY - SY + 150; int ybottom = mSY - SY + SYSIZE - 20; char *filename = getLevelSetInfoFilename(); #if 1 +#if 1 + int font_nr = tmi->font; +#else int font_nr = FONT_INFO_LEVELSET; +#endif #else int font_nr = FONT_LEVEL_NUMBER; #endif +#if 0 int font_width = getFontWidth(font_nr); int font_height = getFontHeight(font_nr); +#endif +#if 1 +#if 0 + int sx = mSX + ALIGNED_TEXT_XPOS(tmi); + int sy = mSY + ALIGNED_TEXT_YPOS(tmi); +#endif +#if 0 + int width = tmi->width; + int height = tmi->height; +#endif +#else int pad_x = 32; int pad_y = 150; int sx = mSX + pad_x; int sy = mSY + pad_y; - int max_chars_per_line = (SXSIZE - 2 * pad_x) / font_width; - int max_lines_per_screen = (SYSIZE - pad_y) / font_height - 1; + int width = SXSIZE - 2 * pad_x; + int height = SYSIZE - pad_y; +#endif +#if 1 +#if 0 + int max_chars = tmi->chars; + int max_lines = tmi->lines; +#endif +#else + int max_chars_per_line = width / font_width; +#if 1 + int max_lines_per_screen = height / font_height; +#else + int max_lines_per_screen = height / font_height - 1; /* minus footer line */ +#endif +#endif + + /* if chars set to "-1", automatically determine by text and font width */ + if (tmi->chars == -1) + tmi->chars = tmi->width / getFontWidth(font_nr); + else + tmi->width = tmi->chars * getFontWidth(font_nr); + + /* if lines set to "-1", automatically determine by text and font height */ + if (tmi->lines == -1) + tmi->lines = tmi->height / getFontHeight(font_nr); + else + tmi->height = tmi->lines * getFontHeight(font_nr); SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); @@ -3122,8 +3169,9 @@ void DrawInfoScreen_LevelSet() "Press any key or button for info menu"); if (filename != NULL) - DrawTextFile(sx, sy, filename, font_nr, max_chars_per_line, -1, - max_lines_per_screen, -1, TRUE, FALSE, TRUE); + DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi), + filename, font_nr, tmi->chars, -1, tmi->lines, -1, + tmi->autowrap, tmi->centered, tmi->skip_comments); else DrawTextSCentered(ystart2, FONT_TEXT_2, "No information for this level set."); @@ -3231,8 +3279,8 @@ void HandleTypeName(int newxpos, Key key) struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME); #if 1 struct TextPosInfo *pos = mci->pos_input; - int startx = mSX + ALIGNED_MENU_XPOS(pos); - int starty = mSY + ALIGNED_MENU_YPOS(pos); + int startx = mSX + ALIGNED_TEXT_XPOS(pos); + int starty = mSY + ALIGNED_TEXT_YPOS(pos); #endif #if 1 static int xpos = 0; @@ -3267,7 +3315,7 @@ void HandleTypeName(int newxpos, Key key) #if 0 /* add one character width for added cursor character */ pos->width += font_width; - startx = mSX + ALIGNED_MENU_XPOS(pos); + startx = mSX + ALIGNED_TEXT_XPOS(pos); DrawText(startx, starty, setup.player_name, font_active_nr); DrawText(startx + xpos * font_width, starty, "_", font_active_nr); @@ -3283,7 +3331,7 @@ void HandleTypeName(int newxpos, Key key) #if 0 /* add one character width for added name text character */ pos->width += font_width; - startx = mSX + ALIGNED_MENU_XPOS(pos); + startx = mSX + ALIGNED_TEXT_XPOS(pos); DrawText(startx, starty, setup.player_name, font_active_nr); DrawText(startx + xpos * font_width, starty, "_", font_active_nr); @@ -3298,7 +3346,7 @@ void HandleTypeName(int newxpos, Key key) #if 0 /* remove one character width for removed name text character */ pos->width -= font_width; - startx = mSX + ALIGNED_MENU_XPOS(pos); + startx = mSX + ALIGNED_TEXT_XPOS(pos); DrawText(startx, starty, setup.player_name, font_active_nr); DrawText(startx + xpos * font_width, starty, "_ ", font_active_nr); @@ -3309,7 +3357,7 @@ void HandleTypeName(int newxpos, Key key) #if 0 /* remove one character width for removed cursor text character */ pos->width -= font_width; - startx = mSX + ALIGNED_MENU_XPOS(pos); + startx = mSX + ALIGNED_TEXT_XPOS(pos); DrawText(startx, starty, setup.player_name, font_nr); DrawText(startx + xpos * font_width, starty, " ", font_active_nr); @@ -3333,7 +3381,7 @@ void HandleTypeName(int newxpos, Key key) if (is_active) { pos->width = (strlen(setup.player_name) + 1) * font_width; - startx = mSX + ALIGNED_MENU_XPOS(pos); + startx = mSX + ALIGNED_TEXT_XPOS(pos); DrawText(startx, starty, setup.player_name, font_active_nr); DrawText(startx + xpos * font_width, starty, "_", font_active_nr); @@ -3341,7 +3389,7 @@ void HandleTypeName(int newxpos, Key key) else { pos->width = strlen(setup.player_name) * font_width; - startx = mSX + ALIGNED_MENU_XPOS(pos); + startx = mSX + ALIGNED_TEXT_XPOS(pos); DrawText(startx, starty, setup.player_name, font_nr); } -- 2.34.1