+ Bitmap swap_bitmap;
+ Bitmap *new_bitmap;
+ Bitmap *tmp_bitmap_final = NULL;
+ Bitmap *tmp_bitmap_0 = NULL;
+ Bitmap *tmp_bitmap_1 = NULL;
+ Bitmap *tmp_bitmap_2 = NULL;
+ Bitmap *tmp_bitmap_4 = NULL;
+ Bitmap *tmp_bitmap_8 = NULL;
+ Bitmap *tmp_bitmap_16 = NULL;
+ Bitmap *tmp_bitmap_32 = NULL;
+ int width_final, height_final;
+ int width_0, height_0;
+ int width_1, height_1;
+ int width_2, height_2;
+ int width_4, height_4;
+ int width_8, height_8;
+ int width_16, height_16;
+#if 1
+ int width_32, height_32;
+#endif
+ int old_width, old_height;
+ int new_width, new_height;
+
+ print_timestamp_init("CreateScaledBitmaps");
+
+ old_width = old_bitmap->width;
+ old_height = old_bitmap->height;
+
+#if 1
+ /* calculate new image dimensions for final image size */
+ width_final = old_width * zoom_factor;
+ height_final = old_height * zoom_factor;
+
+ /* get image with final size (this might require scaling up) */
+ /* ("final" size may result in non-standard tile size image) */
+ if (zoom_factor != 1)
+ tmp_bitmap_final = ZoomBitmap(old_bitmap, width_final, height_final);
+ else
+ tmp_bitmap_final = old_bitmap;
+
+#else
+
+ /* calculate new image dimensions for final image size */
+ width_1 = old_width * zoom_factor;
+ height_1 = old_height * zoom_factor;
+
+ /* get image with final size (this might require scaling up) */
+ /* ("final" size may result in non-standard tile size image) */
+ if (zoom_factor != 1)
+ tmp_bitmap_1 = ZoomBitmap(old_bitmap, width_1, height_1);
+ else
+ tmp_bitmap_1 = old_bitmap;
+#endif
+
+ UPDATE_BUSY_STATE();
+
+ width_0 = width_1 = width_final;
+ height_0 = height_1 = height_final;
+
+ tmp_bitmap_0 = tmp_bitmap_1 = tmp_bitmap_final;
+
+#if 1
+ if (create_small_bitmaps)
+ {
+ /* check if we have a non-gameplay tile size image */
+ if (tile_size != gfx.game_tile_size)
+ {
+ /* get image with gameplay tile size */
+ width_0 = width_final * gfx.game_tile_size / tile_size;
+ height_0 = height_final * gfx.game_tile_size / tile_size;
+
+ if (width_0 == old_width)
+ tmp_bitmap_0 = old_bitmap;
+ else if (width_0 == width_final)
+ tmp_bitmap_0 = tmp_bitmap_final;
+ else
+ {
+#if 0
+ if (old_width != width_0)
+ printf("::: %d, %d -> %d, %d\n",
+ old_width, old_height, width_0, height_0);
+#endif
+
+ tmp_bitmap_0 = ZoomBitmap(old_bitmap, width_0, height_0);
+ }
+
+ UPDATE_BUSY_STATE();
+ }
+
+ /* check if we have a non-standard tile size image */
+ if (tile_size != gfx.standard_tile_size)
+ {
+ /* get image with standard tile size */
+ width_1 = width_final * gfx.standard_tile_size / tile_size;
+ height_1 = height_final * gfx.standard_tile_size / tile_size;
+
+ if (width_1 == old_width)
+ tmp_bitmap_1 = old_bitmap;
+ else if (width_1 == width_final)
+ tmp_bitmap_1 = tmp_bitmap_final;
+ else if (width_1 == width_0)
+ tmp_bitmap_1 = tmp_bitmap_0;
+ else
+ tmp_bitmap_1 = ZoomBitmap(old_bitmap, width_1, height_1);
+
+ UPDATE_BUSY_STATE();
+ }
+ }
+#endif
+
+ if (create_small_bitmaps)
+ {
+ /* calculate new image dimensions for small images */
+ width_2 = width_1 / 2;
+ height_2 = height_1 / 2;
+ width_4 = width_1 / 4;
+ height_4 = height_1 / 4;
+ width_8 = width_1 / 8;
+ height_8 = height_1 / 8;
+ width_16 = width_1 / 16;
+ height_16 = height_1 / 16;
+#if 1
+ width_32 = width_1 / 32;
+ height_32 = height_1 / 32;
+#endif
+
+#if 1
+ /* get image with 1/2 of normal size (for use in the level editor) */
+ if (width_2 == old_width)
+ tmp_bitmap_2 = old_bitmap;
+ else
+ tmp_bitmap_2 = ZoomBitmap(tmp_bitmap_1, width_2, height_2);
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/4 of normal size (for use in the level editor) */
+ if (width_4 == old_width)
+ tmp_bitmap_4 = old_bitmap;
+ else
+ tmp_bitmap_4 = ZoomBitmap(tmp_bitmap_2, width_4, height_4);
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/8 of normal size (for use on the preview screen) */
+ if (width_8 == old_width)
+ tmp_bitmap_8 = old_bitmap;
+ else
+ tmp_bitmap_8 = ZoomBitmap(tmp_bitmap_4, width_8, height_8);
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/16 of normal size (for use on the preview screen) */
+ if (width_16 == old_width)
+ tmp_bitmap_16 = old_bitmap;
+ else
+ tmp_bitmap_16 = ZoomBitmap(tmp_bitmap_8, width_16, height_16);
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/32 of normal size (for use on the preview screen) */
+ if (width_32 == old_width)
+ tmp_bitmap_32 = old_bitmap;
+ else
+ tmp_bitmap_32 = ZoomBitmap(tmp_bitmap_16, width_32, height_32);
+
+ UPDATE_BUSY_STATE();
+
+#else
+
+ /* get image with 1/2 of normal size (for use in the level editor) */
+ if (zoom_factor != 2)
+ tmp_bitmap_2 = ZoomBitmap(tmp_bitmap_1, width_1 / 2, height_1 / 2);
+ else
+ tmp_bitmap_2 = old_bitmap;
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/4 of normal size (for use in the level editor) */
+ if (zoom_factor != 4)
+ tmp_bitmap_4 = ZoomBitmap(tmp_bitmap_2, width_2 / 2, height_2 / 2);
+ else
+ tmp_bitmap_4 = old_bitmap;
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/8 of normal size (for use on the preview screen) */
+ if (zoom_factor != 8)
+ tmp_bitmap_8 = ZoomBitmap(tmp_bitmap_4, width_4 / 2, height_4 / 2);
+ else
+ tmp_bitmap_8 = old_bitmap;
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/16 of normal size (for use on the preview screen) */
+ if (zoom_factor != 16)
+ tmp_bitmap_16 = ZoomBitmap(tmp_bitmap_8, width_8 / 2, height_8 / 2);
+ else
+ tmp_bitmap_16 = old_bitmap;
+
+ UPDATE_BUSY_STATE();
+
+ /* get image with 1/32 of normal size (for use on the preview screen) */
+ if (zoom_factor != 32)
+ tmp_bitmap_32 = ZoomBitmap(tmp_bitmap_16, width_16 / 2, height_16 / 2);
+ else
+ tmp_bitmap_32 = old_bitmap;
+
+ UPDATE_BUSY_STATE();
+#endif
+ }
+
+#if 0
+ /* if image was scaled up, create new clipmask for normal size image */
+ if (zoom_factor != 1)
+ {
+ SDL_Surface *tmp_surface_1 = tmp_bitmap_1->surface;
+
+ if (old_bitmap->surface_masked)
+ SDL_FreeSurface(old_bitmap->surface_masked);
+
+ SDL_SetColorKey(tmp_surface_1, SET_TRANSPARENT_PIXEL,
+ SDL_MapRGB(tmp_surface_1->format, 0x00, 0x00, 0x00));
+ if ((old_bitmap->surface_masked = SDL_DisplayFormat(tmp_surface_1)) ==NULL)
+ Error(ERR_EXIT, "SDL_DisplayFormat() failed");
+ SDL_SetColorKey(tmp_surface_1, UNSET_TRANSPARENT_PIXEL, 0);
+ }
+#endif