Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rocksndiamonds for openSUSE:Factory 
checked in at 2025-07-18 15:58:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rocksndiamonds (Old)
 and      /work/SRC/openSUSE:Factory/.rocksndiamonds.new.8875 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rocksndiamonds"

Fri Jul 18 15:58:17 2025 rev:44 rq:1294010 version:4.4.0.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/rocksndiamonds/rocksndiamonds.changes    
2025-03-06 14:49:16.074796322 +0100
+++ /work/SRC/openSUSE:Factory/.rocksndiamonds.new.8875/rocksndiamonds.changes  
2025-07-18 15:59:28.768850310 +0200
@@ -1,0 +2,20 @@
+Sun Jul 13 19:03:10 UTC 2025 - Carsten Ziepke <kiel...@gmail.com>
+
+- Update to version 4.4.0.5:
+  * fixed broken handling of swipe gestures for moving scrollbars
+  * fixed saving setup for name/team, keyboard and joystick
+    changes
+  * fixed saving setup for music and sound button changes
+  * fixed saving setup for virtual button changes
+  * fixed support for snapshot when collecting diamond for
+    BD engine
+  * fixed bugs with showing correct game buttons for various cases
+  * fixed game restart button when playing non-score tapes
+  * fixed updating ffwd/warp tape display when playing native
+    BD replays
+  * fixed crash bug caused by freeing custom game tile size
+    graphics twice
+  * added "please wait" message screen when importing level set
+    zip files
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ rocksndiamonds.spec ++++++
--- /var/tmp/diff_new_pack.mq4g72/_old  2025-07-18 15:59:30.636928350 +0200
+++ /var/tmp/diff_new_pack.mq4g72/_new  2025-07-18 15:59:30.644928684 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           rocksndiamonds
-Version:        4.4.0.4
+Version:        4.4.0.5
 Release:        0
 Summary:        Colorful Boulderdash'n'Emerald Mine'n'Sokoban'n'Stuff
 License:        GPL-2.0-or-later

++++++ rocksndiamonds-4.4.0.4-linux.tar.gz -> 
rocksndiamonds-4.4.0.5-linux.tar.gz ++++++
Binary files old/rocksndiamonds-4.4.0.4/rocksndiamonds and 
new/rocksndiamonds-4.4.0.5/rocksndiamonds differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/confhash.h 
new/rocksndiamonds-4.4.0.5/src/confhash.h
--- old/rocksndiamonds-4.4.0.4/src/confhash.h   2025-02-16 21:16:59.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/confhash.h   2025-05-30 00:18:57.000000000 
+0200
@@ -1 +1 @@
-#define SOURCE_HASH_STRING "5696237"
+#define SOURCE_HASH_STRING "21e274a7"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/conftime.h 
new/rocksndiamonds-4.4.0.5/src/conftime.h
--- old/rocksndiamonds-4.4.0.4/src/conftime.h   2025-02-16 21:16:59.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/conftime.h   2025-05-30 00:18:57.000000000 
+0200
@@ -1 +1 @@
-#define SOURCE_DATE_STRING "2025-02-16 20:01"
+#define SOURCE_DATE_STRING "2025-05-29 21:39"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/events.c 
new/rocksndiamonds-4.4.0.5/src/events.c
--- old/rocksndiamonds-4.4.0.4/src/events.c     2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/events.c     2025-05-30 00:18:37.000000000 
+0200
@@ -563,10 +563,27 @@
   HandleButton(event->x, event->y, button_status, button_status);
 }
 
