rnd-20040823-1-src
authorHolger Schemel <info@artsoft.org>
Sun, 22 Aug 2004 23:08:32 +0000 (01:08 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:47:55 +0000 (10:47 +0200)
src/conf_gfx.c
src/conftime.h
src/game_em/game_em.h
src/game_em/init.c
src/init.c
src/libgame/image.c
src/libgame/image.h
src/libgame/system.c
src/libgame/system.h

index 18986c779c0644f78a08b2c7441a599c9522b08a..cf8be2c502ae08f42a32ed69300d5bad1fdfb45c 100644 (file)
@@ -3772,9 +3772,16 @@ struct ConfigInfo image_config[] =
   /* !!! TEMPORARILY STORED HERE -- PROBABLY TO BE CHANGED !!! */
 
   { "emc_object",                              "emc_object.pcx"        },
+  { "emc_object.scale_up",                     "2"                     },
+
   { "emc_score",                               "emc_score.pcx"         },
+  { "emc_score.scale_up",                      "2"                     },
+
   { "emc_sprite",                              "emc_sprite.pcx"        },
+  { "emc_sprite.scale_up",                     "2"                     },
+
   { "emc_title",                               "emc_title.pcx"         },
+  { "emc_title.scale_up",                      "2"                     },
 
   /* the following directives are not associated with an image, but
      probably make sense to be defined in "graphicsinfo.conf", too */
index 44cdca2d4cce70952971c07dd67da0f17d360f98..6859b2a7153dad62459f4f6497a67bdd88ff7d1f 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2004-08-22 20:30]"
+#define COMPILE_DATE_STRING "[2004-08-23 01:07]"
index 215df8e62ec33cd7276d33340ee926e79c926c5a..540b38ee3ba3ecca8ec9d495c68da8f6a1b03421 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "../libgame/libgame.h"
 
+extern void SetBitmaps_EM(Bitmap **);
 extern void DrawGameDoorValues_EM(int, int, int, int);
 
 
index 061f3009ccabb6fa9533b826f97a0eadae88f12c..da8ebd645f145075903a5380b0d112fe3d0b2daa 100644 (file)
@@ -384,6 +384,8 @@ int open_all(void)
   }
 #endif
 
