}
else if (mode & ANIM_PINGPONG) /* oscillate (border frames once) */
{
+#if 1
+ int max_anim_frames = (num_frames > 1 ? 2 * num_frames - 2 : 1);
+#else
int max_anim_frames = 2 * num_frames - 2;
+#endif
frame = (sync_frame % (delay * max_anim_frames)) / delay;
frame = (frame < num_frames ? frame : max_anim_frames - 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,