X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fcartoons.c;h=2e74c72b92a5683da4063eb88a88ff1fd6381775;hp=97e2ee43126ffbed0f9f91e3a66e6b68a9d21e7f;hb=3466bff66861926f480a96e5b8923a4e044d50a4;hpb=fdbbb11d5c885a8e70abf796d13f4c54abdafcb9 diff --git a/src/cartoons.c b/src/cartoons.c index 97e2ee43..2e74c72b 100644 --- a/src/cartoons.c +++ b/src/cartoons.c @@ -26,21 +26,24 @@ #define ANIM_CLASS_BIT_TITLE_INITIAL 0 #define ANIM_CLASS_BIT_TITLE 1 -#define ANIM_CLASS_BIT_SUBMENU 2 -#define ANIM_CLASS_BIT_MENU 3 -#define ANIM_CLASS_BIT_TOONS 4 +#define ANIM_CLASS_BIT_MAIN 2 +#define ANIM_CLASS_BIT_SUBMENU 3 +#define ANIM_CLASS_BIT_MENU 4 +#define ANIM_CLASS_BIT_TOONS 5 -#define NUM_ANIM_CLASSES 5 +#define NUM_ANIM_CLASSES 6 #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_SUBMENU (1 << ANIM_CLASS_BIT_SUBMENU) #define ANIM_CLASS_MENU (1 << ANIM_CLASS_BIT_MENU) #define ANIM_CLASS_TOONS (1 << ANIM_CLASS_BIT_TOONS) -#define ANIM_CLASS_TOONS_MENU (ANIM_CLASS_TOONS | \ - ANIM_CLASS_MENU) +#define ANIM_CLASS_TOONS_MENU_MAIN (ANIM_CLASS_TOONS | \ + ANIM_CLASS_MENU | \ + ANIM_CLASS_MAIN) #define ANIM_CLASS_TOONS_MENU_SUBMENU (ANIM_CLASS_TOONS | \ ANIM_CLASS_MENU | \ @@ -130,7 +133,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_MAIN, ANIM_CLASS_TOONS_MENU }, + { GAME_MODE_PSEUDO_MAINONLY, ANIM_CLASS_TOONS_MENU_MAIN }, + { GAME_MODE_PSEUDO_TYPENAME, ANIM_CLASS_TOONS_MENU_MAIN }, { GAME_MODE_SCORES, ANIM_CLASS_TOONS }, { -1, -1 } @@ -144,6 +148,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_SUBMENU, GAME_MODE_PSEUDO_SUBMENU }, { ANIM_CLASS_BIT_MENU, GAME_MODE_PSEUDO_MENU }, { ANIM_CLASS_BIT_TOONS, GAME_MODE_PSEUDO_TOONS }, @@ -306,12 +311,14 @@ static void InitToonControls() for (i = 0; i < num_toons; i++) { struct GlobalAnimPartControlInfo *part = &anim->part[part_nr]; + int sound = SND_UNDEFINED; int graphic = IMG_TOON_1 + i; int control = graphic; part->nr = part_nr; part->anim_nr = anim_nr; part->mode_nr = mode_nr; + part->sound = sound; part->graphic = graphic; part->graphic_info = graphic_info[graphic]; part->control_info = graphic_info[control]; @@ -865,14 +872,15 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) if (part->anim_delay_counter == 0 && part->post_delay_counter == 0) { + StopGlobalAnimSound(part); + part->post_delay_counter = (c->post_delay_fixed + GetSimpleRandom(c->post_delay_random)); if (part->post_delay_counter > 0) return ANIM_STATE_RUNNING; - StopGlobalAnimSound(part); - + // drawing last frame not needed here -- animation not visible anymore return ANIM_STATE_RESTART; } } @@ -883,14 +891,14 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) if (part->anim_delay_counter == 0) { + StopGlobalAnimSound(part); + part->post_delay_counter = (c->post_delay_fixed + GetSimpleRandom(c->post_delay_random)); if (part->post_delay_counter > 0) return ANIM_STATE_RUNNING; - StopGlobalAnimSound(part); - // additional state "RUNNING" required to not skip drawing last frame return ANIM_STATE_RESTART | ANIM_STATE_RUNNING; } @@ -900,9 +908,6 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) { part->post_delay_counter--; - if (part->post_delay_counter == 0) - StopGlobalAnimSound(part); - if (part->post_delay_counter == 0) return ANIM_STATE_RESTART;