+#if 0  /* BITMAP CREATION STUFF */
+
   for (i = 0; i < 4; i++)
   {
     name[MAXNAME] = 0;
@@ -424,7 +426,6 @@ int open_all(void)
   ttlmaskBitmap = pcxBitmaps[3]->clip_mask;
 #endif
 
-#if 1
   for (i = 0; i < 4; i++)
   {
     Pixmap clip_mask;
@@ -496,11 +497,13 @@ int open_all(void)
 #if 0
     printf("::: CREATING NEW CLIPMASKS ...\n");
 #endif
+
 #if 1
     clip_mask = Pixmap_to_Mask(pcxBitmapsX2[i]->drawable,
                               pcxBitmapsX2[i]->width,
                               pcxBitmapsX2[i]->height);
 #endif
+
 #if 0
     printf("::: CREATING NEW CLIPMASKS DONE\n");
 #endif
@@ -539,6 +542,12 @@ int open_all(void)
 #endif
   }
 
+#endif /* BITMAP CREATION STUFF */
+
+#if 1
+  SetBitmaps_EM(pcxBitmapsX2);
+#endif
+
   objBitmap = pcxBitmapsX2[0];
   botBitmap = pcxBitmapsX2[1];
   sprBitmap = pcxBitmapsX2[2];
@@ -554,7 +563,6 @@ int open_all(void)
   sprmaskBitmap = pcxBitmapsX2[2]->clip_mask;
   ttlmaskBitmap = pcxBitmapsX2[3]->clip_mask;
 #endif
-#endif
 
 #if 1
   screenBitmap = CreateBitmap(MAX_BUF_XSIZE * TILEX, MAX_BUF_YSIZE * TILEY,
index 43a5d6db37280ee62cad06e114a1d6bfefe8964f..e5390e9030a91113f7347e27b5099bc9d881ae59 100644 (file)
@@ -239,6 +239,11 @@ void InitGadgets()
   gadgets_initialized = TRUE;
 }
 
+inline void InitElementSmallImagesScaledUp(int graphic)
+{
+  CreateImageWithSmallImages(graphic, graphic_info[graphic].scale_up_factor);
+}
+
 void InitElementSmallImages()
 {
   struct PropertyMapping *property_mapping = getImageListPropertyMapping();
@@ -247,16 +252,30 @@ void InitElementSmallImages()
 
   /* initialize normal images from static configuration */
   for (i = 0; element_to_graphic[i].element > -1; i++)
-    CreateImageWithSmallImages(element_to_graphic[i].graphic);
+    InitElementSmallImagesScaledUp(element_to_graphic[i].graphic);
 
   /* initialize special images from static configuration */
   for (i = 0; element_to_special_graphic[i].element > -1; i++)
-    CreateImageWithSmallImages(element_to_special_graphic[i].graphic);
+    InitElementSmallImagesScaledUp(element_to_special_graphic[i].graphic);
 
   /* initialize images from dynamic configuration */
   for (i = 0; i < num_property_mappings; i++)
     if (property_mapping[i].artwork_index < MAX_NUM_ELEMENTS)
-      CreateImageWithSmallImages(property_mapping[i].artwork_index);
+      InitElementSmallImagesScaledUp(property_mapping[i].artwork_index);
+
+  /* !!! FIX ME (CHANGE TO USING NORMAL ELEMENT GRAPHIC DEFINITIONS) !!! */
+#if 1
+  for (i = IMG_EMC_OBJECT; i <= IMG_EMC_TITLE; i++)
+    InitElementSmallImagesScaledUp(i);
+#endif
+}
+
+void SetBitmaps_EM(Bitmap **em_bitmap)
+{
+  em_bitmap[0] = graphic_info[IMG_EMC_OBJECT].bitmap;
+  em_bitmap[1] = graphic_info[IMG_EMC_SCORE].bitmap;
+  em_bitmap[2] = graphic_info[IMG_EMC_SPRITE].bitmap;
+  em_bitmap[3] = graphic_info[IMG_EMC_TITLE].bitmap;
 }
 
 static int getFontBitmapID(int font_nr)
@@ -846,7 +865,7 @@ static void set_graphic_parameters(int graphic, char **parameter_raw)
   graphic_info[graphic].crumbled_like = -1;    /* do not use clone element */
   graphic_info[graphic].diggable_like = -1;    /* do not use clone element */
   graphic_info[graphic].border_size = TILEX / 8;  /* "CRUMBLED" border size */
-  graphic_info[graphic].scale_up_factor = 0;   /* default: no scaling up */
+  graphic_info[graphic].scale_up_factor = 1;   /* default: no scaling up */
   graphic_info[graphic].anim_delay_fixed = 0;
   graphic_info[graphic].anim_delay_random = 0;
   graphic_info[graphic].post_delay_fixed = 0;
@@ -949,6 +968,8 @@ static void set_graphic_parameters(int graphic, char **parameter_raw)
   /* optional zoom factor for scaling up the image to a larger size */
   if (parameter[GFX_ARG_SCALE_UP] != ARG_UNDEFINED_VALUE)
     graphic_info[graphic].scale_up_factor = parameter[GFX_ARG_SCALE_UP];
+  if (graphic_info[graphic].scale_up_factor < 1)
+    graphic_info[graphic].scale_up_factor = 1;         /* no scaling */
 
   /* this is only used for player "boring" and "sleeping" actions */
   if (parameter[GFX_ARG_ANIM_DELAY_FIXED] != ARG_UNDEFINED_VALUE)
index 8ddcc6879fea3fff5a9a2688218579e5e93ee2b7..72e9580cc0ce1f09136302a1e157c126f99ac2b2 100644 (file)
@@ -1037,17 +1037,23 @@ void ReloadCustomImages()
   ReloadCustomArtworkList(image_info);
 }
 
