Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rocksndiamonds for openSUSE:Factory 
checked in at 2024-01-31 23:56:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rocksndiamonds (Old)
 and      /work/SRC/openSUSE:Factory/.rocksndiamonds.new.1815 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rocksndiamonds"

Wed Jan 31 23:56:19 2024 rev:40 rq:1143133 version:4.3.8.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/rocksndiamonds/rocksndiamonds.changes    
2023-12-25 19:05:28.625869394 +0100
+++ /work/SRC/openSUSE:Factory/.rocksndiamonds.new.1815/rocksndiamonds.changes  
2024-01-31 23:56:31.114983066 +0100
@@ -1,0 +2,10 @@
+Tue Jan 30 17:09:20 UTC 2024 - Carsten Ziepke <kiel...@gmail.com>
+
+- Update to version 4.3.8.1:
+  * changed setup option to disable global animations to only affect toons
+  * fixed bug caused by support for only eight global animations in the past
+  * fixed correctly using defined draw order of global animations
+  * fixed always drawing pointer-style global animations above everything else
+  * fixed bug with closing doors when exiting from level editor
+
+-------------------------------------------------------------------

Old:
----
  rocksndiamonds-4.3.8.0-linux.tar.gz

New:
----
  rocksndiamonds-4.3.8.1-linux.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rocksndiamonds.spec ++++++
--- /var/tmp/diff_new_pack.p9yS1v/_old  2024-01-31 23:56:31.739005580 +0100
+++ /var/tmp/diff_new_pack.p9yS1v/_new  2024-01-31 23:56:31.743005724 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package rocksndiamonds
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           rocksndiamonds
-Version:        4.3.8.0
+Version:        4.3.8.1
 Release:        0
 Summary:        Colorful Boulderdash'n'Emerald Mine'n'Sokoban'n'Stuff
 License:        GPL-2.0-or-later

++++++ rocksndiamonds-4.3.8.0-linux.tar.gz -> 
rocksndiamonds-4.3.8.1-linux.tar.gz ++++++
Binary files old/rocksndiamonds-4.3.8.0/rocksndiamonds and 
new/rocksndiamonds-4.3.8.1/rocksndiamonds differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/anim.c 
new/rocksndiamonds-4.3.8.1/src/anim.c
--- old/rocksndiamonds-4.3.8.0/src/anim.c       2023-12-09 19:47:50.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/anim.c       2023-12-29 10:08:18.000000000 
+0100
@@ -34,6 +34,10 @@
 #define NUM_GLOBAL_ANIM_PARTS_AND_TOONS        MAX(NUM_GLOBAL_ANIM_PARTS_ALL,  
\
                                            NUM_GLOBAL_TOON_PARTS)
 
+#define MAX_GLOBAL_ANIM_LIST           (NUM_GAME_MODES *               \
+                                        NUM_GLOBAL_ANIMS_AND_TOONS *   \
+                                        NUM_GLOBAL_ANIM_PARTS_AND_TOONS)
+
 #define ANIM_CLASS_BIT_TITLE_INITIAL   0
 #define ANIM_CLASS_BIT_TITLE           1
 #define ANIM_CLASS_BIT_MAIN            2
@@ -250,6 +254,8 @@
 static void ResetGlobalAnim_Clicked(void);
 
 static struct GlobalAnimControlInfo global_anim_ctrl[NUM_GAME_MODES];
+static struct GlobalAnimPartControlInfo 
*global_anim_list[MAX_GLOBAL_ANIM_LIST];
+static int num_global_anim_list = 0;
 
 static unsigned int anim_sync_frame = 0;
 
@@ -355,27 +361,17 @@
 static int compareGlobalAnimPartControlInfo(const void *obj1, const void *obj2)
 {
   const struct GlobalAnimPartControlInfo *o1 =
-    (struct GlobalAnimPartControlInfo *)obj1;
+    *(struct GlobalAnimPartControlInfo **)obj1;
   const struct GlobalAnimPartControlInfo *o2 =
-    (struct GlobalAnimPartControlInfo *)obj2;
-  int compare_result;
-
-  // do not sort animations parts by draw order (as it would be confusing)
-  compare_result = o1->nr - o2->nr;
-
-  return compare_result;
-}
-
-static int compareGlobalAnimMainControlInfo(const void *obj1, const void *obj2)
-{
-  const struct GlobalAnimMainControlInfo *o1 =
-    (struct GlobalAnimMainControlInfo *)obj1;
-  const struct GlobalAnimMainControlInfo *o2 =
-    (struct GlobalAnimMainControlInfo *)obj2;
+    *(struct GlobalAnimPartControlInfo **)obj2;
   int compare_result;
 
   if (o1->control_info.draw_order != o2->control_info.draw_order)
     compare_result = o1->control_info.draw_order - o2->control_info.draw_order;
+  else if (o1->mode_nr != o2->mode_nr)
+    compare_result = o1->mode_nr - o2->mode_nr;
+  else if (o1->anim_nr != o2->anim_nr)
+    compare_result = o1->anim_nr - o2->anim_nr;
   else
     compare_result = o1->nr - o2->nr;
 
@@ -602,19 +598,10 @@
          anim->has_base = TRUE;
        }
 