-void HandleWheelEvent(WheelEvent *event)
+static void HandleWheelEventButton(int button_nr, int steps)
 {
-  int button_nr;
+#if defined(PLATFORM_WINDOWS) || defined(PLATFORM_MAC)
+  // accelerated mouse wheel available on Mac and Windows
+  wheel_steps = steps;
+#else
+  // no accelerated mouse wheel available on Unix/Linux
+  wheel_steps = DEFAULT_WHEEL_STEPS;
+#endif
+
+  motion_status = FALSE;
 
+  button_status = button_nr;
+  HandleButton(0, 0, button_status, -button_nr);
+
+  button_status = MB_RELEASED;
+  HandleButton(0, 0, button_status, -button_nr);
+}
+
+void HandleWheelEvent(WheelEvent *event)
+{
 #if DEBUG_EVENTS_WHEEL
 #if 1
   Debug("event:wheel", "mouse == %d, x/y == %d/%d\n",
@@ -580,26 +597,11 @@
 #endif
 #endif
 
-  button_nr = (event->x < 0 ? MB_WHEEL_LEFT :
-              event->x > 0 ? MB_WHEEL_RIGHT :
-              event->y < 0 ? MB_WHEEL_DOWN :
-              event->y > 0 ? MB_WHEEL_UP : 0);
-
-#if defined(PLATFORM_WINDOWS) || defined(PLATFORM_MAC)
-  // accelerated mouse wheel available on Mac and Windows
-  wheel_steps = (event->x ? ABS(event->x) : ABS(event->y));
-#else
-  // no accelerated mouse wheel available on Unix/Linux
-  wheel_steps = DEFAULT_WHEEL_STEPS;
-#endif
-
-  motion_status = FALSE;
-
-  button_status = button_nr;
-  HandleButton(0, 0, button_status, -button_nr);
+  if (event->x != 0)
+    HandleWheelEventButton(event->x < 0 ? MB_WHEEL_LEFT : MB_WHEEL_RIGHT, 
ABS(event->x));
 
-  button_status = MB_RELEASED;
-  HandleButton(0, 0, button_status, -button_nr);
+  if (event->y != 0)
+    HandleWheelEventButton(event->y < 0 ? MB_WHEEL_DOWN : MB_WHEEL_UP, 
ABS(event->y));
 }
 
 void HandleWindowEvent(WindowEvent *event)
@@ -1592,6 +1594,9 @@
     }
   }
 
+  // show "please wait" message, because extracting zip file may take some time
+  DrawScreenBeforeAddingSet(tree_type);
+
   // extract level or artwork set from zip file to target directory
   char *top_dir = ExtractZipFileIntoDirectory(filename, directory, tree_type);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/files.c 
new/rocksndiamonds-4.4.0.5/src/files.c
--- old/rocksndiamonds-4.4.0.4/src/files.c      2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/files.c      2025-05-30 00:18:37.000000000 
+0200
@@ -13739,8 +13739,10 @@
     { &game.button.save,       &game.button.stop       },
     { &game.button.pause2,     &game.button.pause      },
     { &game.button.load,       &game.button.play       },
+    { &game.button.load,       &game.button.restart    },
     { &game.button.undo,       &game.button.stop       },
     { &game.button.redo,       &game.button.play       },
+    { &game.button.redo,       &game.button.restart    },
 
     { NULL,                    NULL                    }
   };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/game.c 
new/rocksndiamonds-4.4.0.5/src/game.c
--- old/rocksndiamonds-4.4.0.4/src/game.c       2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/game.c       2025-05-30 00:18:37.000000000 
+0200
@@ -17577,29 +17577,66 @@
       UnmapGadget(game_gadget[i]);
 }
 
