rnd-20061206-1-src
[rocksndiamonds.git] / src / libgame / toons.c
index fd2bb8e5cd3acdd5f890abf17b9aeae48a9f12a5..bbbd88333e7fc106abb68146b8efd0d7306177f9 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Artsoft Retro-Game Library                               *
 *----------------------------------------------------------*
-* (c) 1995-2002 Artsoft Entertainment                      *
+* (c) 1995-2006 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
@@ -65,10 +65,14 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame,
     /* note: expect different frames for the same delay cycle! */
 
     if (gfx.anim_random_frame < 0)
-      frame = SimpleRND(num_frames);
+      frame = GetSimpleRandom(num_frames);
     else
       frame = gfx.anim_random_frame % num_frames;
   }
+  else if (mode & (ANIM_CE_VALUE | ANIM_CE_SCORE | ANIM_CE_DELAY))
+  {
+    frame = sync_frame % num_frames;
+  }
 
   if (mode & ANIM_REVERSE)             /* use reverse animation direction */
     frame = num_frames - frame - 1;
@@ -84,11 +88,11 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame,
 static int get_toon_direction(char *direction_string_raw)
 {
   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);
+  int direction = (strEqual(direction_string, "left")  ? MV_LEFT :
+                  strEqual(direction_string, "right") ? MV_RIGHT :
+                  strEqual(direction_string, "up")    ? MV_UP :
+                  strEqual(direction_string, "down")  ? MV_DOWN :
+                  MV_NONE);
 
   free(direction_string);
 
@@ -173,16 +177,16 @@ boolean AnimateToon(int toon_nr, boolean restart)
     {
       int pos_bottom = screen_info.height - anim->height;
 
-      if (strcmp(anim->position, "top") == 0)
+      if (strEqual(anim->position, "top"))
        pos_y = 0;
-      else if (strcmp(anim->position, "bottom") == 0)
+      else if (strEqual(anim->position, "bottom"))
        pos_y = pos_bottom;
-      else if (strcmp(anim->position, "upper")  == 0)
-       pos_y = SimpleRND(pos_bottom / 2);
-      else if (strcmp(anim->position, "lower")  == 0)
-       pos_y = pos_bottom / 2 + SimpleRND(pos_bottom / 2);
+      else if (strEqual(anim->position, "upper"))
+       pos_y = GetSimpleRandom(pos_bottom / 2);
+      else if (strEqual(anim->position, "lower"))
+       pos_y = pos_bottom / 2 + GetSimpleRandom(pos_bottom / 2);
       else
-       pos_y = SimpleRND(pos_bottom);
+       pos_y = GetSimpleRandom(pos_bottom);
 
       if (direction == MV_RIGHT)
       {
@@ -201,12 +205,12 @@ boolean AnimateToon(int toon_nr, boolean restart)
     {
       int pos_right = screen_info.width - anim->width;
 
-      if (strcmp(anim->position, "left") == 0)
+      if (strEqual(anim->position, "left"))
        pos_x = 0;
-      else if (strcmp(anim->position, "right")  == 0)
+      else if (strEqual(anim->position, "right"))
        pos_x = pos_right;
       else
-       pos_x = SimpleRND(pos_right);
+       pos_x = GetSimpleRandom(pos_right);
 
       if (direction == MV_DOWN)
       {
@@ -304,9 +308,8 @@ void HandleAnimation(int mode)
   static boolean anim_restart = TRUE;
   static boolean reset_delay = TRUE;
   static int toon_nr = 0;
-  int draw_mode;
 
-  if (!setup.toons)
+  if (!setup.toons || screen_info.num_toons == 0)
     return;
 
   /* this may happen after reloading graphics and redefining "num_toons" */
@@ -331,15 +334,22 @@ void HandleAnimation(int mode)
       break;
 
     case ANIM_STOP:
-      redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER);
+      if (anim_running)
+      {
+#if 1
+       int draw_mode;
 
-      /* Redraw background even when in direct drawing mode */
-      draw_mode = setup.direct_draw;
-      setup.direct_draw = FALSE;
-      screen_info.update_function();
-      setup.direct_draw = draw_mode;
+       redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER);
 
-      anim_running = FALSE;
+       /* Redraw background even when in direct drawing mode */
+       draw_mode = setup.direct_draw;
+       setup.direct_draw = FALSE;
+       screen_info.update_function();
+       setup.direct_draw = draw_mode;
+#endif
+
+       anim_running = FALSE;
+      }
 
       return;
 
@@ -350,7 +360,7 @@ void HandleAnimation(int mode)
   if (reset_delay)
   {
     animstart_delay = Counter();
-    animstart_delay_value = SimpleRND(3000);
+    animstart_delay_value = GetSimpleRandom(3000);
     reset_delay = FALSE;
   }
 
@@ -359,7 +369,7 @@ void HandleAnimation(int mode)
     if (!DelayReached(&animstart_delay, animstart_delay_value))
       return;
 
-    toon_nr = SimpleRND(screen_info.num_toons);
+    toon_nr = GetSimpleRandom(screen_info.num_toons);
   }
 
   anim_restart = reset_delay = AnimateToon(toon_nr, anim_restart);