-       // apply special settings for pointer-style animations
-       if (part->control_info.class == get_hash_from_key("pointer"))
-       {
-         // force animation to be on top (must set anim and part control)
-         if (anim->control_info.draw_order == 0)
-           anim->control_info.draw_order = 1000000;
-         if (part->control_info.draw_order == 0)
-           part->control_info.draw_order = 1000000;
-
-         // force animation to pass-through clicks (must set part control)
-         if (part->control_info.style == STYLE_DEFAULT)
-           part->control_info.style |= STYLE_PASSTHROUGH;
-       }
+       // force pointer-style animations to pass-through clicks
+       if (part->control_info.class == get_hash_from_key("pointer") &&
+           part->control_info.style == STYLE_DEFAULT)
+         part->control_info.style |= STYLE_PASSTHROUGH;
       }
 
       if (anim->num_parts > 0 || anim->has_base)
@@ -627,26 +614,18 @@
 
   InitToonControls();
 
-  // sort all animations according to draw_order and animation number
+  // create list of all animation parts
+  num_global_anim_list = 0;
   for (m = 0; m < NUM_GAME_MODES; m++)
-  {
-    struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[m];
-
-    // sort all main animations for this game mode
-    qsort(ctrl->anim, ctrl->num_anims,
-         sizeof(struct GlobalAnimMainControlInfo),
-         compareGlobalAnimMainControlInfo);
-
-    for (a = 0; a < ctrl->num_anims; a++)
-    {
-      struct GlobalAnimMainControlInfo *anim = &ctrl->anim[a];
-
-      // sort all animation parts for this main animation
-      qsort(anim->part, anim->num_parts,
-           sizeof(struct GlobalAnimPartControlInfo),
-           compareGlobalAnimPartControlInfo);
-    }
-  }
+    for (a = 0; a < global_anim_ctrl[m].num_anims; a++)
+      for (p = 0; p < global_anim_ctrl[m].anim[a].num_parts_all; p++)
+       global_anim_list[num_global_anim_list++] =
+         &global_anim_ctrl[m].anim[a].part[p];
+
+  // sort list of all animation parts according to draw_order and number
+  qsort(global_anim_list, num_global_anim_list,
+       sizeof(struct GlobalAnimPartControlInfo *),
+       compareGlobalAnimPartControlInfo);
 
   for (i = 0; i < NUM_GAME_MODES; i++)
     game_mode_anim_classes[i] = ANIM_CLASS_NONE;