-void CreateImageWithSmallImages(int pos)
+void CreateImageWithSmallImages(int pos, int zoom_factor)
 {
   ImageInfo *img_info = getImageInfoEntryFromImageID(pos);
 
   if (img_info == NULL || img_info->contains_small_images)
     return;
 
-  CreateBitmapWithSmallBitmaps(img_info->bitmap);
+  CreateBitmapWithSmallBitmaps(img_info->bitmap, zoom_factor);
 
   img_info->contains_small_images = TRUE;
 
+#if 0
+  if (zoom_factor)
+    printf("CreateImageWithSmallImages: '%s' zoomed by factor %d\n",
+          img_info->source_filename, zoom_factor);
+#endif
+
 #if 0
   printf("CreateImageWithSmallImages: '%s' done\n", img_info->source_filename);
 #endif
index 6e1da8983862e9f9fad119613057319733e9254d..1b98bbf65d003a8780034c4d575cf704a354136c 100644 (file)
@@ -88,7 +88,7 @@ void InitImageList(struct ConfigInfo *, int, struct ConfigTypeInfo *,
                   char **, char **, char **, char **, char **);
 
 void ReloadCustomImages();
-void CreateImageWithSmallImages(int);
+void CreateImageWithSmallImages(int, int);
 
 void FreeAllImages();
 
index 93d251e9d37bb86cb74596cfe9cfc298af92b07f..704c5b252c78a2de7aa54ed34385c3398a27b4e4 100644 (file)
@@ -21,6 +21,7 @@
 #endif
 
 #include "system.h"
+#include "image.h"
 #include "sound.h"
 #include "setup.h"
 #include "joystick.h"
@@ -812,62 +813,113 @@ Bitmap *ZoomBitmap(Bitmap *src_bitmap, int zoom_width, int zoom_height)
   return dst_bitmap;
 }
 
-void CreateBitmapWithSmallBitmaps(Bitmap *src_bitmap)
+void CreateBitmapWithSmallBitmaps(Bitmap *old_bitmap, int zoom_factor)
 {
   Bitmap swap_bitmap;
-  Bitmap *tmp_bitmap, *tmp_bitmap_2, *tmp_bitmap_8;
-  int src_width, src_height;
-  int tmp_width, tmp_height;
+  Bitmap *new_bitmap, *tmp_bitmap_1, *tmp_bitmap_2, *tmp_bitmap_8;
+  int width_1, height_1, width_2, height_2, width_8, height_8;
+  int new_width, new_height;
+
+  width_1  = old_bitmap->width  * zoom_factor;
+  height_1 = old_bitmap->height * zoom_factor;
+  width_2  = width_1  / 2;
+  height_2 = height_1 / 2;
+  width_8  = width_1  / 8;
+  height_8 = height_1 / 8;
+
+  /* get image with normal size (this might require scaling up) */
+  if (zoom_factor != 1)
+    tmp_bitmap_1 = ZoomBitmap(old_bitmap, width_1, height_1);
+  else
+    tmp_bitmap_1 = old_bitmap;
+
+  /* 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;
+
+  /* get image with 1/8 of normal size (for use on the preview screen) */
+  if (zoom_factor != 8)
+    tmp_bitmap_8 = ZoomBitmap(tmp_bitmap_1, width_1 / 8, height_1 / 8);
+  else
+    tmp_bitmap_8 = old_bitmap;
+
+  /* if image was scaled up, create new clipmask for normal size image */
+  if (zoom_factor != 1)
+  {
+#if defined(TARGET_X11)
+    if (old_bitmap->clip_mask)
+      XFreePixmap(display, old_bitmap->clip_mask);
+
+    old_bitmap->clip_mask =
+      Pixmap_to_Mask(tmp_bitmap_1->drawable, width_1, height_1);
+
+    XSetClipMask(display, old_bitmap->stored_clip_gc, old_bitmap->clip_mask);
+#else
+    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, SDL_SRCCOLORKEY,
+                   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, 0, 0);      /* reset transparent pixel */
+#endif
+  }
 
-  src_width  = src_bitmap->width;
-  src_height = src_bitmap->height;
+  new_width  = width_1;
+  new_height = height_1 + (height_1 + 1) / 2;     /* prevent odd height */
 
-  tmp_width  = src_width;
-  tmp_height = src_height + (src_height + 1) / 2;     /* prevent odd height */
+  new_bitmap = CreateBitmap(new_width, new_height, DEFAULT_DEPTH);
 