+static void UnmapGameButtonsAtSamePositionIfMapped(int id)
+{
+  if (isMappedGadget(game_gadget[id]))
+    UnmapGameButtonsAtSamePosition(id);
+}
+
+static void UnmapGameButtonsAtSamePositionIfMapped_LoadSaveGroup(void)
+{
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_SAVE);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PAUSE2);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_LOAD);
+}
+
+static void UnmapGameButtonsAtSamePositionIfMapped_UndoRedoGroup(void)
+{
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_UNDO);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PAUSE2);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_REDO);
+}
+
+static void UnmapGameButtonsAtSamePositionIfMapped_StopPlayGroup(void)
+{
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_STOP);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PAUSE);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PLAY);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_RESTART);
+
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PANEL_STOP);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PANEL_PAUSE);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PANEL_PLAY);
+  UnmapGameButtonsAtSamePositionIfMapped(GAME_CTRL_ID_PANEL_RESTART);
+}
+
 static void UnmapGameButtonsAtSamePosition_All(void)
 {
+  // make sure that only one button is mapped for multiple buttons at the same 
position
+
   if (setup.show_load_save_buttons)
   {
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_SAVE);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_PAUSE2);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_LOAD);
+    UnmapGameButtonsAtSamePositionIfMapped_LoadSaveGroup();
+
+    // if above buttons have redefined position, do the same for the remaining 
buttons
+    if (setup.show_undo_redo_buttons)
+      UnmapGameButtonsAtSamePositionIfMapped_UndoRedoGroup();
+    else
+      UnmapGameButtonsAtSamePositionIfMapped_StopPlayGroup();
   }
   else if (setup.show_undo_redo_buttons)
   {
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_UNDO);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_PAUSE2);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_REDO);
+    UnmapGameButtonsAtSamePositionIfMapped_UndoRedoGroup();
+
+    // if above buttons have redefined position, do the same for the remaining 
buttons
+    if (setup.show_load_save_buttons)
+      UnmapGameButtonsAtSamePositionIfMapped_LoadSaveGroup();
+    else
+      UnmapGameButtonsAtSamePositionIfMapped_StopPlayGroup();
   }
   else
   {
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_STOP);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_PAUSE);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_PLAY);
-
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_PANEL_STOP);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_PANEL_PAUSE);
-    UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_PANEL_PLAY);
+    UnmapGameButtonsAtSamePositionIfMapped_StopPlayGroup();
   }
 }
 
@@ -17887,6 +17924,8 @@
 
       RedrawSoundButtonGadget(id);
 
+      SaveSetupIfNeeded();
+
       break;
 
     case SOUND_CTRL_ID_LOOPS:
@@ -17910,6 +17949,8 @@
 
       RedrawSoundButtonGadget(id);
 
+      SaveSetupIfNeeded();
+
       break;
 
     case SOUND_CTRL_ID_SIMPLE:
@@ -17933,6 +17974,8 @@
 
       RedrawSoundButtonGadget(id);
 
+      SaveSetupIfNeeded();
+
       break;
 
     default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/game_bd/bd_caveengine.c 
new/rocksndiamonds-4.4.0.5/src/game_bd/bd_caveengine.c
--- old/rocksndiamonds-4.4.0.4/src/game_bd/bd_caveengine.c      2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/game_bd/bd_caveengine.c      2025-05-30 
00:18:37.000000000 +0200
@@ -1183,6 +1183,8 @@
       cave->score += cave->diamond_value;
       cave->diamonds_collected++;
 
