X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fanim.c;h=50075c832ab8b42b4993c7c8fa7f7871aeac831c;hb=633d0244c9dfaf509bfdd5ea3bc9d37cfac7ffa5;hp=c3948745602ad2cbbfeb5ac56ee6a575b4a47717;hpb=bd4bc1bc76940bd91ecfbf7d01790c0433ab19e2;p=rocksndiamonds.git diff --git a/src/anim.c b/src/anim.c index c3948745..50075c83 100644 --- a/src/anim.c +++ b/src/anim.c @@ -36,19 +36,21 @@ #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_SCORESONLY 4 -#define ANIM_CLASS_BIT_SUBMENU 5 -#define ANIM_CLASS_BIT_MENU 6 -#define ANIM_CLASS_BIT_TOONS 7 -#define ANIM_CLASS_BIT_NO_TITLE 8 +#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 9 +#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) @@ -75,6 +77,12 @@ 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) @@ -116,7 +124,8 @@ struct GlobalAnimPartControlInfo 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; @@ -190,8 +199,8 @@ struct GameModeAnimClass { 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_SCORESONLY }, @@ -212,6 +221,7 @@ struct AnimClassGameMode { 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 }, @@ -401,7 +411,8 @@ static void InitToonControls(void) 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; @@ -427,8 +438,8 @@ static void InitToonControls(void) 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; @@ -534,8 +545,8 @@ static void InitGlobalAnimControls(void) 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; @@ -1166,12 +1177,12 @@ static boolean isClickedPart(struct GlobalAnimPartControlInfo *part, 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, @@ -1304,7 +1315,8 @@ static int HandleGlobalAnim_Part(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) @@ -1522,8 +1534,7 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, // 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 @@ -1766,7 +1777,10 @@ static boolean DoGlobalAnim_EventAction(struct GlobalAnimPartControlInfo *part) 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) @@ -1969,3 +1983,8 @@ boolean HandleGlobalAnimClicks(int mx, int my, int button, boolean force_click) return click_consumed_current; } + +int getGlobalAnimSyncFrame(void) +{ + return anim_sync_frame; +}