X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fanim.c;h=8a1264c2314da0fd79ec204451bf58bfd7dede6c;hb=85d83fd479a42b207af8fc93615568bd4cd19f3c;hp=c2ec75f64c65a87ea17212d0a66c34773de1a0d4;hpb=c07e4d51f30c46731bf28c42954dc7726457984e;p=rocksndiamonds.git diff --git a/src/anim.c b/src/anim.c index c2ec75f6..8a1264c2 100644 --- a/src/anim.c +++ b/src/anim.c @@ -36,19 +36,23 @@ #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) @@ -58,6 +62,11 @@ 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 | \ @@ -68,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) @@ -109,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; @@ -183,12 +199,13 @@ 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_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 }, @@ -204,7 +221,9 @@ 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 }, { ANIM_CLASS_BIT_MENU, GAME_MODE_PSEUDO_MENU }, { ANIM_CLASS_BIT_TOONS, GAME_MODE_PSEUDO_TOONS }, @@ -392,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; @@ -418,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; @@ -525,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; @@ -1513,8 +1533,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 @@ -1757,7 +1776,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)