@@ -799,8 +778,9 @@
 {
   int game_mode_anim_action[NUM_GAME_MODES];
   int mode_nr;
+  int i;
 
-  if (!setup.toons)
+  if (!setup.global_animations)
     return;
 
   if (drawing_stage == DRAW_GLOBAL_ANIM_STAGE_1 &&
@@ -898,89 +878,66 @@
   if (global.anim_status == GAME_MODE_LOADING)
     return;
 
-  for (mode_nr = 0; mode_nr < NUM_GAME_MODES; mode_nr++)
+  for (i = 0; i < num_global_anim_list; i++)
   {
-    struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[mode_nr];
-    int anim_nr;
+    struct GlobalAnimPartControlInfo *part = global_anim_list[i];
+    struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[part->mode_nr];
+    struct GlobalAnimMainControlInfo *anim = &ctrl->anim[part->anim_nr];
+    struct GraphicInfo *g = &part->graphic_info;
+    Bitmap *src_bitmap;
+    int src_x, src_y;
+    int sync_frame;
+    int frame;
+    int last_anim_random_frame = gfx.anim_random_frame;
+
+    if (!setup.toons &&
+       part->graphic >= IMG_TOON_1 &&
+       part->graphic <= IMG_TOON_20)
+      continue;
 
     // when preparing source fading buffer, only draw animations to be stopped
     if (drawing_target == DRAW_TO_FADE_SOURCE &&
-       game_mode_anim_action[mode_nr] != ANIM_STOP)
+       game_mode_anim_action[part->mode_nr] != ANIM_STOP)
       continue;
 
     // when preparing target fading buffer, only draw animations to be started
     if (drawing_target == DRAW_TO_FADE_TARGET &&
-       game_mode_anim_action[mode_nr] != ANIM_START)
+       game_mode_anim_action[part->mode_nr] != ANIM_START)
       continue;
 
-#if 0
-    if (mode_nr != GFX_SPECIAL_ARG_DEFAULT &&
-       mode_nr != game_status)
+    if (!(anim->state & ANIM_STATE_RUNNING))
       continue;
-#endif
-
-    for (anim_nr = 0; anim_nr < ctrl->num_anims; anim_nr++)
-    {
-      struct GlobalAnimMainControlInfo *anim = &ctrl->anim[anim_nr];
-      struct GraphicInfo *c = &anim->control_info;
-      int part_first, part_last;
-      int part_nr;
-
-      if (!(anim->state & ANIM_STATE_RUNNING))
-       continue;
-
-      part_first = part_last = anim->active_part_nr;
-
-      if (c->anim_mode & ANIM_ALL || anim->num_parts == 0)
-      {
-       int num_parts = anim->num_parts + (anim->has_base ? 1 : 0);
-
-       part_first = 0;
-       part_last = num_parts - 1;
-      }
-
-      for (part_nr = part_first; part_nr <= part_last; part_nr++)
-      {
-       struct GlobalAnimPartControlInfo *part = &anim->part[part_nr];
-       struct GraphicInfo *g = &part->graphic_info;
-       Bitmap *src_bitmap;
-       int src_x, src_y;
-       int sync_frame;
-       int frame;
-       int last_anim_random_frame = gfx.anim_random_frame;
 
-       if (!(part->state & ANIM_STATE_RUNNING))
-         continue;
-
-       if (part->drawing_stage != drawing_stage)
-         continue;
-
-       // if game is paused, also pause playfield and door animations
-       if (isPausedOnPlayfieldOrDoor(part))
-         part->initial_anim_sync_frame++;
+    if (!(part->state & ANIM_STATE_RUNNING))
+      continue;
 
-       sync_frame = anim_sync_frame - part->initial_anim_sync_frame;
+    if (part->drawing_stage != drawing_stage)
+      continue;
 
-       // re-initialize random animation frame after animation delay
-       if (g->anim_mode == ANIM_RANDOM &&
-           sync_frame % g->anim_delay == 0 &&
-           sync_frame > 0)
-         part->anim_random_frame = GetSimpleRandom(g->anim_frames);
+    // if game is paused, also pause playfield and door animations
+    if (isPausedOnPlayfieldOrDoor(part))
+      part->initial_anim_sync_frame++;
+
+    sync_frame = anim_sync_frame - part->initial_anim_sync_frame;
+
+    // re-initialize random animation frame after animation delay
+    if (g->anim_mode == ANIM_RANDOM &&
+       sync_frame % g->anim_delay == 0 &&
+       sync_frame > 0)
+      part->anim_random_frame = GetSimpleRandom(g->anim_frames);
 
-       gfx.anim_random_frame = part->anim_random_frame;
+    gfx.anim_random_frame = part->anim_random_frame;
 
-       frame = getAnimationFrame(g->anim_frames, g->anim_delay,
-                                 g->anim_mode, g->anim_start_frame,
-                                 sync_frame);
+    frame = getAnimationFrame(g->anim_frames, g->anim_delay,
+                             g->anim_mode, g->anim_start_frame,
+                             sync_frame);
 
-       gfx.anim_random_frame = last_anim_random_frame;
+    gfx.anim_random_frame = last_anim_random_frame;
 
-       getGlobalAnimGraphicSource(part->graphic, frame, &src_bitmap,
-                                  &src_x, &src_y);
+    getGlobalAnimGraphicSource(part->graphic, frame, &src_bitmap,
+                              &src_x, &src_y);
 
-       BlitGlobalAnimation(part, src_bitmap, src_x, src_y, drawing_target);
-      }
-    }
+    BlitGlobalAnimation(part, src_bitmap, src_x, src_y, drawing_target);
   }
 
   if (drawing_target == DRAW_TO_FADE_TARGET)
@@ -2081,29 +2038,17 @@
 
 static void InitGlobalAnim_Clickable(void)
 {
-  int mode_nr;
+  int i;
 
-  for (mode_nr = 0; mode_nr < NUM_GAME_MODES; mode_nr++)
+  for (i = 0; i < num_global_anim_list; i++)
   {
-    struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[mode_nr];
-    int anim_nr;
-
-    for (anim_nr = 0; anim_nr < ctrl->num_anims; anim_nr++)
-    {
-      struct GlobalAnimMainControlInfo *anim = &ctrl->anim[anim_nr];
-      int part_nr;
-
-      for (part_nr = 0; part_nr < anim->num_parts_all; part_nr++)
-      {
-       struct GlobalAnimPartControlInfo *part = &anim->part[part_nr];
+    struct GlobalAnimPartControlInfo *part = global_anim_list[i];
 
-       if (part->triggered)
-         part->clicked = TRUE;
+    if (part->triggered)
+      part->clicked = TRUE;
 
-       part->triggered = FALSE;
-       part->clickable = FALSE;
-      }
-    }
+    part->triggered = FALSE;
+    part->clickable = FALSE;
   }
 }
 
