X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Ftoons.c;h=5c0d4444fbae5f68d1268d5b717ceaa924662251;hb=601cca5b35649856ff49e1bcb3806592b736662c;hp=8ecc0d5d6672b1a1181fc4fab9f279763bcaba35;hpb=c5ee7e4524f10322894b2547337e4c973a80a552;p=rocksndiamonds.git diff --git a/src/libgame/toons.c b/src/libgame/toons.c index 8ecc0d5d..5c0d4444 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -64,7 +64,10 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame, { /* note: expect different frames for the same delay cycle! */ - frame = anim.simple_random_value % num_frames; + if (anim.random_frame < 0) + frame = SimpleRND(num_frames); + else + frame = anim.random_frame % num_frames; } if (mode & ANIM_REVERSE) /* use reverse animation direction */ @@ -156,10 +159,10 @@ boolean AnimateToon(int toon_nr, boolean restart) { horiz_move = (anim->direction & (ANIMDIR_LEFT | ANIMDIR_RIGHT)); vert_move = (anim->direction & (ANIMDIR_UP | ANIMDIR_DOWN)); - anim_delay_value = anim->move_delay * screen_info.frame_delay_value; + anim_delay_value = anim->step_delay * screen_info.frame_delay_value; frame = getAnimationFrame(anim->anim_frames, anim->anim_delay, - anim->anim_mode, anim->start_frame, + anim->anim_mode, anim->anim_start_frame, animation_frame_counter++); if (horiz_move) @@ -175,12 +178,12 @@ boolean AnimateToon(int toon_nr, boolean restart) if (anim->direction == ANIMDIR_RIGHT) { - delta_x = anim->stepsize; + delta_x = anim->step_offset; pos_x = -anim->width + delta_x; } else { - delta_x = -anim->stepsize; + delta_x = -anim->step_offset; pos_x = screen_info.width + delta_x; } delta_y = 0; @@ -196,22 +199,22 @@ boolean AnimateToon(int toon_nr, boolean restart) if (anim->direction == ANIMDIR_DOWN) { - delta_y = anim->stepsize; + delta_y = anim->step_offset; pos_y = -anim->height + delta_y; } else { - delta_y = -anim->stepsize; + delta_y = -anim->step_offset; pos_y = screen_info.width + delta_y; } delta_x = 0; } } - if (pos_x <= -anim->width - anim->stepsize || - pos_x >= screen_info.width + anim->stepsize || - pos_y <= -anim->height - anim->stepsize || - pos_y >= screen_info.height + anim->stepsize) + if (pos_x <= -anim->width - anim->step_offset || + pos_x >= screen_info.width + anim->step_offset || + pos_y <= -anim->height - anim->step_offset || + pos_y >= screen_info.height + anim->step_offset) return TRUE; if (!DelayReached(&anim_delay, anim_delay_value)) @@ -236,8 +239,8 @@ boolean AnimateToon(int toon_nr, boolean restart) else if (pos_y > screen_info.height) pos_y = screen_info.height; - pad_x = (horiz_move ? anim->stepsize : 0); - pad_y = (vert_move ? anim->stepsize : 0); + pad_x = (horiz_move ? anim->step_offset : 0); + pad_y = (vert_move ? anim->step_offset : 0); src_x = anim->src_x + frame * anim->width; src_y = anim->src_y; dest_x = pos_x; @@ -275,7 +278,7 @@ boolean AnimateToon(int toon_nr, boolean restart) pos_y += delta_y; frame = getAnimationFrame(anim->anim_frames, anim->anim_delay, - anim->anim_mode, anim->start_frame, + anim->anim_mode, anim->anim_start_frame, animation_frame_counter++); return FALSE;