-  tmp_bitmap = CreateBitmap(tmp_width, tmp_height, DEFAULT_DEPTH);
+  BlitBitmap(tmp_bitmap_1, new_bitmap, 0, 0, width_1, height_1, 0, 0);
+  BlitBitmap(tmp_bitmap_2, new_bitmap, 0, 0, width_1 / 2, height_1 / 2,
+            0, height_1);
+  BlitBitmap(tmp_bitmap_8, new_bitmap, 0, 0, width_1 / 8, height_1 / 8,
+            3 * width_1 / 4, height_1);
 
-  tmp_bitmap_2 = ZoomBitmap(src_bitmap, src_width / 2, src_height / 2);
-  tmp_bitmap_8 = ZoomBitmap(src_bitmap, src_width / 8, src_height / 8);
+  if (zoom_factor != 1)
+    FreeBitmap(tmp_bitmap_1);
 
-  BlitBitmap(src_bitmap, tmp_bitmap, 0, 0, src_width, src_height, 0, 0);
-  BlitBitmap(tmp_bitmap_2, tmp_bitmap, 0, 0, src_width / 2, src_height / 2,
-            0, src_height);
-  BlitBitmap(tmp_bitmap_8, tmp_bitmap, 0, 0, src_width / 8, src_height / 8,
-            3 * src_width / 4, src_height);
+  if (zoom_factor != 2)
+    FreeBitmap(tmp_bitmap_2);
 
-  FreeBitmap(tmp_bitmap_2);
-  FreeBitmap(tmp_bitmap_8);
+  if (zoom_factor != 8)
+    FreeBitmap(tmp_bitmap_8);
 
 #if 0
 
 #if defined(TARGET_SDL)
-  /* !!! what about the old src_bitmap->surface ??? FIX ME !!! */
-  src_bitmap->surface = tmp_bitmap->surface;
-  tmp_bitmap->surface = NULL;
+  /* !!! what about the old old_bitmap->surface ??? FIX ME !!! */
+  old_bitmap->surface = new_bitmap->surface;
+  new_bitmap->surface = NULL;
 #else
   /* !!! see above !!! */
-  src_bitmap->drawable = tmp_bitmap->drawable;
-  tmp_bitmap->drawable = None;
+  old_bitmap->drawable = new_bitmap->drawable;
+  new_bitmap->drawable = None;
 #endif
 
 #else
 
+  /* replace image with extended image (containing normal, 1/2 and 1/8 size) */
 #if defined(TARGET_SDL)
-  swap_bitmap.surface = src_bitmap->surface;
-  src_bitmap->surface = tmp_bitmap->surface;
-  tmp_bitmap->surface = swap_bitmap.surface;
+  swap_bitmap.surface = old_bitmap->surface;
+  old_bitmap->surface = new_bitmap->surface;
+  new_bitmap->surface = swap_bitmap.surface;
 #else
-  swap_bitmap.drawable = src_bitmap->drawable;
-  src_bitmap->drawable = tmp_bitmap->drawable;
-  tmp_bitmap->drawable = swap_bitmap.drawable;
+  swap_bitmap.drawable = old_bitmap->drawable;
+  old_bitmap->drawable = new_bitmap->drawable;
+  new_bitmap->drawable = swap_bitmap.drawable;
 #endif
 
 #endif
 
-  src_bitmap->height = tmp_bitmap->height;
+  old_bitmap->height = new_bitmap->height;
 
-  FreeBitmap(tmp_bitmap);
+  FreeBitmap(new_bitmap);
 }
 
 
index ad9634a3b7bca5d9ba8d07e541b53b1e392366ea..3d5bd828441c6feec57f796b876d6238f089e32c 100644 (file)
@@ -873,7 +873,7 @@ Bitmap *LoadCustomImage(char *);
 void ReloadCustomImage(Bitmap *, char *);
 
 Bitmap *ZoomBitmap(Bitmap *, int, int);
-void CreateBitmapWithSmallBitmaps(Bitmap *);
+void CreateBitmapWithSmallBitmaps(Bitmap *, int);
 
 void SetMouseCursor(int);