@@ -2117,107 +2062,93 @@
   boolean anything_clicked = FALSE;
   boolean any_part_clicked = FALSE;
   boolean any_event_action = FALSE;
-  int mode_nr;
   int i;
 
-  for (mode_nr = 0; mode_nr < NUM_GAME_MODES; mode_nr++)
+  // check animation parts in reverse draw order (to stop when clicked)
+  for (i = num_global_anim_list - 1; i >= 0; i--)
   {
-    struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[mode_nr];
-    int anim_nr;
+    struct GlobalAnimPartControlInfo *part = global_anim_list[i];
 
-    // check animations in reverse draw order (to stop when clicked)
-    for (anim_nr = ctrl->num_anims - 1; anim_nr >= 0; anim_nr--)
-    {
-      struct GlobalAnimMainControlInfo *anim = &ctrl->anim[anim_nr];
-      int part_nr;
-
-      // check animation parts in reverse draw order (to stop when clicked)
-      for (part_nr = anim->num_parts_all - 1; part_nr >= 0; part_nr--)
-      {
-       struct GlobalAnimPartControlInfo *part = &anim->part[part_nr];
-
-       // if request dialog is active, only handle pointer-style animations
-       if (game.request_active &&
-           part->control_info.class != get_hash_from_key("pointer"))
-         continue;
+    // if request dialog is active, only handle pointer-style animations
+    if (game.request_active &&
+       part->control_info.class != get_hash_from_key("pointer"))
+      continue;
 
-       if (clicked_event == ANIM_CLICKED_RESET)
-       {
-         part->clicked = FALSE;
+    if (clicked_event == ANIM_CLICKED_RESET)
+    {
+      part->clicked = FALSE;
 
-         continue;
-       }
+      continue;
+    }
 
-       if (!part->clickable)
-         continue;
+    if (!part->clickable)
+      continue;
 
-       if (!(part->state & ANIM_STATE_RUNNING))
-         continue;
+    if (!(part->state & ANIM_STATE_RUNNING))
+      continue;
 
-       // always handle "any" click events (clicking anywhere on screen) ...
-       if (clicked_event == ANIM_CLICKED_PRESSED &&
-           isClickablePart(part, ANIM_EVENT_ANY))
-       {
+    // always handle "any" click events (clicking anywhere on screen) ...
+    if (clicked_event == ANIM_CLICKED_PRESSED &&
+       isClickablePart(part, ANIM_EVENT_ANY))
+    {
 #if DEBUG_ANIM_EVENTS
-         Debug("anim:InitGlobalAnim_Clicked", "%d.%d TRIGGERED BY ANY",
-               part->old_anim_nr + 1, part->old_nr + 1);
+      Debug("anim:InitGlobalAnim_Clicked", "%d.%d TRIGGERED BY ANY",
+           part->old_anim_nr + 1, part->old_nr + 1);
 #endif
 
-         anything_clicked = part->clicked = TRUE;
-         click_consumed |= clickConsumed(part);
-       }
+      anything_clicked = part->clicked = TRUE;
+      click_consumed |= clickConsumed(part);
+    }
 
-       // always handle "unclick:any" events (releasing anywhere on screen) ...
-       if (clicked_event == ANIM_CLICKED_RELEASED &&
-           isClickablePart(part, ANIM_EVENT_UNCLICK_ANY))
-       {
+    // always handle "unclick:any" events (releasing anywhere on screen) ...
+    if (clicked_event == ANIM_CLICKED_RELEASED &&
+       isClickablePart(part, ANIM_EVENT_UNCLICK_ANY))
+    {
 #if DEBUG_ANIM_EVENTS
-         Debug("anim:InitGlobalAnim_Clicked", "%d.%d TRIGGERED BY UNCLICK:ANY",
-               part->old_anim_nr + 1, part->old_nr + 1);
+      Debug("anim:InitGlobalAnim_Clicked", "%d.%d TRIGGERED BY UNCLICK:ANY",
+           part->old_anim_nr + 1, part->old_nr + 1);
 #endif
 
-         anything_clicked = part->clicked = TRUE;
-         click_consumed |= clickConsumed(part);
-       }
+      anything_clicked = part->clicked = TRUE;
+      click_consumed |= clickConsumed(part);
+    }
 
-       // ... but only handle the first (topmost) clickable animation
-       if (any_part_clicked)
-         continue;
+    // ... but only handle the first (topmost) clickable animation
+    if (any_part_clicked)
+      continue;
 
-       if (clicked_event == ANIM_CLICKED_PRESSED &&
-           isClickedPart(part, mx, my, TRUE))
-       {
+    if (clicked_event == ANIM_CLICKED_PRESSED &&
+       isClickedPart(part, mx, my, TRUE))
+    {
 #if 0
-         Debug("anim:InitGlobalAnim_Clicked", "%d.%d CLICKED [%d]",
-               anim_nr, part_nr, part->control_info.anim_event_action);
+      Debug("anim:InitGlobalAnim_Clicked", "%d.%d CLICKED [%d]",
+           anim_nr, part_nr, part->control_info.anim_event_action);
 #endif
 
-         // after executing event action, ignore any further actions
-         if (!any_event_action && DoGlobalAnim_EventAction(part))
-           any_event_action = TRUE;
+      // after executing event action, ignore any further actions
+      if (!any_event_action && DoGlobalAnim_EventAction(part))
+       any_event_action = TRUE;
 
-         // determine if mouse clicks should be blocked from other animations
-         any_part_clicked |= clickConsumed(part);
+      // determine if mouse clicks should be blocked from other animations
+      any_part_clicked |= clickConsumed(part);
 
-         if (isClickablePart(part, ANIM_EVENT_SELF))
-         {
+      if (isClickablePart(part, ANIM_EVENT_SELF))
+      {
 #if DEBUG_ANIM_EVENTS
-           Debug("anim:InitGlobalAnim_Clicked", "%d.%d TRIGGERED BY SELF",
-                 part->old_anim_nr + 1, part->old_nr + 1);
+       Debug("anim:InitGlobalAnim_Clicked", "%d.%d TRIGGERED BY SELF",
+             part->old_anim_nr + 1, part->old_nr + 1);
 #endif
 
-           anything_clicked = part->clicked = TRUE;
-           click_consumed |= clickConsumed(part);
-         }
+       anything_clicked = part->clicked = TRUE;
+       click_consumed |= clickConsumed(part);
+      }
 
-         // determine if mouse clicks should be blocked by this animation
-         click_consumed |= clickBlocked(part);
+      // determine if mouse clicks should be blocked by this animation
+      click_consumed |= clickBlocked(part);
 
-         // check if this click is defined to trigger other animations
-         InitGlobalAnim_Triggered(part, &click_consumed, &any_event_action,
-                                  ANIM_EVENT_CLICK, "CLICK");
-       }
-      }
+      // check if this click is defined to trigger other animations
+      InitGlobalAnim_Triggered(part, &click_consumed, &any_event_action,
+                              ANIM_EVENT_CLICK, "CLICK");
     }
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/confhash.h 
new/rocksndiamonds-4.3.8.1/src/confhash.h
--- old/rocksndiamonds-4.3.8.0/src/confhash.h   2023-12-09 19:48:05.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/confhash.h   2023-12-29 10:08:32.000000000 
+0100
@@ -1 +1 @@
-#define SOURCE_HASH_STRING "146e577"
+#define SOURCE_HASH_STRING "e498c78"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/conftime.h 
new/rocksndiamonds-4.3.8.1/src/conftime.h
--- old/rocksndiamonds-4.3.8.0/src/conftime.h   2023-12-09 19:48:05.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/conftime.h   2023-12-29 10:08:32.000000000 
+0100
@@ -1 +1 @@
-#define SOURCE_DATE_STRING "2023-12-09 18:47"
+#define SOURCE_DATE_STRING "2023-12-23 12:48"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/editor.c 
new/rocksndiamonds-4.3.8.1/src/editor.c
--- old/rocksndiamonds-4.3.8.0/src/editor.c     2023-12-09 19:47:50.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/editor.c     2023-12-29 10:08:18.000000000 
+0100
@@ -15283,7 +15283,7 @@
        vp_door_2->height == VYSIZE)
       CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY);
     else
