static TreeInfo *level_number = NULL;
static TreeInfo *level_number_current = NULL;
+static unsigned int sync_frame_delay = 0;
+static unsigned int sync_frame_delay_value = GAME_FRAME_DELAY;
+
static struct
{
int value;
{
boolean is_image;
boolean initial;
+ boolean first;
int local_nr;
int sort_priority;
};
static struct TitleFadingInfo getTitleFading(struct TitleControlInfo *tci)
{
boolean is_image = tci->is_image;
- int initial = tci->initial;
+ boolean initial = tci->initial;
+ boolean first = tci->first;
int nr = tci->local_nr;
+ struct TitleMessageInfo tmi;
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].fade_mode != FADE_MODE_DEFAULT)
- ti.fade_mode = graphic_info[graphic].fade_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.fade_mode = titlemessage_initial[nr].fade_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.fade_mode = titlemessage[nr].fade_mode;
- ti.fade_delay = titlemessage[nr].fade_delay;
- ti.post_delay = titlemessage[nr].post_delay;
- ti.auto_delay = titlemessage[nr].auto_delay;
- }
- }
+ tmi = (is_image ? (initial ? (first ?
+ titlescreen_initial_first[nr] :
+ titlescreen_initial[nr])
+ : (first ?
+ titlescreen_first[nr] :
+ titlescreen[nr]))
+ : (initial ? (first ?
+ titlemessage_initial_first[nr] :
+ titlemessage_initial[nr])
+ : (first ?
+ titlemessage_first[nr] :
+ titlemessage[nr])));
+
+ ti.fade_mode = tmi.fade_mode;
+ ti.fade_delay = tmi.fade_delay;
+ ti.post_delay = tmi.post_delay;
+ ti.auto_delay = tmi.auto_delay;
return ti;
}
title_controls[num_title_screens].local_nr = nr;
title_controls[num_title_screens].sort_priority = sort_priority;
+ title_controls[num_title_screens].first = FALSE; /* will be set later */
+
num_title_screens++;
}
/* sort title screens according to sort_priority and title number */
qsort(title_controls, num_title_screens, sizeof(struct TitleControlInfo),
compareTitleControlInfo);
+
+ /* mark first title screen */
+ title_controls[0].first = TRUE;
}
static boolean visibleMenuPos(struct MenuPosInfo *pos)
last_sound = SND_UNDEFINED;
last_music = MUS_UNDEFINED;
- FadeSetEnterScreen();
+ if (num_title_screens != 0)
+ {
+ FadeSetEnterScreen();
+
+ /* use individual title fading instead of global "enter screen" fading */
+ fading = getTitleFading(tci);
+ }
if (game_status_last_screen == GAME_MODE_INFO)
{
if (num_title_screens == 0)
{
+ /* switch game mode from title screen mode back to info screen mode */
+ game_status = GAME_MODE_INFO;
+
DrawInfoScreen_NotAvailable("Title screen information:",
"No title screen for this level set.");
{
if (game_status_last_screen == GAME_MODE_INFO && num_title_screens == 0)
{
- FadeSetEnterScreen();
-
game_status = GAME_MODE_INFO;
info_mode = INFO_MODE_MAIN;
{ TYPE_SWITCH, &setup.quick_switch, "Quick Player Focus Switch:" },
{ TYPE_SWITCH, &setup.quick_doors, "Quick Menu Doors:" },
{ TYPE_SWITCH, &setup.show_titlescreen,"Show Title Screens:" },
- { TYPE_SWITCH, &setup.toons, "Show Toons:" },
+ { TYPE_SWITCH, &setup.toons, "Show Menu Animations:" },
{ TYPE_ECS_AGA, &setup.prefer_aga_graphics,"EMC graphics preference:" },
{ TYPE_SWITCH, &setup.sp_show_border_elements,"Supaplex Border Elements:" },
{ TYPE_SWITCH, &setup.small_game_graphics, "Small Game Graphics:" },
DoAnimation();
BackToFront();
- /* don't eat all CPU time */
- Delay(10);
+ WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
}
return key;
DoAnimation();
BackToFront();
- /* don't eat all CPU time */
- Delay(10);
+ WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
}
/* write new key bindings back to player setup */
DoAnimation();
BackToFront();
- /* don't eat all CPU time */
- Delay(10);
+ WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
}
/* calibrated center position (joystick should now be centered) */
NextEvent(&event);
HandleOtherEvents(&event);
- Delay(10);
+ WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
}
}