rnd-20031130-1-src
[rocksndiamonds.git] / src / libgame / toons.c
index f2684b4034d626e097f77319f2172d2b8d83f9df..2d0a355014bd05595f2413d6f60d4b31a188da79 100644 (file)
@@ -48,7 +48,11 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame,
   }
   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);
@@ -81,17 +85,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,