-      SetDoorState(DOOR_CLOSE_2);
+      SetDoorState(DOOR_CLOSE_ALL);
 
     BackToFront();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/files.c 
new/rocksndiamonds-4.3.8.1/src/files.c
--- old/rocksndiamonds-4.3.8.0/src/files.c      2023-12-09 19:47:50.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/files.c      2023-12-29 10:08:18.000000000 
+0100
@@ -9492,6 +9492,10 @@
   },
   {
     TYPE_SWITCH,
+    &setup.global_animations,                  "global_animations"
+  },
+  {
+    TYPE_SWITCH,
     &setup.scroll_delay,                       "scroll_delay"
   },
   {
@@ -10409,6 +10413,7 @@
   si->sound_music = TRUE;
   si->sound_simple = TRUE;
   si->toons = TRUE;
+  si->global_animations = TRUE;
   si->scroll_delay = TRUE;
   si->forced_scroll_delay = FALSE;
   si->scroll_delay_value = STD_SCROLL_DELAY;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/init.c 
new/rocksndiamonds-4.3.8.1/src/init.c
--- old/rocksndiamonds-4.3.8.0/src/init.c       2023-12-09 19:47:50.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/init.c       2023-12-29 10:08:18.000000000 
+0100
@@ -1649,7 +1649,7 @@
   g->draw_yoffset = parameter[GFX_ARG_DRAW_YOFFSET];
 
   // use a different default value for global animations and toons
-  if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_8) ||
+  if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_32) 
||
       (graphic >= IMG_TOON_1            && graphic <= IMG_TOON_20))
     g->draw_masked = TRUE;
 
