X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fcartoons.c;h=42864403a720b9c9acd0485f8f6c45d6067b51ce;hb=bd24acb3d7e02c7d9700cf8e2a89ceeb7ea6bcca;hp=efe9ebcdb7c5b0e59e1e9d6d65440f8b039d24e2;hpb=d84b80f3e24a3b3e5537d7636ea2ad9809612214;p=rocksndiamonds.git diff --git a/src/cartoons.c b/src/cartoons.c index efe9ebcd..42864403 100644 --- a/src/cartoons.c +++ b/src/cartoons.c @@ -14,10 +14,15 @@ #include "tools.h" -/* values for global animation definition */ -#define NUM_GLOBAL_ANIMS_AND_TOONS (NUM_GLOBAL_ANIMS + 1) +/* values for global toon animation definition */ +#define NUM_GLOBAL_TOON_ANIMS 1 +#define NUM_GLOBAL_TOON_PARTS MAX_NUM_TOONS + +/* values for global animation definition (including toons) */ +#define NUM_GLOBAL_ANIMS_AND_TOONS (NUM_GLOBAL_ANIMS + \ + NUM_GLOBAL_TOON_ANIMS) #define NUM_GLOBAL_ANIM_PARTS_AND_TOONS MAX(NUM_GLOBAL_ANIM_PARTS_ALL, \ - MAX_NUM_TOONS) + NUM_GLOBAL_TOON_PARTS) struct GlobalAnimPartControlInfo { @@ -35,9 +40,9 @@ struct GlobalAnimPartControlInfo unsigned int initial_anim_sync_frame; unsigned int step_delay, step_delay_value; - unsigned int init_delay, init_delay_value; - unsigned int anim_delay, anim_delay_value; - unsigned int post_delay, post_delay_value; + int init_delay_counter; + int anim_delay_counter; + int post_delay_counter; int state; }; @@ -58,7 +63,7 @@ struct GlobalAnimMainControlInfo boolean has_base; - unsigned int init_delay, init_delay_value; + int init_delay_counter; int state; }; @@ -180,8 +185,7 @@ static void InitToonControls() anim->has_base = FALSE; - anim->init_delay = 0; - anim->init_delay_value = 0; + anim->init_delay_counter = 0; anim->state = ANIM_STATE_INACTIVE; @@ -262,8 +266,7 @@ void InitGlobalAnimControls() anim->has_base = FALSE; - anim->init_delay = 0; - anim->init_delay_value = 0; + anim->init_delay_counter = 0; anim->state = ANIM_STATE_INACTIVE; @@ -427,14 +430,14 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) { ResetDelayCounterExt(&part->step_delay, anim_sync_frame); - part->init_delay_value = + part->init_delay_counter = (c->init_delay_fixed + GetSimpleRandom(c->init_delay_random)); - part->anim_delay_value = + part->anim_delay_counter = (c->anim_delay_fixed + GetSimpleRandom(c->anim_delay_random)); part->initial_anim_sync_frame = - (g->anim_global_sync ? 0 : anim_sync_frame + part->init_delay_value); + (g->anim_global_sync ? 0 : anim_sync_frame + part->init_delay_counter); if (c->direction & MV_HORIZONTAL) { @@ -510,9 +513,9 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) part->step_yoffset = c->step_yoffset; } - if (part->init_delay_value > 0) + if (part->init_delay_counter > 0) { - part->init_delay_value--; + part->init_delay_counter--; return ANIM_STATE_WAITING; } @@ -523,12 +526,30 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state) (part->y >= FULL_SYSIZE && part->step_yoffset >= 0)) return ANIM_STATE_RESTART; - if (part->anim_delay_value > 0) + if (part->anim_delay_counter > 0) { - part->anim_delay_value--; + part->anim_delay_counter--; + + if (part->anim_delay_counter == 0) + { + part->post_delay_counter = + (c->post_delay_fixed + GetSimpleRandom(c->post_delay_random)); + + if (part->post_delay_counter > 0) + return ANIM_STATE_RUNNING; - if (part->anim_delay_value == 0) return ANIM_STATE_RESTART | ANIM_STATE_RUNNING; + } + } + + if (part->post_delay_counter > 0) + { + part->post_delay_counter--; + + if (part->post_delay_counter == 0) + return ANIM_STATE_RESTART; + + return ANIM_STATE_WAITING; } if (!DelayReachedExt(&part->step_delay, part->step_delay_value,