#define ANIM_CLASS_BIT_TITLE_INITIAL 0
#define ANIM_CLASS_BIT_TITLE 1
#define ANIM_CLASS_BIT_MAIN 2
-#define ANIM_CLASS_BIT_SCORES 3
-#define ANIM_CLASS_BIT_SUBMENU 4
-#define ANIM_CLASS_BIT_MENU 5
-#define ANIM_CLASS_BIT_TOONS 6
-#define ANIM_CLASS_BIT_NO_TITLE 7
+#define ANIM_CLASS_BIT_NAMES 3
+#define ANIM_CLASS_BIT_SCORES 4
+#define ANIM_CLASS_BIT_SCORESONLY 5
+#define ANIM_CLASS_BIT_SUBMENU 6
+#define ANIM_CLASS_BIT_MENU 7
+#define ANIM_CLASS_BIT_TOONS 8
+#define ANIM_CLASS_BIT_NO_TITLE 9
-#define NUM_ANIM_CLASSES 8
+#define NUM_ANIM_CLASSES 10
#define ANIM_CLASS_NONE 0
#define ANIM_CLASS_TITLE_INITIAL (1 << ANIM_CLASS_BIT_TITLE_INITIAL)
#define ANIM_CLASS_TITLE (1 << ANIM_CLASS_BIT_TITLE)
#define ANIM_CLASS_MAIN (1 << ANIM_CLASS_BIT_MAIN)
+#define ANIM_CLASS_NAMES (1 << ANIM_CLASS_BIT_NAMES)
#define ANIM_CLASS_SCORES (1 << ANIM_CLASS_BIT_SCORES)
+#define ANIM_CLASS_SCORESONLY (1 << ANIM_CLASS_BIT_SCORESONLY)
#define ANIM_CLASS_SUBMENU (1 << ANIM_CLASS_BIT_SUBMENU)
#define ANIM_CLASS_MENU (1 << ANIM_CLASS_BIT_MENU)
#define ANIM_CLASS_TOONS (1 << ANIM_CLASS_BIT_TOONS)
ANIM_CLASS_SCORES | \
ANIM_CLASS_NO_TITLE)
+#define ANIM_CLASS_TOONS_SCORESONLY (ANIM_CLASS_TOONS | \
+ ANIM_CLASS_SCORES | \
+ ANIM_CLASS_SCORESONLY | \
+ ANIM_CLASS_NO_TITLE)
+
#define ANIM_CLASS_TOONS_MENU_MAIN (ANIM_CLASS_TOONS | \
ANIM_CLASS_MENU | \
ANIM_CLASS_MAIN | \
ANIM_CLASS_SUBMENU | \
ANIM_CLASS_NO_TITLE)
+#define ANIM_CLASS_TOONS_MENU_SUBMENU_2 (ANIM_CLASS_TOONS | \
+ ANIM_CLASS_MENU | \
+ ANIM_CLASS_SUBMENU | \
+ ANIM_CLASS_NAMES | \
+ ANIM_CLASS_NO_TITLE)
+
// values for global animation states
#define ANIM_STATE_INACTIVE 0
#define ANIM_STATE_RESTART (1 << 0)
unsigned int initial_anim_sync_frame;
unsigned int anim_random_frame;
- unsigned int step_delay, step_delay_value;
+
+ DelayCounter step_delay;
int init_delay_counter;
int anim_delay_counter;
{ GAME_MODE_LEVELNR, ANIM_CLASS_TOONS_MENU_SUBMENU },
{ GAME_MODE_INFO, ANIM_CLASS_TOONS_MENU_SUBMENU },
{ GAME_MODE_SETUP, ANIM_CLASS_TOONS_MENU_SUBMENU },
- { GAME_MODE_PSEUDO_NAMESONLY, ANIM_CLASS_TOONS_MENU_SUBMENU },
- { GAME_MODE_PSEUDO_TYPENAMES, ANIM_CLASS_TOONS_MENU_SUBMENU },
+ { GAME_MODE_PSEUDO_NAMESONLY, ANIM_CLASS_TOONS_MENU_SUBMENU_2 },
+ { GAME_MODE_PSEUDO_TYPENAMES, ANIM_CLASS_TOONS_MENU_SUBMENU_2 },
{ GAME_MODE_PSEUDO_MAINONLY, ANIM_CLASS_TOONS_MENU_MAIN },
{ GAME_MODE_PSEUDO_TYPENAME, ANIM_CLASS_TOONS_MENU_MAIN },
- { GAME_MODE_PSEUDO_SCORESOLD, ANIM_CLASS_TOONS_SCORES },
- { GAME_MODE_PSEUDO_SCORESNEW, ANIM_CLASS_TOONS_SCORES },
+ { GAME_MODE_PSEUDO_SCORESOLD, ANIM_CLASS_TOONS_SCORESONLY },
+ { GAME_MODE_PSEUDO_SCORESNEW, ANIM_CLASS_TOONS_SCORESONLY },
+ { GAME_MODE_SCOREINFO, ANIM_CLASS_TOONS_SCORES },
{ GAME_MODE_EDITOR, ANIM_CLASS_NO_TITLE },
{ GAME_MODE_PLAYING, ANIM_CLASS_NO_TITLE },
{ ANIM_CLASS_BIT_TITLE_INITIAL, GAME_MODE_TITLE_INITIAL },
{ ANIM_CLASS_BIT_TITLE, GAME_MODE_TITLE },
{ ANIM_CLASS_BIT_MAIN, GAME_MODE_MAIN },
+ { ANIM_CLASS_BIT_NAMES, GAME_MODE_NAMES },
{ ANIM_CLASS_BIT_SCORES, GAME_MODE_SCORES },
+ { ANIM_CLASS_BIT_SCORESONLY, GAME_MODE_PSEUDO_SCORESONLY },
{ ANIM_CLASS_BIT_SUBMENU, GAME_MODE_PSEUDO_SUBMENU },
{ ANIM_CLASS_BIT_MENU, GAME_MODE_PSEUDO_MENU },
{ ANIM_CLASS_BIT_TOONS, GAME_MODE_PSEUDO_TOONS },
int sound = SND_UNDEFINED;
int music = MUS_UNDEFINED;
int graphic = IMG_TOON_1 + i;
- int control = graphic;
+
+ control = graphic;
part->nr = part_nr;
part->anim_nr = anim_nr;
part->initial_anim_sync_frame = 0;
part->anim_random_frame = -1;
- part->step_delay = 0;
- part->step_delay_value = graphic_info[control].step_delay;
+ part->step_delay.count = 0;
+ part->step_delay.value = graphic_info[control].step_delay;
part->state = ANIM_STATE_INACTIVE;
part->last_anim_status = -1;
part->initial_anim_sync_frame = 0;
part->anim_random_frame = -1;
- part->step_delay = 0;
- part->step_delay_value = graphic_info[control].step_delay;
+ part->step_delay.count = 0;
+ part->step_delay.value = graphic_info[control].step_delay;
part->state = ANIM_STATE_INACTIVE;
part->last_anim_status = -1;
static boolean clickBlocked(struct GlobalAnimPartControlInfo *part)
{
- return (part->control_info.style & STYLE_BLOCK ? TRUE : FALSE);
+ return ((part->control_info.style & STYLE_BLOCK) ? TRUE : FALSE);
}
static boolean clickConsumed(struct GlobalAnimPartControlInfo *part)
{
- return (part->control_info.style & STYLE_PASSTHROUGH ? FALSE : TRUE);
+ return ((part->control_info.style & STYLE_PASSTHROUGH) ? FALSE : TRUE);
}
static void InitGlobalAnim_Triggered(struct GlobalAnimPartControlInfo *part,
part->anim_event_state = (c->anim_event != ANIM_EVENT_UNDEFINED);
part->initial_anim_sync_frame =
- (g->anim_global_sync ? 0 : anim_sync_frame + part->init_delay_counter);
+ (g->anim_global_sync || g->anim_global_anim_sync ? 0 :
+ anim_sync_frame + part->init_delay_counter);
// do not re-initialize random animation frame after fade-in
if (part->anim_random_frame == -1)
// special case to prevent expiring loop sounds when playing
PlayGlobalAnimSoundIfLoop(part);
- if (!DelayReachedExt(&part->step_delay, part->step_delay_value,
- anim_sync_frame))
+ if (!DelayReachedExt(&part->step_delay, anim_sync_frame))
return ANIM_STATE_RUNNING;
#if 0
if (event_action == ANIM_EVENT_ACTION_NONE)
return FALSE;
- PushUserEvent(USEREVENT_ANIM_EVENT_ACTION, event_action, 0);
+ if (event_action < MAX_IMAGE_FILES)
+ PushUserEvent(USEREVENT_ANIM_EVENT_ACTION, event_action, 0);
+ else
+ OpenURLFromHash(anim_url_hash, event_action);
// check if further actions are allowed to be executed
if (part->control_info.style & STYLE_MULTIPLE_ACTIONS)
return click_consumed_current;
}
+
+int getGlobalAnimSyncFrame(void)
+{
+ return anim_sync_frame;
+}