@@ -6477,8 +6477,8 @@
 
   BackToFront();
 
-  // deactivate toons on error message screen
-  setup.toons = FALSE;
+  // deactivate toons and global animations on error message screen
+  setup.global_animations = FALSE;
 
   WaitForEventToContinue();
 }
@@ -6671,7 +6671,7 @@
     return TRUE;
 
   // deactivate global animations (not accessible in game state "loading")
-  setup.toons = FALSE;
+  setup.global_animations = FALSE;
 
   // set game state to "loading" to be able to show busy animation
   SetGameStatus(GAME_MODE_LOADING);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/libgame/misc.c 
new/rocksndiamonds-4.3.8.1/src/libgame/misc.c
--- old/rocksndiamonds-4.3.8.0/src/libgame/misc.c       2023-12-09 
19:47:50.000000000 +0100
+++ new/rocksndiamonds-4.3.8.1/src/libgame/misc.c       2023-12-29 
10:08:18.000000000 +0100
@@ -1088,7 +1088,9 @@
 // various string functions
 // ----------------------------------------------------------------------------
 
-char *getStringCat2WithSeparator(char *s1, char *s2, char *sep)
+char *getStringCat2WithSeparator(const char *s1,
+                                const char *s2,
+                                const char *sep)
 {
   if (s1 == NULL || s2 == NULL || sep == NULL)
     return NULL;
@@ -1101,7 +1103,10 @@
   return complete_string;
 }
 
-char *getStringCat3WithSeparator(char *s1, char *s2, char *s3, char *sep)
+char *getStringCat3WithSeparator(const char *s1,
+                                const char *s2,
+                                const char *s3,
+                                const char *sep)
 {
   if (s1 == NULL || s2 == NULL || s3 == NULL || sep == NULL)
     return NULL;
@@ -1115,17 +1120,17 @@
   return complete_string;
 }
 
-char *getStringCat2(char *s1, char *s2)
+char *getStringCat2(const char *s1, const char *s2)
 {
   return getStringCat2WithSeparator(s1, s2, "");
 }
 
-char *getStringCat3(char *s1, char *s2, char *s3)
+char *getStringCat3(const char *s1, const char *s2, const char *s3)
 {
   return getStringCat3WithSeparator(s1, s2, s3, "");
 }
 
-char *getPath2(char *path1, char *path2)
+char *getPath2(const char *path1, const char *path2)
 {
 #if defined(PLATFORM_ANDROID)
   // workaround for reading from assets directory -- skip "." subdirs in path
@@ -1138,7 +1143,7 @@
   return getStringCat2WithSeparator(path1, path2, STRING_PATH_SEPARATOR);
 }
 
-char *getPath3(char *path1, char *path2, char *path3)
+char *getPath3(const char *path1, const char *path2, const char *path3)
 {
 #if defined(PLATFORM_ANDROID)
   // workaround for reading from assets directory -- skip "." subdirs in path
@@ -1166,12 +1171,12 @@
   return filename;
 }
 
-char *getImg2(char *path1, char *path2)
+char *getImg2(const char *path1, const char *path2)
 {
   return getPngOrPcxIfNotExists(getPath2(path1, path2));
 }
 
-char *getImg3(char *path1, char *path2, char *path3)
+char *getImg3(const char *path1, const char *path2, const char *path3)
 {
   return getPngOrPcxIfNotExists(getPath3(path1, path2, path3));
 }
@@ -1227,14 +1232,14 @@
   return s_copy;
 }
 
-void setString(char **old_value, char *new_value)
+void setString(char **old_value, const char *new_value)
 {
   checked_free(*old_value);
 
   *old_value = getStringCopy(new_value);
 }
 
-boolean strEqual(char *s1, char *s2)
+boolean strEqual(const char *s1, const char *s2)
 {
   return (s1 == NULL && s2 == NULL ? TRUE  :
          s1 == NULL && s2 != NULL ? FALSE :
@@ -1242,7 +1247,7 @@
          strcmp(s1, s2) == 0);
 }
 
-boolean strEqualN(char *s1, char *s2, int n)
+boolean strEqualN(const char *s1, const char *s2, int n)
 {
   return (s1 == NULL && s2 == NULL ? TRUE  :
          s1 == NULL && s2 != NULL ? FALSE :
@@ -1250,7 +1255,7 @@
          strncmp(s1, s2, n) == 0);
 }
 
-boolean strEqualCase(char *s1, char *s2)
+boolean strEqualCase(const char *s1, const char *s2)
 {
   return (s1 == NULL && s2 == NULL ? TRUE  :
          s1 == NULL && s2 != NULL ? FALSE :
@@ -1258,7 +1263,7 @@
          strcasecmp(s1, s2) == 0);
 }
 
