X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=6b96420a5b364ddf7ca0c7f1407354778c429508;hb=884012f34f9f3c22bf75d1468e4ed57d7795a24b;hp=1a900b21fe682920ba7444c835efc8e568a56aca;hpb=5a9927b017cadc09250e6b3de89a88d23bf89143;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 1a900b21..6b96420a 100644 --- a/src/screens.c +++ b/src/screens.c @@ -204,6 +204,8 @@ static struct { -1, NULL }, }; +#define XFADE 1 + #define DRAW_MODE(s) ((s) >= GAME_MODE_MAIN && \ (s) <= GAME_MODE_SETUP ? (s) : \ (s) == GAME_MODE_PSEUDO_TYPENAME ? \ @@ -245,7 +247,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,37 +254,63 @@ struct TitleControlInfo boolean is_image; boolean initial; int local_nr; + int sort_priority; }; 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_FIRST_LEVEL 10 +#define MAIN_CONTROL_LAST_LEVEL 11 +#define MAIN_CONTROL_LEVEL_NUMBER 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_first_level[10]; +static char str_main_text_last_level[10]; +static char str_main_text_level_number[10]; + +static char *main_text_name = str_main_text_name; +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_level_number = str_main_text_level_number; +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,12 +320,10 @@ struct MainControlInfo int button_graphic; struct TextPosInfo *pos_text; - char *text; - int font_text; + char **text; - struct MenuPosInfo *pos_input; - char *input; - int font_input; + struct TextPosInfo *pos_input; + char **input; }; static struct MainControlInfo main_controls[] = @@ -306,120 +331,156 @@ 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, + &menu.main.input.name, &setup.player_name, }, { MAIN_CONTROL_LEVELS, &menu.main.button.levels, IMG_MENU_BUTTON_ENTER_MENU, - &menu.main.text.levels, "Levelset", FONT_MENU_1, - NULL, NULL, -1, + &menu.main.text.levels, &main_text_levels, + NULL, NULL, }, { MAIN_CONTROL_SCORES, &menu.main.button.scores, IMG_MENU_BUTTON, - &menu.main.text.scores, "Hall Of Fame", FONT_MENU_1, - NULL, NULL, -1, + &menu.main.text.scores, &main_text_scores, + NULL, NULL, }, { MAIN_CONTROL_EDITOR, &menu.main.button.editor, IMG_MENU_BUTTON, - &menu.main.text.editor, "Level Creator", FONT_MENU_1, - NULL, NULL, -1, + &menu.main.text.editor, &main_text_editor, + NULL, NULL, }, { MAIN_CONTROL_INFO, &menu.main.button.info, IMG_MENU_BUTTON_ENTER_MENU, - &menu.main.text.info, "Info Screen", FONT_MENU_1, - NULL, NULL, -1, + &menu.main.text.info, &main_text_info, + NULL, NULL, }, { MAIN_CONTROL_GAME, &menu.main.button.game, IMG_MENU_BUTTON, - &menu.main.text.game, "Start Game", FONT_MENU_1, - NULL, NULL, -1, + &menu.main.text.game, &main_text_game, + NULL, NULL, }, { MAIN_CONTROL_SETUP, &menu.main.button.setup, IMG_MENU_BUTTON_ENTER_MENU, - &menu.main.text.setup, "Setup", FONT_MENU_1, - NULL, NULL, -1, + &menu.main.text.setup, &main_text_setup, + NULL, NULL, }, { MAIN_CONTROL_QUIT, &menu.main.button.quit, IMG_MENU_BUTTON, - &menu.main.text.quit, "Quit", FONT_MENU_1, - NULL, NULL, -1, + &menu.main.text.quit, &main_text_quit, + NULL, NULL, }, #if 0 /* (these two buttons are real gadgets) */ { MAIN_CONTROL_PREV_LEVEL, &menu.main.button.prev_level, IMG_MENU_BUTTON_PREV_LEVEL, - NULL, NULL, -1, - NULL, NULL, -1, + NULL, NULL, + NULL, NULL, }, { MAIN_CONTROL_NEXT_LEVEL, &menu.main.button.next_level, IMG_MENU_BUTTON_NEXT_LEVEL, - NULL, NULL, -1, - NULL, NULL, -1, + NULL, NULL, + NULL, NULL, }, #endif { - MAIN_CONTROL_CURRENT_LEVEL, + MAIN_CONTROL_FIRST_LEVEL, NULL, -1, - &menu.main.text.current_level, main_text_current_level,FONT_VALUE_1, - NULL, NULL, -1, + &menu.main.text.first_level, &main_text_first_level, + NULL, NULL, }, { - MAIN_CONTROL_FIRST_LEVEL, + MAIN_CONTROL_LAST_LEVEL, NULL, -1, - &menu.main.text.first_level, main_text_first_level, FONT_TEXT_3, - NULL, NULL, -1, + &menu.main.text.last_level, &main_text_last_level, + NULL, NULL, }, { - MAIN_CONTROL_LAST_LEVEL, + MAIN_CONTROL_LEVEL_NUMBER, NULL, -1, - &menu.main.text.last_level, main_text_last_level, FONT_TEXT_3, - NULL, NULL, -1, + &menu.main.text.level_number, &main_text_level_number, + NULL, NULL, }, { MAIN_CONTROL_LEVEL_INFO_1, NULL, -1, - &menu.main.text.level_info_1, NULL, -1, - NULL, NULL, -1, + &menu.main.text.level_info_1, NULL, + NULL, NULL, }, { MAIN_CONTROL_LEVEL_INFO_2, NULL, -1, - &menu.main.text.level_info_2, NULL, -1, - NULL, NULL, -1, + &menu.main.text.level_info_2, NULL, + NULL, NULL, + }, + { + MAIN_CONTROL_LEVEL_NAME, + NULL, -1, + &menu.main.text.level_name, &main_text_level_name, + NULL, NULL, + }, + { + MAIN_CONTROL_LEVEL_AUTHOR, + NULL, -1, + &menu.main.text.level_author, &main_text_level_author, + NULL, NULL, + }, + { + MAIN_CONTROL_LEVEL_YEAR, + NULL, -1, + &menu.main.text.level_year, &main_text_level_year, + NULL, NULL, + }, + { + MAIN_CONTROL_LEVEL_IMPORTED_FROM, + NULL, -1, + &menu.main.text.level_imported_from, &main_text_level_imported_from, + NULL, NULL, + }, + { + MAIN_CONTROL_LEVEL_IMPORTED_BY, + NULL, -1, + &menu.main.text.level_imported_by, &main_text_level_imported_by, + NULL, NULL, + }, + { + MAIN_CONTROL_LEVEL_TESTED_BY, + NULL, -1, + &menu.main.text.level_tested_by, &main_text_level_tested_by, + NULL, NULL, }, { MAIN_CONTROL_TITLE_1, NULL, -1, - &menu.main.text.title_1, PROGRAM_TITLE_STRING, FONT_TITLE_1, - NULL, NULL, -1, + &menu.main.text.title_1, &main_text_title_1, + NULL, NULL, }, { MAIN_CONTROL_TITLE_2, NULL, -1, - &menu.main.text.title_2, PROGRAM_COPYRIGHT_STRING, FONT_TITLE_2, - NULL, NULL, -1, + &menu.main.text.title_2, &main_text_title_2, + NULL, NULL, }, { MAIN_CONTROL_TITLE_3, NULL, -1, - &menu.main.text.title_3, PROGRAM_GAME_BY_STRING, FONT_TITLE_2, - NULL, NULL, -1, + &menu.main.text.title_3, &main_text_title_3, + NULL, NULL, }, { -1, NULL, -1, - NULL, NULL, -1, - NULL, NULL, -1, + NULL, NULL, + NULL, NULL, } }; @@ -429,12 +490,193 @@ 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]); +} + +#if 0 +static int getTitleScreenGameMode(boolean initial) +{ + return (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE); +} +#endif + +static int getTitleMessageGameMode(boolean initial) +{ + return (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE); +} + +#if 0 +static int getTitleScreenBackground(boolean initial) +{ + return (initial ? IMG_BACKGROUND_TITLE_INITIAL : IMG_BACKGROUND_TITLE); +} +#endif + +#if 0 +static int getTitleMessageBackground(int nr, boolean initial) +{ + return (initial ? IMG_BACKGROUND_TITLE_INITIAL : IMG_BACKGROUND_TITLE); +} +#endif + +static int getTitleBackground(int nr, boolean initial, boolean is_image) +{ + int base = (is_image ? + (initial ? IMG_BACKGROUND_TITLESCREEN_INITIAL_1 : + IMG_BACKGROUND_TITLESCREEN_1) : + (initial ? IMG_BACKGROUND_TITLEMESSAGE_INITIAL_1 : + IMG_BACKGROUND_TITLEMESSAGE_1)); + int graphic_global = (initial ? IMG_BACKGROUND_TITLE_INITIAL : + IMG_BACKGROUND_TITLE); + int graphic_local = base + nr; + + if (graphic_info[graphic_local].bitmap != NULL) + return graphic_local; + + if (graphic_info[graphic_global].bitmap != NULL) + return graphic_global; + + return IMG_UNDEFINED; +} + +static int getTitleSound(struct TitleControlInfo *tci) +{ + boolean is_image = tci->is_image; + int initial = tci->initial; + int nr = tci->local_nr; + int mode = (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE); + int base = (is_image ? + (initial ? SND_BACKGROUND_TITLESCREEN_INITIAL_1 : + SND_BACKGROUND_TITLESCREEN_1) : + (initial ? SND_BACKGROUND_TITLEMESSAGE_INITIAL_1 : + SND_BACKGROUND_TITLEMESSAGE_1)); + int sound_global = menu.sound[mode]; + int sound_local = base + nr; + +#if 0 + printf("::: %d, %d, %d: %d ['%s'], %d ['%s']\n", + nr, initial, is_image, + sound_global, getSoundListEntry(sound_global)->filename, + sound_local, getSoundListEntry(sound_local)->filename); +#endif + + if (!strEqual(getSoundListEntry(sound_local)->filename, UNDEFINED_FILENAME)) + return sound_local; + + if (!strEqual(getSoundListEntry(sound_global)->filename, UNDEFINED_FILENAME)) + return sound_global; + + return SND_UNDEFINED; +} + +static int getTitleMusic(struct TitleControlInfo *tci) +{ + boolean is_image = tci->is_image; + int initial = tci->initial; + int nr = tci->local_nr; + int mode = (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE); + int base = (is_image ? + (initial ? MUS_BACKGROUND_TITLESCREEN_INITIAL_1 : + MUS_BACKGROUND_TITLESCREEN_1) : + (initial ? MUS_BACKGROUND_TITLEMESSAGE_INITIAL_1 : + MUS_BACKGROUND_TITLEMESSAGE_1)); + int music_global = menu.music[mode]; + int music_local = base + nr; + +#if 0 + printf("::: %d, %d, %d: %d ['%s'], %d ['%s']\n", + nr, initial, is_image, + music_global, getMusicListEntry(music_global)->filename, + music_local, getMusicListEntry(music_local)->filename); +#endif + + if (!strEqual(getMusicListEntry(music_local)->filename, UNDEFINED_FILENAME)) + return music_local; + + if (!strEqual(getMusicListEntry(music_global)->filename, UNDEFINED_FILENAME)) + return music_global; + + return MUS_UNDEFINED; +} + +static struct TitleFadingInfo getTitleFading(struct TitleControlInfo *tci) +{ + boolean is_image = tci->is_image; + int initial = tci->initial; + int nr = tci->local_nr; + struct TitleFadingInfo ti; + + if (is_image) + { + int graphic = getTitleScreenGraphic(nr, initial); + + /* initialize fading control values to default title config settings */ + ti = (initial ? title_initial_default : title_default); + + /* override default settings with image config settings, if defined */ + if (graphic_info[graphic].anim_mode != ANIM_DEFAULT) + ti.anim_mode = graphic_info[graphic].anim_mode; + if (graphic_info[graphic].fade_delay > -1) + ti.fade_delay = graphic_info[graphic].fade_delay; + if (graphic_info[graphic].post_delay > -1) + ti.post_delay = graphic_info[graphic].post_delay; + if (graphic_info[graphic].auto_delay > -1) + ti.auto_delay = graphic_info[graphic].auto_delay; + } + else + { + if (initial) + { + ti.anim_mode = titlemessage_initial[nr].anim_mode; + ti.fade_delay = titlemessage_initial[nr].fade_delay; + ti.post_delay = titlemessage_initial[nr].post_delay; + ti.auto_delay = titlemessage_initial[nr].auto_delay; + } + else + { + ti.anim_mode = titlemessage[nr].anim_mode; + ti.fade_delay = titlemessage[nr].fade_delay; + ti.post_delay = titlemessage[nr].post_delay; + ti.auto_delay = titlemessage[nr].auto_delay; + } + } + +#if 0 + if (ti.anim_mode == ANIM_NONE) + ti.fade_delay = ti.post_delay = 0; +#endif + + return ti; +} + +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 if (tci1->is_image != tci2->is_image) + compare_result = (tci1->is_image ? -1 : +1); + 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 +686,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 +714,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() @@ -468,11 +736,15 @@ static void InitializeMainControls() int i; /* set main control text values to dynamically determined values */ - sprintf(main_text_name, "%s", local_team_mode ? "Team:" : "Name:"); - 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); + sprintf(main_text_name, "%s", local_team_mode ? "Team:" : "Name:"); + sprintf(main_text_first_level, "%03d", leveldir_current->first_level); + sprintf(main_text_last_level, "%03d", leveldir_current->last_level); + sprintf(main_text_level_number, "%s", int2str(level_nr, 3)); + + 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,12 +753,17 @@ 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; +#if 1 + int font_text = (pos_text ? pos_text->font : -1); + int font_input = (pos_input ? pos_input->font : -1); +#else int font_text = mci->font_text; int font_input = mci->font_input; +#endif int font_text_width = (font_text != -1 ? getFontWidth(font_text) : 0); int font_text_height = (font_text != -1 ? getFontHeight(font_text) : 0); @@ -522,7 +799,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 +807,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 +826,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,12 +857,17 @@ 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; +#if 1 + int font_text = (pos_text ? pos_text->font : -1); + int font_input = (pos_input ? pos_input->font : -1); +#else int font_text = mci->font_text; int font_input = mci->font_input; +#endif if (active_text) { @@ -592,7 +880,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,23 +890,29 @@ 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); - 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) */ DrawBackgroundForFont(x, y, pos->width, pos->height, font_text); +#endif DrawText(x, y, text, font_text); } - if (pos_input != NULL && input != NULL) + if (visibleTextPos(pos_input) && input != NULL) { - struct MenuPosInfo *pos = pos_input; - int x = mSX + ALIGNED_MENU_XPOS(pos); - int y = mSY + ALIGNED_MENU_YPOS(pos); + struct TextPosInfo *pos = pos_input; + int x = mSX + ALIGNED_TEXT_XPOS(pos); + int y = mSY + ALIGNED_TEXT_YPOS(pos); +#if 1 + /* (check why/if this is needed) */ DrawBackgroundForFont(x, y, pos->width, pos->height, font_input); +#endif DrawText(x, y, input, font_input); } } @@ -653,8 +947,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); @@ -665,8 +959,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); @@ -789,9 +1083,13 @@ void DrawTitleScreenImage(int nr, boolean initial) height = WIN_YSIZE; } + /* always display title screens centered */ dst_x = (WIN_XSIZE - width) / 2; dst_y = (WIN_YSIZE - height) / 2; + SetDrawBackgroundMask(REDRAW_ALL); + SetWindowBackgroundImage(getTitleBackground(nr, initial, TRUE)); + ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); if (DrawingOnBackground(dst_x, dst_y)) @@ -802,22 +1100,35 @@ void DrawTitleScreenImage(int nr, boolean initial) redraw_mask = REDRAW_ALL; /* reset fading control values to default config settings */ +#if 1 + +#if 0 + title = getTitleFading(nr, initial, TRUE); +#endif + +#else + title.fade_delay_final = title.fade_delay; title.post_delay_final = title.post_delay; title.auto_delay_final = title.auto_delay; /* override default settings with image config settings, if defined */ + if (graphic_info[graphic].anim_mode != ANIM_DEFAULT) + title.anim_mode = graphic_info[graphic].anim_mode; if (graphic_info[graphic].fade_delay > -1) - title.fade_delay_final = graphic_info[graphic].fade_delay; + title.fade_delay = graphic_info[graphic].fade_delay; if (graphic_info[graphic].post_delay > -1) - title.post_delay_final = graphic_info[graphic].post_delay; + title.post_delay = graphic_info[graphic].post_delay; if (graphic_info[graphic].auto_delay > -1) - title.auto_delay_final = graphic_info[graphic].auto_delay; + title.auto_delay = graphic_info[graphic].auto_delay; +#endif } void DrawTitleScreenMessage(int nr, boolean initial) { char *filename = getLevelSetTitleMessageFilename(nr, initial); + struct TitleMessageInfo *tmi = getTitleMessageInfo(nr, initial); +#if 0 int font_nr = FONT_TEXT_1; int font_width; int font_height; @@ -827,26 +1138,48 @@ void DrawTitleScreenMessage(int nr, boolean initial) int sy = pad_y; int max_chars_per_line; int max_lines_per_screen; +#endif int last_game_status = game_status; /* save current game status */ if (filename == NULL) return; + /* force TITLE font on title message screen */ + game_status = getTitleMessageGameMode(initial); + + /* if chars set to "-1", automatically determine by text and font width */ + if (tmi->chars == -1) + tmi->chars = tmi->width / getFontWidth(tmi->font); + else + tmi->width = tmi->chars * getFontWidth(tmi->font); + + /* if lines set to "-1", automatically determine by text and font height */ + if (tmi->lines == -1) + tmi->lines = tmi->height / getFontHeight(tmi->font); + else + tmi->height = tmi->lines * getFontHeight(tmi->font); + SetDrawBackgroundMask(REDRAW_ALL); - SetWindowBackgroundImageIfDefined(IMG_BACKGROUND_MESSAGE); + SetWindowBackgroundImage(getTitleBackground(nr, initial, FALSE)); ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); - /* force MESSAGE font on title message screen */ - game_status = GAME_MODE_MESSAGE; - +#if 0 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; +#endif - DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line, - max_lines_per_screen, FALSE); +#if 1 + DrawTextFile(ALIGNED_TEXT_XPOS(tmi), ALIGNED_TEXT_YPOS(tmi), + filename, tmi->font, tmi->chars, -1, tmi->lines, -1, + tmi->autowrap, tmi->centered, tmi->parse_comments); +#else + DrawTextFile(sx, sy, filename, font_nr, max_chars_per_line, -1, + max_lines_per_screen, -1, tmi->autowrap, tmi->centered, + tmi->parse_comments); +#endif game_status = last_game_status; /* restore current game status */ } @@ -855,13 +1188,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; @@ -875,6 +1227,25 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) int i; #endif +#if 0 + /* !!! CHANGE THIS !!! */ + title = title_default; +#endif + +#if 0 + printf("::: %d, %d\n", fading.anim_mode == ANIM_CROSSFADE, + redraw_mask == REDRAW_ALL); +#endif + +#if 1 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(redraw_mask); +#endif +#endif + UnmapAllGadgets(); FadeSoundsAndMusic(); @@ -920,22 +1291,23 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) SetDrawtoField(DRAW_BACKBUFFER); #endif +#if 0 + if (levelset_has_changed) + fading = title_default; +#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 || @@ -959,6 +1331,35 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) LoadLevel(level_nr); SetMainBackgroundImage(IMG_BACKGROUND_MAIN); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(redraw_mask); +#endif +#endif + +#if 1 + if (redraw_mask == REDRAW_ALL) + { + int door_state = GetDoorState(); + + RedrawBackground(); + + // OpenDoor(door_state | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); + +#if 0 +#if 1 + OpenDoor(DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#else + OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#endif +#endif + } +#endif + ClearWindow(); #if 1 @@ -1048,16 +1449,52 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) FreeScreenGadgets(); CreateScreenGadgets(); +#if 0 + BlitBitmap(drawto, window, VX, VY, VXSIZE, VYSIZE, VX, VY); + Delay(3000); +#endif + /* map gadgets for main menu screen */ MapTapeButtons(); MapScreenMenuGadgets(SCREEN_MASK_MAIN); DrawMaskedBorder(REDRAW_ALL); +#if 1 + if (redraw_mask == REDRAW_ALL) + { + int door_state = GetDoorState(); + + OpenDoor(door_state | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); + } +#endif + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else +#if 1 + if (!do_fading) + BackToFront(); + else if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else if (do_fading) FadeIn(redraw_mask); else BackToFront(); +#endif +#endif + +#if 1 + fading = menu.navigation; +#else + fading = title_default; +#endif SetMouseCursor(CURSOR_DEFAULT); @@ -1107,26 +1544,45 @@ static void gotoTopLevelDir() } #endif -#if 1 void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { static unsigned long title_delay = 0; static int title_screen_nr = 0; + static int last_sound = -1, last_music = -1; boolean return_to_main_menu = FALSE; boolean use_fading_main_menu = TRUE; +#if 0 +#if 1 + boolean use_cross_fading = FALSE; +#else boolean use_cross_fading = !show_title_initial; /* default */ +#endif +#endif struct TitleControlInfo *tci; + struct TitleFadingInfo fading_next; + int sound, music; if (button == MB_MENU_INITIALIZE) { +#if 1 + boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE); +#endif + +#if 0 int last_game_status = game_status; /* save current game status */ +#endif title_delay = 0; title_screen_nr = 0; tci = &title_controls[title_screen_nr]; + last_sound = SND_UNDEFINED; + last_music = MUS_UNDEFINED; + +#if 0 /* determine number of title screens to display (images and messages) */ InitializeTitleControls(); +#endif if (game_status == GAME_MODE_INFO) { @@ -1135,48 +1591,62 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) DrawInfoScreen_NotAvailable("Title screen information:", "No title screen for this level set."); - title.auto_delay_final = -1; + /* use default settings for fading, but always disable auto delay */ + fading = title_default; + fading.auto_delay = -1; return; } FadeSoundsAndMusic(); +#if 1 + if (use_cross_fading) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_ALL); +#else FadeOut(REDRAW_ALL); +#endif } - /* force TITLE music on title info screen */ - game_status = GAME_MODE_TITLE; - - PlayMenuSound(); - PlayMenuMusic(); - - game_status = last_game_status; /* restore current game status */ - if (tci->is_image) - { DrawTitleScreenImage(tci->local_nr, tci->initial); - } else - { DrawTitleScreenMessage(tci->local_nr, tci->initial); - title.fade_delay_final = title.fade_delay; - title.post_delay_final = title.post_delay; - title.auto_delay_final = -1; - } + fading = getTitleFading(tci); + +#if 1 + sound = getTitleSound(tci); + music = getTitleMusic(tci); + + if (sound != last_sound) + PlayMenuSoundExt(sound); + if (music != last_music) + PlayMenuMusicExt(music); + + last_sound = sound; + last_music = music; +#endif SetMouseCursor(CURSOR_NONE); +#if 1 + if (use_cross_fading) + FadeCross(REDRAW_ALL); + else + FadeIn(REDRAW_ALL); +#else FadeIn(REDRAW_ALL); +#endif DelayReached(&title_delay, 0); /* reset delay counter */ return; } - if (title.auto_delay_final > -1 && - DelayReached(&title_delay, title.auto_delay_final)) + if (fading.auto_delay > -1 && DelayReached(&title_delay, fading.auto_delay)) button = MB_MENU_CHOICE; if (button == MB_MENU_LEAVE) @@ -1186,11 +1656,24 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) } else if (button == MB_MENU_CHOICE) { - int anim_mode; +#if 1 + boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE); +#endif if (game_status == GAME_MODE_INFO && num_title_screens == 0) { +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif + + fading = menu.destination; info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -1201,226 +1684,93 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) title_screen_nr++; tci = &title_controls[title_screen_nr]; - if (tci->is_image) - anim_mode = - graphic_info[getTitleScreenGraphic(tci->local_nr, - tci->initial)].anim_mode; - else - anim_mode = ANIM_FADE; /* ??? */ - - use_cross_fading = (anim_mode == ANIM_FADE ? FALSE : - anim_mode == ANIM_CROSSFADE ? TRUE : - use_cross_fading); - if (title_screen_nr < num_title_screens) { - if (!use_cross_fading) - FadeOut(REDRAW_ALL); - - if (use_cross_fading) - FadeCrossSaveBackbuffer(); +#if 1 +#if 0 + boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE); +#endif +#else + int anim_mode; if (tci->is_image) - DrawTitleScreenImage(tci->local_nr, tci->initial); + anim_mode = + graphic_info[getTitleScreenGraphic(tci->local_nr, + tci->initial)].anim_mode; else - DrawTitleScreenMessage(tci->local_nr, tci->initial); - - if (use_cross_fading) - FadeCross(REDRAW_ALL); - else - FadeIn(REDRAW_ALL); - - DelayReached(&title_delay, 0); /* reset delay counter */ - } - else - { - FadeSoundsAndMusic(); - - FadeOut(REDRAW_ALL); - - return_to_main_menu = TRUE; - } - } - - if (return_to_main_menu) - { - /* show initial title images and messages only once at program start */ - show_title_initial = FALSE; - - RedrawBackground(); - - SetMouseCursor(CURSOR_DEFAULT); - - if (game_status == GAME_MODE_INFO) - { - OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); - - info_mode = INFO_MODE_MAIN; - DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu); - } - else /* default: return to main menu */ - { - OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); - - game_status = GAME_MODE_MAIN; - DrawMainMenuExt(REDRAW_ALL, use_fading_main_menu); - } - } -} - -#else - -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_title_initial; /* default */ - boolean no_title_info = (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL && - getLevelSetMessageFilename(1, FALSE) == NULL); - - if (button == MB_MENU_INITIALIZE) - { - int last_game_status = game_status; /* save current game status */ - - title_delay = 0; - title_nr = 0; - showing_message = FALSE; - - if (show_title_initial && - graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap == NULL && - getLevelSetMessageFilename(1, TRUE) == NULL) - show_title_initial = FALSE; - - if (game_status == GAME_MODE_INFO) - { - if (no_title_info) - { - DrawInfoScreen_NotAvailable("Title screen information:", - "No title screen for this level set."); - - title.auto_delay_final = -1; - - return; - } - - FadeSoundsAndMusic(); - - FadeOut(REDRAW_ALL); - } - - /* force TITLE music on title info screen */ - game_status = GAME_MODE_TITLE; - - PlayMenuSound(); - PlayMenuMusic(); - - game_status = last_game_status; /* restore current game status */ - - if (graphic_info[getTitleScreenGraphic(0, show_title_initial)].bitmap != NULL) - { - DrawTitleScreenImage(title_nr, show_title_initial); - } - 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); - - DelayReached(&title_delay, 0); /* reset delay counter */ - - return; - } - - if (title.auto_delay_final > -1 && - DelayReached(&title_delay, title.auto_delay_final)) - button = MB_MENU_CHOICE; - - if (button == MB_MENU_LEAVE) - { - return_to_main_menu = TRUE; - use_fading_main_menu = FALSE; - } - else if (button == MB_MENU_CHOICE) - { - int anim_mode; - - if (game_status == GAME_MODE_INFO && no_title_info) - { - FadeOut(REDRAW_FIELD); + anim_mode = ANIM_FADE; /* ??? */ - info_mode = INFO_MODE_MAIN; - DrawAndFadeInInfoScreen(REDRAW_FIELD); - - return; - } - - title_nr++; - - if (show_title_initial && - (title_nr >= MAX_NUM_TITLE_IMAGES || - graphic_info[IMG_TITLESCREEN_INITIAL_1 + title_nr].bitmap == NULL)) - { - show_title_initial = FALSE; - - title_nr = 0; /* restart with title screens for current level set */ - } - - anim_mode = graphic_info[getTitleScreenGraphic(title_nr, show_title_initial)].anim_mode; + use_cross_fading = (anim_mode == ANIM_FADE ? FALSE : + anim_mode == ANIM_CROSSFADE ? TRUE : + use_cross_fading); +#endif - use_cross_fading = (anim_mode == ANIM_FADE ? FALSE : - anim_mode == ANIM_CROSSFADE ? TRUE : - use_cross_fading); + sound = getTitleSound(tci); + music = getTitleMusic(tci); - if (!use_cross_fading) - FadeOut(REDRAW_ALL); + if (sound == SND_UNDEFINED || sound != last_sound) + FadeSounds(); + if (music == MUS_UNDEFINED || music != last_music) + FadeMusic(); - if (title_nr < MAX_NUM_TITLE_IMAGES && - graphic_info[getTitleScreenGraphic(title_nr, show_title_initial)].bitmap != NULL) - { if (use_cross_fading) FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_ALL); - DrawTitleScreenImage(title_nr, show_title_initial); - - if (use_cross_fading) - FadeCross(REDRAW_ALL); + if (tci->is_image) + DrawTitleScreenImage(tci->local_nr, tci->initial); else - FadeIn(REDRAW_ALL); + DrawTitleScreenMessage(tci->local_nr, tci->initial); + + fading_next = getTitleFading(tci); + +#if 1 + sound = getTitleSound(tci); + music = getTitleMusic(tci); - DelayReached(&title_delay, 0); /* reset delay counter */ - } - else if (!showing_message && filename != NULL) - { - if (use_cross_fading) - FadeCrossSaveBackbuffer(); + if (sound != last_sound) + PlayMenuSoundExt(sound); + if (music != last_music) + PlayMenuMusicExt(music); + + last_sound = sound; + last_music = music; +#endif - DrawTitleScreenMessage(filename); + /* last screen already faded out, next screen has no animation */ + if (!use_cross_fading && fading_next.anim_mode == ANIM_NONE) + fading = fading_next; if (use_cross_fading) FadeCross(REDRAW_ALL); else FadeIn(REDRAW_ALL); - DelayReached(&title_delay, 0); /* reset delay counter */ + fading = fading_next; - showing_message = TRUE; + DelayReached(&title_delay, 0); /* reset delay counter */ } else { FadeSoundsAndMusic(); +#if 0 +#if 1 + { +#if 0 + boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE); +#endif + + if (use_cross_fading) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_ALL); + } +#else FadeOut(REDRAW_ALL); +#endif +#endif return_to_main_menu = TRUE; } @@ -1428,27 +1778,32 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (return_to_main_menu) { - show_title_initial = FALSE; - +#if 0 RedrawBackground(); +#endif + + SetMouseCursor(CURSOR_DEFAULT); if (game_status == GAME_MODE_INFO) { +#if 0 OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#endif info_mode = INFO_MODE_MAIN; DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu); } else /* default: return to main menu */ { +#if 0 OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#endif game_status = GAME_MODE_MAIN; DrawMainMenuExt(REDRAW_ALL, use_fading_main_menu); } } } -#endif void HandleMainMenu_SelectLevel(int step, int direction) { @@ -1476,7 +1831,7 @@ void HandleMainMenu_SelectLevel(int step, int direction) if (new_level_nr != old_level_nr) { - struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_CURRENT_LEVEL); + struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_LEVEL_NUMBER); PlaySound(SND_MENU_ITEM_SELECTING); @@ -1484,7 +1839,7 @@ void HandleMainMenu_SelectLevel(int step, int direction) #if 1 DrawText(mSX + mci->pos_text->x, mSY + mci->pos_text->y, - int2str(level_nr, 3), mci->font_text); + int2str(level_nr, 3), mci->pos_text->font); #else DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1); #endif @@ -1525,7 +1880,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; @@ -1600,6 +1955,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) game_status = GAME_MODE_EDITOR; + fading = menu.destination; + DrawLevelEd(); } else if (pos == MAIN_CONTROL_INFO) @@ -1607,6 +1964,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) game_status = GAME_MODE_INFO; info_mode = INFO_MODE_MAIN; + fading = menu.navigation; + DrawInfoScreen(); } else if (pos == MAIN_CONTROL_GAME) @@ -1770,50 +2129,70 @@ static int num_info_info; static void execInfoTitleScreen() { + fading = menu.destination; + info_mode = INFO_MODE_TITLE; DrawInfoScreen(); } static void execInfoElements() { + fading = menu.destination; + info_mode = INFO_MODE_ELEMENTS; DrawInfoScreen(); } static void execInfoMusic() { + fading = menu.destination; + info_mode = INFO_MODE_MUSIC; DrawInfoScreen(); } static void execInfoCredits() { + fading = menu.destination; + info_mode = INFO_MODE_CREDITS; DrawInfoScreen(); } static void execInfoProgram() { + fading = menu.destination; + info_mode = INFO_MODE_PROGRAM; DrawInfoScreen(); } static void execInfoVersion() { + fading = menu.destination; + info_mode = INFO_MODE_VERSION; DrawInfoScreen(); } static void execInfoLevelSet() { + fading = menu.destination; + info_mode = INFO_MODE_LEVELSET; DrawInfoScreen(); } static void execExitInfo() { + fading = menu.navigation; + game_status = GAME_MODE_MAIN; +#if 1 + DrawMainMenuExt(REDRAW_FIELD, FALSE); +#else DrawMainMenu(); +#endif } static struct TokenInfo info_info_main[] = @@ -1853,6 +2232,21 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading) UnmapAllGadgets(); CloseDoor(DOOR_CLOSE_2); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(redraw_mask); +#endif + +#if 1 + if (redraw_mask == REDRAW_ALL) + { + RedrawBackground(); + OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); + } +#endif + ClearWindow(); DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Info Screen"); @@ -1891,10 +2285,26 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading) DrawMaskedBorder(REDRAW_ALL); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else +#if 1 + if (!do_fading) + BackToFront(); + else if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else if (do_fading) FadeIn(redraw_mask); else BackToFront(); +#endif +#endif InitAnimation(); } @@ -2000,13 +2410,26 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button) void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) { +#if 1 + int ystart1 = mSY - SY + 100; + int ystart2 = mSY - SY + 150; + int ybottom = mSY - SY + SYSIZE - 20; +#else int ystart1 = 100; int ystart2 = 150; int ybottom = SYSIZE - 20; +#endif SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); @@ -2017,7 +2440,14 @@ void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) @@ -2025,7 +2455,9 @@ void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) static int infoscreen_step[MAX_INFO_ELEMENTS_ON_SCREEN]; static int infoscreen_frame[MAX_INFO_ELEMENTS_ON_SCREEN]; int xstart = mSX + 16; - int ystart = mSY + 64 + 2 * 32; + int ystart1 = mSY - SY + 100; + int ystart2 = mSY + 64 + 2 * 32; + int ybottom = mSY - SY + SYSIZE - 20; int ystep = TILEY + 4; int element, action, direction; int graphic; @@ -2041,9 +2473,9 @@ void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) ClearWindow(); DrawHeadline(); - DrawTextSCentered(100, FONT_TEXT_1, "The Game Elements:"); + DrawTextSCentered(ystart1, FONT_TEXT_1, "The Game Elements:"); - DrawTextSCentered(SYSIZE - 20, FONT_TEXT_4, + DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for next page"); FrameCounter = 0; @@ -2115,9 +2547,9 @@ void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) j++; - ClearRectangleOnBackground(drawto, xstart, ystart + (i - start) * ystep, + ClearRectangleOnBackground(drawto, xstart, ystart2 + (i - start) * ystep, TILEX, TILEY); - DrawGraphicAnimationExt(drawto, xstart, ystart + (i - start) * ystep, + DrawGraphicAnimationExt(drawto, xstart, ystart2 + (i - start) * ystep, graphic, sync_frame, USE_MASKING); if (init) @@ -2180,8 +2612,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() @@ -2198,14 +2636,28 @@ void DrawInfoScreen_Elements() { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_ELEMENTS); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif LoadHelpAnimInfo(); LoadHelpTextInfo(); HandleInfoScreen_Elements(MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif InitAnimation(); } @@ -2261,7 +2713,17 @@ void HandleInfoScreen_Elements(int button) if (page >= num_pages) { FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2291,7 +2753,14 @@ void DrawInfoScreen_Music() { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_MUSIC); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); @@ -2300,14 +2769,23 @@ void DrawInfoScreen_Music() HandleInfoScreen_Music(MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Music(int button) { static struct MusicFileInfo *list = NULL; - int ystart = 150, dy = 30; - int ybottom = SYSIZE - 20; + int ystart1 = mSY - SY + 100; + int ystart2 = mSY - SY + 150; + int ybottom = mSY - SY + SYSIZE - 20; + int dy = 30; if (button == MB_MENU_INITIALIZE) { @@ -2320,7 +2798,8 @@ void HandleInfoScreen_Music(int button) ClearWindow(); DrawHeadline(); - DrawTextSCentered(100, FONT_TEXT_1, "No music info for this level set."); + DrawTextSCentered(ystart1, FONT_TEXT_1, + "No music info for this level set."); DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); @@ -2355,7 +2834,17 @@ void HandleInfoScreen_Music(int button) if (list == NULL) { FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2380,51 +2869,51 @@ void HandleInfoScreen_Music(int button) else PlaySound(sound); - DrawTextSCentered(100, FONT_TEXT_1, "The Game Background Sounds:"); + DrawTextSCentered(ystart1, FONT_TEXT_1, "The Game Background Sounds:"); } else { PlayMusic(list->music); - DrawTextSCentered(100, FONT_TEXT_1, "The Game Background Music:"); + DrawTextSCentered(ystart1, FONT_TEXT_1, "The Game Background Music:"); } if (!strEqual(list->title, UNKNOWN_NAME)) { if (!strEqual(list->title_header, UNKNOWN_NAME)) - DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->title_header); + DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->title_header); - DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "\"%s\"", list->title); + DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "\"%s\"", list->title); } if (!strEqual(list->artist, UNKNOWN_NAME)) { if (!strEqual(list->artist_header, UNKNOWN_NAME)) - DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->artist_header); + DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->artist_header); else - DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, "by"); + DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, "by"); - DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "%s", list->artist); + DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "%s", list->artist); } if (!strEqual(list->album, UNKNOWN_NAME)) { if (!strEqual(list->album_header, UNKNOWN_NAME)) - DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->album_header); + DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->album_header); else - DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, "from the album"); + DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, "from the album"); - DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "\"%s\"", list->album); + DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "\"%s\"", list->album); } if (!strEqual(list->year, UNKNOWN_NAME)) { if (!strEqual(list->year_header, UNKNOWN_NAME)) - DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, list->year_header); + DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, list->year_header); else - DrawTextSCentered(ystart + y++ * dy, FONT_TEXT_2, "from the year"); + DrawTextSCentered(ystart2 + y++ * dy, FONT_TEXT_2, "from the year"); - DrawTextFCentered(ystart + y++ * dy, FONT_TEXT_3, "%s", list->year); + DrawTextFCentered(ystart2 + y++ * dy, FONT_TEXT_3, "%s", list->year); } DrawTextSCentered(ybottom, FONT_TEXT_4, @@ -2440,8 +2929,10 @@ void HandleInfoScreen_Music(int button) static boolean DrawInfoScreen_CreditsScreen(int screen_nr) { - int ystart = 150, ystep = 30; - int ybottom = SYSIZE - 20; + int ystart1 = mSY - SY + 100; + int ystart2 = mSY - SY + 150; + int ybottom = mSY - SY + SYSIZE - 20; + int ystep = 30; if (screen_nr > 8) return FALSE; @@ -2449,155 +2940,155 @@ static boolean DrawInfoScreen_CreditsScreen(int screen_nr) ClearWindow(); DrawHeadline(); - DrawTextSCentered(100, FONT_TEXT_1, "Credits:"); + DrawTextSCentered(ystart1, FONT_TEXT_1, "Credits:"); if (screen_nr == 0) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Special thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "Peter Liepa"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "for creating"); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3, "\"Boulder Dash\""); - DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2, "in the year"); - DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3, "1984"); - DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2, "published by"); - DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3, "First Star Software"); } else if (screen_nr == 1) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Special thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "Klaus Heinz & Volker Wertich"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "for creating"); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3, "\"Emerald Mine\""); - DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2, "in the year"); - DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3, "1987"); - DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2, "published by"); - DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3, "Kingsoft"); } else if (screen_nr == 2) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Special thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "Michael Stopp & Philip Jespersen"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "for creating"); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3, "\"Supaplex\""); - DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2, "in the year"); - DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3, "1991"); - DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2, "published by"); - DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3, "Digital Integration"); } else if (screen_nr == 3) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Special thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "Hiroyuki Imabayashi"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "for creating"); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3, "\"Sokoban\""); - DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2, "in the year"); - DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3, "1982"); - DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2, "published by"); - DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_3, "Thinking Rabbit"); } else if (screen_nr == 4) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Special thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "Alan Bond"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "and"); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3, "Jürgen Bonhagen"); - DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2, "for the continuous creation"); - DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_2, "of outstanding level sets"); } else if (screen_nr == 5) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "Peter Elzner"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "for ideas and inspiration by"); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3, "Diamond Caves"); - DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_2, "Thanks to"); - DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_3, "Steffest"); - DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_2, "for ideas and inspiration by"); - DrawTextSCentered(ystart + 8 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 8 * ystep, FONT_TEXT_3, "DX-Boulderdash"); } else if (screen_nr == 6) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "David Tritscher"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "for the new Emerald Mine engine"); } else if (screen_nr == 7) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "Thanks to"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_3, "Guido Schulz"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_2, "for the initial DOS port"); - DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_2, "Thanks to"); - DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 5 * ystep, FONT_TEXT_3, "Karl Hörnell"); - DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 6 * ystep, FONT_TEXT_2, "for some additional toons"); } else if (screen_nr == 8) { - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "And not to forget:"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_2, "Many thanks to"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_3, "All those who contributed"); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_3, "levels to this game"); - DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_3, "since 1995"); } #if 0 @@ -2619,11 +3110,25 @@ void DrawInfoScreen_Credits() FadeSoundsAndMusic(); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif HandleInfoScreen_Credits(MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Credits(int button) @@ -2664,7 +3169,17 @@ void HandleInfoScreen_Credits(int button) else { FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2678,49 +3193,65 @@ void HandleInfoScreen_Credits(int button) void DrawInfoScreen_Program() { - int ystart = 150, ystep = 30; - int ybottom = SYSIZE - 20; + int ystart1 = mSY - SY + 100; + int ystart2 = mSY - SY + 150; + int ybottom = mSY - SY + SYSIZE - 20; + int ystep = 30; SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); - DrawTextSCentered(100, FONT_TEXT_1, "Program Information:"); + DrawTextSCentered(ystart1, FONT_TEXT_1, "Program Information:"); - DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 0 * ystep, FONT_TEXT_2, "This game is Freeware!"); - DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 1 * ystep, FONT_TEXT_2, "If you like it, send e-mail to:"); - DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 2 * ystep, FONT_TEXT_3, PROGRAM_EMAIL_STRING); - DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 3 * ystep, FONT_TEXT_2, "or SnailMail to:"); - DrawTextSCentered(ystart + 4 * ystep + 0, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 4 * ystep + 0, FONT_TEXT_3, "Holger Schemel"); - DrawTextSCentered(ystart + 4 * ystep + 20, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 4 * ystep + 20, FONT_TEXT_3, "Detmolder Strasse 189"); - DrawTextSCentered(ystart + 4 * ystep + 40, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 4 * ystep + 40, FONT_TEXT_3, "33604 Bielefeld"); - DrawTextSCentered(ystart + 4 * ystep + 60, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 4 * ystep + 60, FONT_TEXT_3, "Germany"); - DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 7 * ystep, FONT_TEXT_2, "More information and levels:"); - DrawTextSCentered(ystart + 8 * ystep, FONT_TEXT_3, + DrawTextSCentered(ystart2 + 8 * ystep, FONT_TEXT_3, PROGRAM_WEBSITE_STRING); - DrawTextSCentered(ystart + 9 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 9 * ystep, FONT_TEXT_2, "If you have created new levels,"); - DrawTextSCentered(ystart + 10 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 10 * ystep, FONT_TEXT_2, "send them to me to include them!"); - DrawTextSCentered(ystart + 11 * ystep, FONT_TEXT_2, + DrawTextSCentered(ystart2 + 11 * ystep, FONT_TEXT_2, ":-)"); DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Program(int button) @@ -2739,7 +3270,17 @@ void HandleInfoScreen_Program(int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2756,60 +3297,70 @@ void DrawInfoScreen_Version() int font_text = FONT_TEXT_2; int xstep = getFontWidth(font_text); int ystep = getFontHeight(font_text); - int ystart = 150; - int ybottom = SYSIZE - 20; - int xstart1 = SX + 2 * xstep; - int xstart2 = SX + 18 * xstep; + int ystart1 = mSY - SY + 100; + int ystart2 = mSY - SY + 150; + int ybottom = mSY - SY + SYSIZE - 20; + int xstart1 = mSX + 2 * xstep; + int xstart2 = mSX + 19 * xstep; #if defined(TARGET_SDL) - int xstart3 = SX + 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); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); - DrawTextSCentered(100, FONT_TEXT_1, "Version Information:"); + DrawTextSCentered(ystart1, FONT_TEXT_1, "Version Information:"); - DrawTextF(xstart1, ystart, font_header, "Name"); - DrawTextF(xstart2, ystart, font_text, PROGRAM_TITLE_STRING); + DrawTextF(xstart1, ystart2, font_header, "Name"); + DrawTextF(xstart2, ystart2, font_text, PROGRAM_TITLE_STRING); - ystart += ystep; - DrawTextF(xstart1, ystart, font_header, "Version"); - DrawTextF(xstart2, ystart, font_text, getProgramFullVersionString()); + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_header, "Version"); + DrawTextF(xstart2, ystart2, font_text, getProgramFullVersionString()); - ystart += ystep; - DrawTextF(xstart1, ystart, font_header, "Platform"); - DrawTextF(xstart2, ystart, font_text, PLATFORM_STRING); + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_header, "Platform"); + DrawTextF(xstart2, ystart2, font_text, PLATFORM_STRING); - ystart += ystep; - DrawTextF(xstart1, ystart, font_header, "Target"); - DrawTextF(xstart2, ystart, font_text, TARGET_STRING); + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_header, "Target"); + DrawTextF(xstart2, ystart2, font_text, TARGET_STRING); - ystart += ystep; - DrawTextF(xstart1, ystart, font_header, "Compile time"); - DrawTextF(xstart2, ystart, font_text, getCompileDateString()); + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_header, "Compile time"); + DrawTextF(xstart2, ystart2, font_text, getCompileDateString()); #if defined(TARGET_SDL) - ystart += 3 * ystep; - DrawTextF(xstart1, ystart, font_header, "Library"); - DrawTextF(xstart2, ystart, font_header, "compiled"); - DrawTextF(xstart3, ystart, font_header, "linked"); + ystart2 += 3 * ystep; + DrawTextF(xstart1, ystart2, font_header, "Library"); + DrawTextF(xstart2, ystart2, font_header, "compiled"); + DrawTextF(xstart3, ystart2, font_header, "linked"); SDL_VERSION(&sdl_version_compiled); sdl_version_linked = SDL_Linked_Version(); - ystart += 2 * ystep; - DrawTextF(xstart1, ystart, font_text, "SDL"); - DrawTextF(xstart2, ystart, font_text, "%d.%d.%d", + ystart2 += 2 * ystep; + DrawTextF(xstart1, ystart2, font_text, "SDL"); + DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d", sdl_version_compiled.major, sdl_version_compiled.minor, sdl_version_compiled.patch); - DrawTextF(xstart3, ystart, font_text, "%d.%d.%d", + DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d", sdl_version_linked->major, sdl_version_linked->minor, sdl_version_linked->patch); @@ -2817,13 +3368,13 @@ void DrawInfoScreen_Version() SDL_IMAGE_VERSION(&sdl_version_compiled); sdl_version_linked = IMG_Linked_Version(); - ystart += ystep; - DrawTextF(xstart1, ystart, font_text, "SDL_image"); - DrawTextF(xstart2, ystart, font_text, "%d.%d.%d", + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_text, "SDL_image"); + DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d", sdl_version_compiled.major, sdl_version_compiled.minor, sdl_version_compiled.patch); - DrawTextF(xstart3, ystart, font_text, "%d.%d.%d", + DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d", sdl_version_linked->major, sdl_version_linked->minor, sdl_version_linked->patch); @@ -2831,13 +3382,13 @@ void DrawInfoScreen_Version() SDL_MIXER_VERSION(&sdl_version_compiled); sdl_version_linked = Mix_Linked_Version(); - ystart += ystep; - DrawTextF(xstart1, ystart, font_text, "SDL_mixer"); - DrawTextF(xstart2, ystart, font_text, "%d.%d.%d", + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_text, "SDL_mixer"); + DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d", sdl_version_compiled.major, sdl_version_compiled.minor, sdl_version_compiled.patch); - DrawTextF(xstart3, ystart, font_text, "%d.%d.%d", + DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d", sdl_version_linked->major, sdl_version_linked->minor, sdl_version_linked->patch); @@ -2845,22 +3396,48 @@ void DrawInfoScreen_Version() SDL_NET_VERSION(&sdl_version_compiled); sdl_version_linked = SDLNet_Linked_Version(); - ystart += ystep; - DrawTextF(xstart1, ystart, font_text, "SDL_net"); - DrawTextF(xstart2, ystart, font_text, "%d.%d.%d", + ystart2 += ystep; + DrawTextF(xstart1, ystart2, font_text, "SDL_net"); + DrawTextF(xstart2, ystart2, font_text, "%d.%d.%d", sdl_version_compiled.major, sdl_version_compiled.minor, sdl_version_compiled.patch); - DrawTextF(xstart3, ystart, font_text, "%d.%d.%d", + DrawTextF(xstart3, ystart2, font_text, "%d.%d.%d", 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, "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Version(int button) @@ -2879,7 +3456,17 @@ void HandleInfoScreen_Version(int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2892,43 +3479,56 @@ void HandleInfoScreen_Version(int button) void DrawInfoScreen_LevelSet() { - int ystart = 150; - int ybottom = SYSIZE - 20; + struct TitleMessageInfo *tmi = &readme; char *filename = getLevelSetInfoFilename(); -#if 1 - int font_nr = FONT_INFO_LEVELSET; -#else - int font_nr = FONT_LEVEL_NUMBER; -#endif - int font_width = getFontWidth(font_nr); - int font_height = getFontHeight(font_nr); - int pad_x = 32; - int pad_y = ystart; - int sx = SX + pad_x; - int sy = SY + pad_y; - int max_chars_per_line = (SXSIZE - 2 * pad_x) / font_width; - int max_lines_per_screen = (SYSIZE - pad_y) / font_height - 1; + + /* if chars set to "-1", automatically determine by text and font width */ + if (tmi->chars == -1) + tmi->chars = tmi->width / getFontWidth(tmi->font); + else + tmi->width = tmi->chars * getFontWidth(tmi->font); + + /* if lines set to "-1", automatically determine by text and font height */ + if (tmi->lines == -1) + tmi->lines = tmi->height / getFontHeight(tmi->font); + else + tmi->height = tmi->lines * getFontHeight(tmi->font); SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); - DrawTextSCentered(100, FONT_TEXT_1, "Level Set Information:"); - - DrawTextSCentered(ybottom, FONT_TEXT_4, - "Press any key or button for info menu"); + DrawTextCentered(mSY + 100, FONT_TEXT_1, "Level Set Information:"); if (filename != NULL) - DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line, - max_lines_per_screen, TRUE); + DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi), + filename, tmi->font, tmi->chars, -1, tmi->lines, -1, + tmi->autowrap, tmi->centered, tmi->parse_comments); else - DrawTextSCentered(ystart, FONT_TEXT_2, - "No information for this level set."); + DrawTextCentered(mSY + ALIGNED_TEXT_YPOS(tmi), FONT_TEXT_2, + "No information for this level set."); + + DrawTextCentered(mSY + SYSIZE - 20, FONT_TEXT_4, + "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_LevelSet(int button) @@ -2947,7 +3547,17 @@ void HandleInfoScreen_LevelSet(int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -3030,16 +3640,16 @@ 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; - int startx = mSX + ALIGNED_MENU_XPOS(pos); - int starty = mSY + ALIGNED_MENU_YPOS(pos); + struct TextPosInfo *pos = mci->pos_input; + int startx = mSX + ALIGNED_TEXT_XPOS(pos); + int starty = mSY + ALIGNED_TEXT_YPOS(pos); #endif #if 1 static int xpos = 0; #else static int xpos = 0, ypos = 2; #endif - int font_nr = mci->font_input; + int font_nr = pos->font; int font_active_nr = FONT_ACTIVE(font_nr); int font_width = getFontWidth(font_active_nr); #if 1 @@ -3067,7 +3677,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); @@ -3083,7 +3693,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); @@ -3098,7 +3708,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); @@ -3109,7 +3719,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); @@ -3133,7 +3743,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); @@ -3141,12 +3751,10 @@ 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); } - - sprintf(main_input_name, "%s", setup.player_name); } @@ -3163,12 +3771,27 @@ static void DrawChooseTree(TreeInfo **ti_ptr) CloseDoor(DOOR_CLOSE_2); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#endif + ClearWindow(); HandleChooseTree(0, 0, 0, 0, MB_MENU_INITIALIZE, ti_ptr); MapScreenTreeGadgets(*ti_ptr); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else FadeToFront(); +#endif + InitAnimation(); } @@ -3362,7 +3985,11 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, else { game_status = GAME_MODE_MAIN; +#if 1 + DrawMainMenuExt(REDRAW_FIELD, FALSE); +#else DrawMainMenu(); +#endif } return; @@ -3573,7 +4200,16 @@ void DrawHallOfFame(int highlight_position) if (highlight_position < 0) LoadScore(level_nr); + fading = menu.destination; + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif InitAnimation(); @@ -3582,7 +4218,14 @@ void DrawHallOfFame(int highlight_position) HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } static void drawHallOfFameList(int first_entry, int highlight_position) @@ -3677,7 +4320,17 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSound(SND_BACKGROUND_SCORES); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif game_status = GAME_MODE_MAIN; @@ -3909,7 +4562,11 @@ static void execSetupShortcut2() static void execExitSetup() { game_status = GAME_MODE_MAIN; +#if 1 + DrawMainMenuExt(REDRAW_FIELD, FALSE); +#else DrawMainMenu(); +#endif } static void execSaveAndExitSetup() @@ -4304,6 +4961,13 @@ static void DrawSetupScreen_Generic() UnmapAllGadgets(); CloseDoor(DOOR_CLOSE_2); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#endif + ClearWindow(); if (setup_mode == SETUP_MODE_MAIN) @@ -4394,9 +5058,23 @@ static void DrawSetupScreen_Generic() "Joysticks deactivated in setup menu"); #endif +#if 1 + HandleSetupScreen_Generic(0, 0, 0, 0, MB_MENU_INITIALIZE); +#endif + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else FadeToFront(); +#endif + InitAnimation(); +#if 0 HandleSetupScreen_Generic(0, 0, 0, 0, MB_MENU_INITIALIZE); +#endif } void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) @@ -4519,6 +5197,13 @@ void DrawSetupScreen_Input() int i; #endif +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#endif + ClearWindow(); #if 1 @@ -4566,7 +5251,16 @@ void DrawSetupScreen_Input() MapScreenMenuGadgets(SCREEN_MASK_INPUT); HandleSetupScreen_Input(0, 0, 0, 0, MB_MENU_INITIALIZE); + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else FadeToFront(); +#endif + InitAnimation(); }