+      game.snapshot.collected_item = TRUE;
+
       if (cave->diamonds_needed == cave->diamonds_collected)
       {
        cave->gate_open = TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/init.c 
new/rocksndiamonds-4.4.0.5/src/init.c
--- old/rocksndiamonds-4.4.0.4/src/init.c       2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/init.c       2025-05-30 00:18:37.000000000 
+0200
@@ -456,6 +456,7 @@
 {
   FreeAllImageTextures();
   FreeTileCursorTextures();
+  FreeEnvelopeRequestTextures();
 }
 
 static int getFontSpecialSuffix(void)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/libgame/gadgets.c 
new/rocksndiamonds-4.4.0.5/src/libgame/gadgets.c
--- old/rocksndiamonds-4.4.0.4/src/libgame/gadgets.c    2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/libgame/gadgets.c    2025-05-30 
00:18:37.000000000 +0200
@@ -2211,6 +2211,11 @@
 // global pointer to gadget actually in use (when mouse button pressed)
 static struct GadgetInfo *last_gi = NULL;
 
+boolean isMappedGadget(struct GadgetInfo *gi)
+{
+  return (gi != NULL && gi->mapped);
+}
+
 static void MapGadgetExt(struct GadgetInfo *gi, boolean redraw)
 {
   if (gi == NULL || gi->deactivated || gi->mapped)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/libgame/gadgets.h 
new/rocksndiamonds-4.4.0.5/src/libgame/gadgets.h
--- old/rocksndiamonds-4.4.0.4/src/libgame/gadgets.h    2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/libgame/gadgets.h    2025-05-30 
00:18:37.000000000 +0200
@@ -332,6 +332,7 @@
 void ModifyGadget(struct GadgetInfo *, int, ...);
 void RedrawGadget(struct GadgetInfo *);
 
+boolean isMappedGadget(struct GadgetInfo *);
 void MapGadget(struct GadgetInfo *);
 void UnmapGadget(struct GadgetInfo *);
 void UnmapAllGadgets(void);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/libgame/image.c 
new/rocksndiamonds-4.4.0.5/src/libgame/image.c
--- old/rocksndiamonds-4.4.0.4/src/libgame/image.c      2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/libgame/image.c      2025-05-30 
00:18:37.000000000 +0200
@@ -416,6 +416,10 @@
     // image color template not yet defined -- copy from original bitmap
     Bitmap *orig_bitmap = img_info->bitmaps[IMG_BITMAP_PTR_ORIGINAL];
 
+    // this may happen due to configuration problems in "graphicsinfo.conf" 
(to be checked)
+    if (orig_bitmap == NULL)
+      Fail("undefined bitmap for file '%s' -- should not happen", 
img_info->source_filename);
+
     img_info->template = ZoomBitmap(orig_bitmap, orig_bitmap->width, 
orig_bitmap->height);
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/libgame/sdl.c 
new/rocksndiamonds-4.4.0.5/src/libgame/sdl.c
--- old/rocksndiamonds-4.4.0.4/src/libgame/sdl.c        2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/libgame/sdl.c        2025-05-30 
00:18:37.000000000 +0200
@@ -1149,6 +1149,10 @@
   SDL_Rect src_rect;
   SDL_Rect dst_rect;
 
+  // check renderer used to create textures
+  if (bitmap->renderer != sdl_renderer)
+    Warn("trying to blit textures with invalid renderer!");
+
   texture =
     (mask_mode == BLIT_MASKED ? bitmap->texture_masked : bitmap->texture);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/libgame/setup.c 
new/rocksndiamonds-4.4.0.5/src/libgame/setup.c
--- old/rocksndiamonds-4.4.0.4/src/libgame/setup.c      2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/libgame/setup.c      2025-05-30 
00:18:37.000000000 +0200
@@ -1788,10 +1788,12 @@
   if (node == NULL)
     return NULL;
 
-  if (!node->parent_link && !node->level_group &&
-      skip_sets_without_levels && node->levels == 0)
-    return cloneTreeNode(node_top, node_parent, node->next,
-                        skip_sets_without_levels);
+  boolean group_without_levels = (node->level_group && 
node->level_group_empty);
+  boolean set_without_levels = (!node->parent_link && !node->level_group && 
node->levels == 0);
+
+  // if requested, skip level groups and level sets without levels (and 
continue with next node)
+  if (skip_sets_without_levels && (group_without_levels || set_without_levels))
+    return cloneTreeNode(node_top, node_parent, node->next, 
skip_sets_without_levels);
 
   node_new = getTreeInfoCopy(node);            // copy complete node
 
@@ -2925,6 +2927,7 @@
   { TYPE_INTEGER,      &ldi.sort_priority,             "sort_priority"         
        },
   { TYPE_BOOLEAN,      &ldi.latest_engine,             "latest_engine"         
        },
   { TYPE_BOOLEAN,      &ldi.level_group,               "level_group"           
        },
+  { TYPE_BOOLEAN,      &ldi.level_group_empty,         "level_group_empty"     
        },
   { TYPE_BOOLEAN,      &ldi.readonly,                  "readonly"              
        },
   { TYPE_STRING,       &ldi.graphics_set_ecs,          "graphics_set.old"      
        },
   { TYPE_STRING,       &ldi.graphics_set_aga,          "graphics_set.new"      
        },
@@ -3045,6 +3048,7 @@
     ti->first_level = 0;
     ti->last_level = 0;
     ti->level_group = FALSE;
+    ti->level_group_empty = FALSE;
     ti->handicap_level = 0;
     ti->readonly = TRUE;
     ti->handicap = TRUE;
@@ -3133,6 +3137,7 @@
     ti->first_level = parent->first_level;
     ti->last_level = parent->last_level;
     ti->level_group = FALSE;
+    ti->level_group_empty = parent->level_group_empty;
     ti->handicap_level = parent->handicap_level;
     ti->readonly = parent->readonly;
     ti->handicap = parent->handicap;
@@ -3205,6 +3210,7 @@
   ti_copy->latest_engine       = ti->latest_engine;
 
   ti_copy->level_group         = ti->level_group;
+  ti_copy->level_group_empty   = ti->level_group_empty;
   ti_copy->parent_link         = ti->parent_link;
   ti_copy->is_copy             = ti->is_copy;
   ti_copy->in_user_dir         = ti->in_user_dir;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/libgame/system.c 
new/rocksndiamonds-4.4.0.5/src/libgame/system.c
--- old/rocksndiamonds-4.4.0.4/src/libgame/system.c     2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/libgame/system.c     2025-05-30 
00:18:37.000000000 +0200
@@ -1393,13 +1393,27 @@
     bitmaps[IMG_BITMAP_2x2]   = tmp_bitmap_16;
     bitmaps[IMG_BITMAP_1x1]   = tmp_bitmap_32;
 
-    if (width_0 != width_1)
+    // store the "game" bitmap (with game tile sized graphics), if not already 
stored
+
+    int tmp_bitmap_0_nr = -1;
+
+    for (i = 0; i < NUM_IMG_BITMAPS; i++)
+      if (bitmaps[i] == tmp_bitmap_0)
+       tmp_bitmap_0_nr = i;
+
+    if (tmp_bitmap_0_nr == -1) // game tile size bitmap not stored
+    {
+      // store pointer of game tile size bitmap (not used for any other size)
       bitmaps[IMG_BITMAP_CUSTOM] = tmp_bitmap_0;
 
-    if (bitmaps[IMG_BITMAP_CUSTOM])
+      // set game bitmap pointer to game tile size bitmap of other size
       bitmaps[IMG_BITMAP_PTR_GAME] = bitmaps[IMG_BITMAP_CUSTOM];
+    }
     else
-      bitmaps[IMG_BITMAP_PTR_GAME] = bitmaps[IMG_BITMAP_STANDARD];
+    {
+      // set game bitmap pointer to corresponding sized bitmap
+      bitmaps[IMG_BITMAP_PTR_GAME] = bitmaps[tmp_bitmap_0_nr];
+    }
 
     // store the "final" (up-scaled) original bitmap, if not already stored
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/libgame/system.h 
new/rocksndiamonds-4.4.0.5/src/libgame/system.h
--- old/rocksndiamonds-4.4.0.4/src/libgame/system.h     2025-02-16 
21:16:39.000000000 +0100
+++ new/rocksndiamonds-4.4.0.5/src/libgame/system.h     2025-05-30 
00:18:37.000000000 +0200
@@ -1740,6 +1740,7 @@
   boolean latest_engine;       // force level set to use the latest game engine
 
   boolean level_group;         // directory contains more level series 
directories
+  boolean level_group_empty;   // directory contains only empty level series 
directories
   boolean parent_link;         // entry links back to parent directory
   boolean is_copy;             // this entry is a copy of another entry in the 
tree
   boolean in_user_dir;         // user defined levels are stored in home 
directory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/main.c 
new/rocksndiamonds-4.4.0.5/src/main.c
--- old/rocksndiamonds-4.4.0.4/src/main.c       2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/main.c       2025-05-30 00:18:37.000000000 
+0200
@@ -9534,15 +9534,7 @@
   Print("%s", getProgramInitString());
 
   if (!strEqual(getProgramVersionString(), getProgramRealVersionString()))
-  {
-    Print(" (%s %d.%d.%d.%d%s)",
-         PROGRAM_TITLE_STRING,
-         PROGRAM_VERSION_SUPER,
-         PROGRAM_VERSION_MAJOR,
-         PROGRAM_VERSION_MINOR,
-         PROGRAM_VERSION_PATCH,
-         PROGRAM_VERSION_EXTRA);
-  }
+    Print(" (%s %s)", PROGRAM_TITLE_STRING, 
getVersionString(GAME_VERSION_ACTUAL_FULL));
 
   Print("\n");
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/main.h 
new/rocksndiamonds-4.4.0.5/src/main.h
--- old/rocksndiamonds-4.4.0.4/src/main.h       2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/main.h       2025-05-30 00:18:37.000000000 
+0200
@@ -3131,7 +3131,7 @@
 #define PROGRAM_VERSION_SUPER          4
 #define PROGRAM_VERSION_MAJOR          4
 #define PROGRAM_VERSION_MINOR          0
-#define PROGRAM_VERSION_PATCH          4
+#define PROGRAM_VERSION_PATCH          5
 
 #define PROGRAM_VERSION_STABLE         1
 #define PROGRAM_VERSION_EXTRA          0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/screens.c 
new/rocksndiamonds-4.4.0.5/src/screens.c
--- old/rocksndiamonds-4.4.0.4/src/screens.c    2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/screens.c    2025-05-30 00:18:37.000000000 
+0200
@@ -2526,6 +2526,8 @@
   DrawCursorAndText_Main(MAIN_CONTROL_NAME, TRUE, FALSE);
 
   DrawPreviewPlayers();
+
+  SaveSetupIfNeeded();
 }
 
 static void HandleMainMenu_SelectLevel(int step, int direction,
@@ -9891,6 +9893,8 @@
       BackToFront();
 
     ClearEventQueue();
+
+    SaveSetupIfNeeded();
   }
 
   DrawSetupScreen_Input();