-boolean strEqualCaseN(char *s1, char *s2, int n)
+boolean strEqualCaseN(const char *s1, const char *s2, int n)
 {
   return (s1 == NULL && s2 == NULL ? TRUE  :
          s1 == NULL && s2 != NULL ? FALSE :
@@ -1266,7 +1271,7 @@
          strncasecmp(s1, s2, n) == 0);
 }
 
-boolean strPrefix(char *s, char *prefix)
+boolean strPrefix(const char *s, const char *prefix)
 {
   return (s == NULL && prefix == NULL ? TRUE  :
          s == NULL && prefix != NULL ? FALSE :
@@ -1274,7 +1279,7 @@
          strncmp(s, prefix, strlen(prefix)) == 0);
 }
 
-boolean strSuffix(char *s, char *suffix)
+boolean strSuffix(const char *s, const char *suffix)
 {
   return (s == NULL && suffix == NULL ? TRUE  :
          s == NULL && suffix != NULL ? FALSE :
@@ -1283,7 +1288,7 @@
          strcmp(&s[strlen(s) - strlen(suffix)], suffix) == 0);
 }
 
-boolean strPrefixLower(char *s, char *prefix)
+boolean strPrefixLower(const char *s, const char *prefix)
 {
   char *s_lower = getStringToLower(s);
   boolean match = strPrefix(s_lower, prefix);
@@ -1293,7 +1298,7 @@
   return match;
 }
 
-boolean strSuffixLower(char *s, char *suffix)
+boolean strSuffixLower(const char *s, const char *suffix)
 {
   char *s_lower = getStringToLower(s);
   boolean match = strSuffix(s_lower, suffix);
@@ -1303,7 +1308,7 @@
   return match;
 }
 
