+Bitmap *LoadCustomImage(char *basename)
+{
+ char *filename = getCustomImageFilename(basename);
+ Bitmap *new_bitmap;
+
+ if (filename == NULL)
+ Error(ERR_EXIT, "LoadCustomImage(): cannot find file '%s'", basename);
+
+ if ((new_bitmap = LoadImage(filename)) == NULL)
+ Error(ERR_EXIT, "LoadImage() failed: %s", GetError());
+
+ return new_bitmap;
+}
+
+void ReloadCustomImage(Bitmap *bitmap, char *basename)
+{
+ char *filename = getCustomImageFilename(basename);
+ Bitmap *new_bitmap;
+
+ if (filename == NULL) /* (should never happen) */
+ {
+ Error(ERR_WARN, "ReloadCustomImage(): cannot find file '%s'", basename);
+ return;
+ }
+
+ if (strcmp(filename, bitmap->source_filename) == 0)
+ {
+ /* The old and new image are the same (have the same filename and path).
+ This usually means that this image does not exist in this graphic set
+ and a fallback to the existing image is done. */
+
+ return;
+ }
+
+ if ((new_bitmap = LoadImage(filename)) == NULL)
+ {
+ Error(ERR_WARN, "LoadImage() failed: %s", GetError());
+ return;
+ }
+
+ if (bitmap->width != new_bitmap->width ||
+ bitmap->height != new_bitmap->height)
+ {
+ Error(ERR_WARN, "ReloadCustomImage: new image has wrong dimensions");
+ FreeBitmap(new_bitmap);
+ return;
+ }
+
+ TransferBitmapPointers(new_bitmap, bitmap);
+ free(new_bitmap);
+}
+