@@ -10325,6 +10329,9 @@
       BackToFront();
 
     ClearEventQueue();
+
+    if (success)
+      SaveSetupIfNeeded();
   }
 
   DrawSetupScreen_Input();
@@ -10652,6 +10659,8 @@
       BackToFront();
 
     ClearEventQueue();
+
+    SaveSetupIfNeeded();
   }
 }
 
@@ -11846,6 +11855,27 @@
   return FALSE;
 }
 
+void DrawScreenBeforeAddingSet(int tree_type)
+{
+  int font_nr_1 = FC_GREEN;
+  int font_nr_2 = FC_YELLOW;
+  int ypos_1 = 120;
+  int ypos_2 = 150;
+  char message_1[100];
+  char message_2[100];
+  char *set_type_text = (tree_type == TREE_TYPE_LEVEL_DIR ? "level" : 
"artwork");
+
+  sprintf(message_1, "Adding new %s set!", set_type_text);
+  sprintf(message_2, "Please wait!");
+
+  ClearField();
+
+  DrawTextSCentered(ypos_1, font_nr_1, message_1);
+  DrawTextSCentered(ypos_2, font_nr_2, message_2);
+
+  BackToFront();
+}
+
 void DrawScreenAfterAddingSet(char *tree_subdir_new, int tree_type)
 {
   // get tree info node of newly added level or artwork set
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/screens.h 
new/rocksndiamonds-4.4.0.5/src/screens.h
--- old/rocksndiamonds-4.4.0.4/src/screens.h    2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/screens.h    2025-05-30 00:18:37.000000000 
+0200
@@ -23,6 +23,7 @@
 void DrawAndFadeInMainMenu(int);
 void DrawMainMenu(void);
 void DrawHallOfFame(int);
+void DrawScreenBeforeAddingSet(int);
 void DrawScreenAfterAddingSet(char *, int);
 void DrawInfoScreen_FromMainMenu(int);
 void DrawInfoScreen_FromInitGame(int);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/tape.c 
new/rocksndiamonds-4.4.0.5/src/tape.c
--- old/rocksndiamonds-4.4.0.4/src/tape.c       2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/tape.c       2025-05-30 00:18:37.000000000 
+0200
@@ -404,6 +404,23 @@
   DrawVideoDisplaySymbol(state);
 }
 