-boolean isURL(char *s)
+boolean isURL(const char *s)
 {
   while (*s && *s >= 'a' && *s <= 'z')
     s++;
@@ -3072,7 +3077,7 @@
 // functions for checking files and filenames
 // ----------------------------------------------------------------------------
 
-boolean directoryExists(char *dir_name)
+boolean directoryExists(const char *dir_name)
 {
   if (dir_name == NULL)
     return FALSE;
@@ -3100,7 +3105,7 @@
   return success;
 }
 
-boolean fileExists(char *filename)
+boolean fileExists(const char *filename)
 {
   if (filename == NULL)
     return FALSE;
@@ -3124,7 +3129,7 @@
 }
 
 #if 0
-static boolean fileHasPrefix(char *basename, char *prefix)
+static boolean fileHasPrefix(const char *basename, const char *prefix)
 {
   static char *basename_lower = NULL;
   int basename_length, prefix_length;
@@ -3147,7 +3152,7 @@
 }
 #endif
 
-static boolean fileHasSuffix(char *basename, char *suffix)
+static boolean fileHasSuffix(const char *basename, const char *suffix)
 {
   static char *basename_lower = NULL;
   int basename_length, suffix_length;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/libgame/misc.h 
new/rocksndiamonds-4.3.8.1/src/libgame/misc.h
--- old/rocksndiamonds-4.3.8.0/src/libgame/misc.h       2023-12-09 
19:47:50.000000000 +0100
+++ new/rocksndiamonds-4.3.8.1/src/libgame/misc.h       2023-12-29 
10:08:18.000000000 +0100
@@ -168,28 +168,28 @@
 char *getBaseNamePtr(char *);
 char *getBaseNameNoSuffix(char *);
 
-char *getStringCat2WithSeparator(char *, char *, char *);
-char *getStringCat3WithSeparator(char *, char *, char *, char *);
-char *getStringCat2(char *, char *);
-char *getStringCat3(char *, char *, char *);
-char *getPath2(char *, char *);
-char *getPath3(char *, char *, char*);
-char *getImg2(char *, char *);
-char *getImg3(char *, char *, char*);
+char *getStringCat2WithSeparator(const char *, const char *, const char *);
+char *getStringCat3WithSeparator(const char *, const char *, const char *, 
const char *);
+char *getStringCat2(const char *, const char *);
+char *getStringCat3(const char *, const char *, const char *);
+char *getPath2(const char *, const char *);
+char *getPath3(const char *, const char *, const char *);
+char *getImg2(const char *, const char *);
+char *getImg3(const char *, const char *, const char *);
 char *getStringCopy(const char *);
 char *getStringCopyN(const char *, int);
 char *getStringCopyNStatic(const char *, int);
 char *getStringToLower(const char *);
-void setString(char **, char *);
-boolean strEqual(char *, char *);
-boolean strEqualN(char *, char *, int);
-boolean strEqualCase(char *, char *);
-boolean strEqualCaseN(char *, char *, int);
-boolean strPrefix(char *, char *);
-boolean strSuffix(char *, char *);
-boolean strPrefixLower(char *, char *);
-boolean strSuffixLower(char *, char *);
-boolean isURL(char *);
+void setString(char **, const char *);
+boolean strEqual(const char *, const char *);
+boolean strEqualN(const char *, const char *, int);
+boolean strEqualCase(const char *, const char *);
+boolean strEqualCaseN(const char *, const char *, int);
+boolean strPrefix(const char *, const char *);
+boolean strSuffix(const char *, const char *);
+boolean strPrefixLower(const char *, const char *);
+boolean strSuffixLower(const char *, const char *);
+boolean isURL(const char *);
 
 void GetOptions(int, char **,
                void (*print_usage_function)(void),
@@ -279,8 +279,9 @@
 DirectoryEntry *readDirectory(Directory *);
 void freeDirectoryEntry(DirectoryEntry *);
 
-boolean directoryExists(char *);
-boolean fileExists(char *);
+boolean directoryExists(const char *);
+boolean fileExists(const char *);
+
 boolean FileIsGraphic(char *);
 boolean FileIsSound(char *);
 boolean FileIsMusic(char *);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/libgame/sdl.c 
new/rocksndiamonds-4.3.8.1/src/libgame/sdl.c
--- old/rocksndiamonds-4.3.8.0/src/libgame/sdl.c        2023-12-09 
19:47:50.000000000 +0100
+++ new/rocksndiamonds-4.3.8.1/src/libgame/sdl.c        2023-12-29 
10:08:18.000000000 +0100
@@ -70,13 +70,13 @@
   if (gfx.draw_envelope_request_function != NULL)
     gfx.draw_envelope_request_function(draw_target);
 
-  // copy global animations to render target buffer, if defined (mouse pointer)
-  if (gfx.draw_global_anim_function != NULL)
-    gfx.draw_global_anim_function(draw_target, DRAW_GLOBAL_ANIM_STAGE_3);
-
   // copy tile selection cursor to render target buffer, if defined (part 2)
   if (gfx.draw_tile_cursor_function != NULL)
     gfx.draw_tile_cursor_function(draw_target, FALSE);
+
+  // copy global animations to render target buffer, if defined (mouse pointer)
+  if (gfx.draw_global_anim_function != NULL)
+    gfx.draw_global_anim_function(draw_target, DRAW_GLOBAL_ANIM_STAGE_3);
 }
 
 static void UpdateScreenExt(SDL_Rect *rect, boolean with_frame_delay)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/libgame/system.h 
new/rocksndiamonds-4.3.8.1/src/libgame/system.h
--- old/rocksndiamonds-4.3.8.0/src/libgame/system.h     2023-12-09 
19:47:50.000000000 +0100
+++ new/rocksndiamonds-4.3.8.1/src/libgame/system.h     2023-12-29 
10:08:18.000000000 +0100
@@ -1518,6 +1518,7 @@
   boolean sound_music;
   boolean sound_simple;
   boolean toons;
+  boolean global_animations;
   boolean scroll_delay;
   boolean forced_scroll_delay;
   int scroll_delay_value;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/main.h 
new/rocksndiamonds-4.3.8.1/src/main.h
--- old/rocksndiamonds-4.3.8.0/src/main.h       2023-12-09 19:47:50.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/main.h       2023-12-29 10:08:18.000000000 
+0100
@@ -2664,7 +2664,7 @@
 #define PROGRAM_VERSION_SUPER          4
 #define PROGRAM_VERSION_MAJOR          3
 #define PROGRAM_VERSION_MINOR          8
-#define PROGRAM_VERSION_PATCH          0
+#define PROGRAM_VERSION_PATCH          1
 #define PROGRAM_VERSION_EXTRA          ""
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.3.8.0/src/screens.c 
new/rocksndiamonds-4.3.8.1/src/screens.c
--- old/rocksndiamonds-4.3.8.0/src/screens.c    2023-12-09 19:47:50.000000000 
+0100
+++ new/rocksndiamonds-4.3.8.1/src/screens.c    2023-12-29 10:08:18.000000000 
+0100
@@ -7548,7 +7548,7 @@
   { TYPE_SWITCH,       &setup.quick_switch,    "Quick Player Focus Switch:" },
   { TYPE_SWITCH,       &setup.quick_doors,     "Quick Menu Doors:"     },
   { TYPE_SWITCH,       &setup.show_titlescreen,"Show Title Screens:"   },
-  { TYPE_SWITCH,       &setup.toons,           "Show Menu Animations:" },
+  { TYPE_SWITCH,       &setup.toons,           "Show Toons:"           },
   { TYPE_SWITCH,       &setup.small_game_graphics, "Small Game Graphics:" },
   { TYPE_YES_NO_AUTO,  &setup.debug.xsn_mode,  debug_xsn_mode          },
   { TYPE_EMPTY,                NULL,                   ""                      
},

Reply via email to