X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Ftoons.c;h=fd2bb8e5cd3acdd5f890abf17b9aeae48a9f12a5;hb=ee749a764df3dfa944c1f9de740ccbeb1cfdef40;hp=f2684b4034d626e097f77319f2172d2b8d83f9df;hpb=80b3b0a5109b5678a9a921fcd1b4f7046e5e76d0;p=rocksndiamonds.git diff --git a/src/libgame/toons.c b/src/libgame/toons.c index f2684b40..fd2bb8e5 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -48,7 +48,7 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame, } else if (mode & ANIM_PINGPONG) /* oscillate (border frames once) */ { - int max_anim_frames = 2 * num_frames - 2; + int max_anim_frames = (num_frames > 1 ? 2 * num_frames - 2 : 1); frame = (sync_frame % (delay * max_anim_frames)) / delay; frame = (frame < num_frames ? frame : max_anim_frames - frame); @@ -81,17 +81,18 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame, /* toon animation functions */ /* ========================================================================= */ -static int get_toon_direction(char *direction_raw) +static int get_toon_direction(char *direction_string_raw) { - static char *direction = NULL; + char *direction_string = getStringToLower(direction_string_raw); + int direction = (strcmp(direction_string, "left") == 0 ? MV_LEFT : + strcmp(direction_string, "right") == 0 ? MV_RIGHT : + strcmp(direction_string, "up") == 0 ? MV_UP : + strcmp(direction_string, "down") == 0 ? MV_DOWN : + MV_NO_MOVING); - /* !!! MEMORY LEAK HERE! FIX IT! !!! */ - setString(&direction, getStringToLower(direction_raw)); + free(direction_string); - return (strcmp(direction, "left") == 0 ? MV_LEFT : - strcmp(direction, "right") == 0 ? MV_RIGHT : - strcmp(direction, "up") == 0 ? MV_UP : - strcmp(direction, "down") == 0 ? MV_DOWN : MV_NO_MOVING); + return direction; } void InitToonScreen(Bitmap *save_buffer, @@ -122,7 +123,6 @@ void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, { int buf_x = DOOR_GFX_PAGEX3, buf_y = DOOR_GFX_PAGEY1; -#if 1 /* special method to avoid flickering interference with BackToFront() */ BlitBitmap(backbuffer, screen_info.save_buffer, dest_x-pad_x, dest_y-pad_y, width+2*pad_x, height+2*pad_y, buf_x, buf_y); @@ -136,16 +136,6 @@ void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, BlitBitmap(screen_info.save_buffer, backbuffer, buf_x, buf_y, width+2*pad_x, height+2*pad_y, dest_x-pad_x, dest_y-pad_y); -#else - /* normal method, causing flickering interference with BackToFront() */ - BlitBitmap(backbuffer, screen_info.save_buffer, dest_x-pad_x, dest_y-pad_y, - width+2*pad_x, height+2*pad_y, buf_x, buf_y); - SetClipOrigin(toon_bitmap,toon_clip_gc, buf_x-src_x+pad_x,buf_y-src_y+pad_y); - BlitBitmapMasked(toon_bitmap, screen_info.save_buffer, - src_x, src_y, width, height, buf_x+pad_x, buf_y+pad_y); - BlitBitmap(screen_info.save_buffer, window, buf_x, buf_y, - width+2*pad_x, height+2*pad_y, dest_x-pad_x, dest_y-pad_y); -#endif FlushDisplay(); }