+static void DrawVideoDisplayCurrentState_PlayAction(boolean 
update_draw_label_on)
+{
+  int state = 0;
+
+  if (tape.warp_forward)
+    state |= VIDEO_STATE_WARP(update_draw_label_on);
+  else if (tape.fast_forward)
+    state |= VIDEO_STATE_FFWD(update_draw_label_on);
+
+  if (tape.pause_before_end)
+    state |= VIDEO_STATE_PBEND(update_draw_label_on);
+
+  // draw labels and symbols separately to prevent labels overlapping symbols
+  DrawVideoDisplayLabel(state);
+  DrawVideoDisplaySymbol(state);
+}
+
 void DrawCompleteVideoDisplay(void)
 {
   struct GraphicInfo *g_tape = &graphic_info[IMG_BACKGROUND_TAPE];
@@ -1056,7 +1073,13 @@
     return NULL;
 
   if (tape.bd_replay && !bd_replay)
+  {
+    // skip tape records without game actions for native BD tapes (but update 
tape display)
+    if (update_video_display && !tape.deactivate_display)
+      DrawVideoDisplayCurrentState_PlayAction(update_draw_label_on);
+
     return NULL;
+  }
 
   if (tape.pause_before_end)  // stop some seconds before end of tape
   {
@@ -1091,21 +1114,7 @@
   }
 
   if (update_video_display && !tape.deactivate_display)
