fixed using custom sized game graphics also for global animations
authorHolger Schemel <info@artsoft.org>
Thu, 4 Mar 2021 19:58:03 +0000 (20:58 +0100)
committerHolger Schemel <info@artsoft.org>
Thu, 4 Mar 2021 20:01:35 +0000 (21:01 +0100)
When using image files for game graphics with custom tile size, then
configuring the same image files also for global animations, global
animations had broken (standard-sized) graphics before.

This change (together with the previous commit) fixes this bug.

src/anim.c
src/libgame/system.c
src/tools.c
src/tools.h

index 2e6280ce3d1f3cb629f8ddceb6f065da58bab9cc..c2ec75f64c65a87ea17212d0a66c34773de1a0d4 100644 (file)
@@ -825,8 +825,8 @@ static void DrawGlobalAnimationsExt(int drawing_target, int drawing_stage)
 
        gfx.anim_random_frame = last_anim_random_frame;
 
-       getFixedGraphicSource(part->graphic, frame, &src_bitmap,
-                             &src_x, &src_y);
+       getGlobalAnimGraphicSource(part->graphic, frame, &src_bitmap,
+                                  &src_x, &src_y);
 
        src_x += cut_x;
        src_y += cut_y;
index 225738cc361ece7da2e18f944cd4082ba529ce6f..db9d72b1ef5bc4e377543fa05b2fe9e0a1c08b0c 100644 (file)
@@ -1493,12 +1493,18 @@ void CreateBitmapWithSmallBitmaps(Bitmap **bitmaps, int zoom_factor,
 
 void CreateBitmapTextures(Bitmap **bitmaps)
 {
-  SDLCreateBitmapTextures(bitmaps[IMG_BITMAP_STANDARD]);
+  if (bitmaps[IMG_BITMAP_PTR_ORIGINAL] != NULL)
+    SDLCreateBitmapTextures(bitmaps[IMG_BITMAP_PTR_ORIGINAL]);
+  else
+    SDLCreateBitmapTextures(bitmaps[IMG_BITMAP_STANDARD]);
 }
 
 void FreeBitmapTextures(Bitmap **bitmaps)
 {
-  SDLFreeBitmapTextures(bitmaps[IMG_BITMAP_STANDARD]);
+  if (bitmaps[IMG_BITMAP_PTR_ORIGINAL] != NULL)
+    SDLFreeBitmapTextures(bitmaps[IMG_BITMAP_PTR_ORIGINAL]);
+  else
+    SDLFreeBitmapTextures(bitmaps[IMG_BITMAP_STANDARD]);
 }
 
 void ScaleBitmap(Bitmap **bitmaps, int zoom_factor)
index 38f5dd7bad62e7b5e731ed006a71ad9fc2ef4af1..1e7fef67ff45883163b177bdc6ad061889f50df6 100644 (file)
@@ -1559,6 +1559,24 @@ void getMiniGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y)
   getSizedGraphicSource(graphic, 0, MINI_TILESIZE, bitmap, x, y);
 }
 
+void getGlobalAnimGraphicSource(int graphic, int frame,
+                               Bitmap **bitmap, int *x, int *y)
+{
+  struct GraphicInfo *g = &graphic_info[graphic];
+
+  // if no graphics defined at all, use fallback graphics
+  if (g->bitmaps == NULL)
+    *g = graphic_info[IMG_CHAR_EXCLAM];
+
+  // use original size graphics, if existing, else use standard size graphics
+  if (g->bitmaps[IMG_BITMAP_PTR_ORIGINAL])
+    *bitmap = g->bitmaps[IMG_BITMAP_PTR_ORIGINAL];
+  else
+    *bitmap = g->bitmaps[IMG_BITMAP_STANDARD];
+
+  getGraphicSourceXY(graphic, frame, x, y, FALSE);
+}
+
 static void getGraphicSourceExt(int graphic, int frame, Bitmap **bitmap,
                                int *x, int *y, boolean get_backside)
 {
index cb8c9343d0f3c474f245c2e5941806e3c0d88e8f..5a02dd113a63b79bfc54b61fbff643a66d75c369 100644 (file)
@@ -150,6 +150,7 @@ void getSizedGraphicSourceExt(int, int, int, Bitmap **, int *, int *, boolean);
 void getSizedGraphicSource(int, int, int, Bitmap **, int *, int *);
 void getFixedGraphicSource(int, int, Bitmap **, int *, int *);
 void getMiniGraphicSource(int, Bitmap **, int *, int *);
+void getGlobalAnimGraphicSource(int, int, Bitmap **, int *, int *);
 void getGraphicSource(int, int, Bitmap **, int *, int *);
 
 void DrawGraphic(int, int, int, int);