-  {
-    int state = 0;
-
-    if (tape.warp_forward)
-      state |= VIDEO_STATE_WARP(update_draw_label_on);
-    else if (tape.fast_forward)
-      state |= VIDEO_STATE_FFWD(update_draw_label_on);
-
-    if (tape.pause_before_end)
-      state |= VIDEO_STATE_PBEND(update_draw_label_on);
-
-    // draw labels and symbols separately to prevent labels overlapping symbols
-    DrawVideoDisplayLabel(state);
-    DrawVideoDisplaySymbol(state);
-  }
+    DrawVideoDisplayCurrentState_PlayAction(update_draw_label_on);
 
   for (i = 0; i < MAX_TAPE_ACTIONS; i++)
     action[i] = tape.pos[tape.counter].action[i];
@@ -1404,7 +1413,7 @@
 
 void TapeRestartGame(void)
 {
-  if (score_info_tape_play)
+  if (tape.playing)
   {
     TapeStartGamePlaying();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/tools.c 
new/rocksndiamonds-4.4.0.5/src/tools.c
--- old/rocksndiamonds-4.4.0.4/src/tools.c      2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/tools.c      2025-05-30 00:18:37.000000000 
+0200
@@ -3131,6 +3131,11 @@
   }
 }
 
+void FreeEnvelopeRequestTextures(void)
+{
+  SDLFreeBitmapTextures(menu.request.bitmap);
+}
+
 static void setRequestBasePosition(int *x, int *y)
 {
   int sx_base, sy_base;
@@ -5128,6 +5133,9 @@
 
   game.request_active = FALSE;
 
+  // required after resetting "game.request_active" to remove last envelope 
animation frame
+  BackToFront();
+
   return result;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rocksndiamonds-4.4.0.4/src/tools.h 
new/rocksndiamonds-4.4.0.5/src/tools.h
--- old/rocksndiamonds-4.4.0.4/src/tools.h      2025-02-16 21:16:39.000000000 
+0100
+++ new/rocksndiamonds-4.4.0.5/src/tools.h      2025-05-30 00:18:37.000000000 
+0200
@@ -205,6 +205,7 @@
 void ShowEnvelope(int);
 void ShowEnvelopeDoor(char *, int);
 void DrawEnvelopeRequestToScreen(int);
+void FreeEnvelopeRequestTextures(void);
 
 void DrawLevel(int);
 void DrawSizedLevel(int, int, int, int, int);

Reply via email to