rnd-20001215-1-src
authorHolger Schemel <info@artsoft.org>
Fri, 15 Dec 2000 15:07:35 +0000 (16:07 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:35:37 +0000 (10:35 +0200)
CHANGES
src/init.c
src/libgame/misc.c
src/libgame/msdos.c
src/libgame/msdos.h
src/libgame/system.c
src/main.c
src/screens.c

diff --git a/CHANGES b/CHANGES
index 9cde8a3a30303fd72b93d56135e1b81c0e106967..7a595f931f7bde970508192c405f85ace8b31fbd 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,8 +1,10 @@
 Version 1.5.0
 -------------
-       - SDL!!!
+       - can be compiled with SDL library to build native Windows version
        - trying to open already busy audio device does not block the game
        - fixed network playing bug (patch from web site)
+       - SDL version can load and play music modules
+       - fixed element description in level editor for EM doors and keys
 
 Release Version 1.4.0 [27 OCT 1999]
 -----------------------------------
index dbe878cd7063942f299061ba83186f00eb3b10d5..17a1cbdbf3d4a2224e0886cbfd72c2c40e06bbd7 100644 (file)
@@ -341,7 +341,7 @@ void InitGfx()
   }; 
 #endif
 
-#ifdef TARGET_X11
+#if defined(TARGET_X11_NATIVE)
   static struct
   {
     int start;
@@ -433,7 +433,16 @@ void InitGfx()
 
   InitFontInfo(pix[PIX_BIGFONT], pix[PIX_MEDIUMFONT], pix[PIX_SMALLFONT]);
 
+  /* initialize pixmap array for special X11 tile clipping to Pixmap 'None' */
+  for(i=0; i<NUM_TILES; i++)
+    tile_clipmask[i] = None;
+
 #if defined(TARGET_X11)
+  /* This stuff is needed because X11 (XSetClipOrigin(), to be precise) is
+     often very slow when preparing a masked XCopyArea() for big Pixmaps.
+     To prevent this, create small (tile-sized) mask Pixmaps which will then
+     be set much faster with XSetClipOrigin() and speed things up a lot. */
+
   /* create graphic context structures needed for clipping */
   clip_gc_values.graphics_exposures = False;
   clip_gc_valuemask = GCGraphicsExposures;
@@ -458,10 +467,7 @@ void InitGfx()
     }
   }
 
-  /* initialize pixmap array to Pixmap 'None' */
-  for(i=0; i<NUM_TILES; i++)
-    tile_clipmask[i] = None;
-
+#if defined(TARGET_X11_NATIVE)
   /* create only those clipping Pixmaps we really need */
   for(i=0; tile_needs_clipping[i].start>=0; i++)
   {
@@ -485,6 +491,7 @@ void InitGfx()
                src_x, src_y, TILEX, TILEY, 0, 0);
     }
   }
+#endif /* TARGET_X11_ANTIVE */
 #endif /* TARGET_X11 */
 }
 
index b72fa146cd684385f84190b654cfd66b8a784233..5673dcedc46b7661ada0795e7539ce4a2afe9095 100644 (file)
@@ -551,15 +551,18 @@ void Error(int mode, char *format, ...)
 {
   char *process_name = "";
   FILE *error = stderr;
+  char *newline = "\n";
 
   /* display warnings only when running in verbose mode */
   if (mode & ERR_WARN && !options.verbose)
     return;
 
 #if !defined(PLATFORM_UNIX)
+  newline = "\r\n";
+
   if ((error = openErrorFile()) == NULL)
   {
-    printf("Cannot write to error output file!\n");
+    printf("Cannot write to error output file!%s", newline);
     program.exit_function(1);
   }
 #endif
@@ -584,15 +587,16 @@ void Error(int mode, char *format, ...)
     vfprintf(error, format, ap);
     va_end(ap);
   
-    fprintf(error, "\n");
+    fprintf(error, "%s", newline);
   }
   
   if (mode & ERR_HELP)
-    fprintf(error, "%s: Try option '--help' for more information.\n",
-           program.command_basename);
+    fprintf(error, "%s: Try option '--help' for more information.%s",
+           program.command_basename, newline);
 
   if (mode & ERR_EXIT)
-    fprintf(error, "%s%s: aborting\n", program.command_basename, process_name);
+    fprintf(error, "%s%s: aborting%s",
+           program.command_basename, process_name, newline);
 
   if (error != stderr)
     fclose(error);
index 75f92a05f7f02f2ae303a0c714bbd9c2253e2e95..77257e07d14f4e7dc924626fa32fd3c27d361814 100644 (file)
@@ -238,25 +238,7 @@ static KeySym ScancodeToKeySym(byte scancode)
   }
 }
 
-void XMapWindow(Display *display, Window window)
-{
-  int x, y;
-  unsigned int width, height;
-  boolean mouse_off;
-
-  x = AllegroDefaultScreen().x;
-  y = AllegroDefaultScreen().y;
-  width = AllegroDefaultScreen().width;
-  height = AllegroDefaultScreen().height;
-
-  mouse_off = hide_mouse(display, x, y, width, height);
-  blit((BITMAP *)window, video_bitmap, 0, 0, x, y, width, height);
-
-  if (mouse_off)
-    unhide_mouse(display);
-}
-
-static unsigned long AllocColorCell(int r, int g, int b)
+Pixel AllegroAllocColorCell(int r, int g, int b)
 {
   byte pixel_mapping = 0;
   int i;
@@ -282,16 +264,38 @@ static unsigned long AllocColorCell(int r, int g, int b)
     if (global_colormap_entries_used < MAX_COLORS)
       global_colormap_entries_used++;
 
+    i = global_colormap_entries_used - 1;
+
     global_colormap[i].r = r;
     global_colormap[i].g = g;
     global_colormap[i].b = b;
 
+    set_palette(global_colormap);
+
     pixel_mapping = i;
   }
 
   return pixel_mapping;
 }
 
+void XMapWindow(Display *display, Window window)
+{
+  int x, y;
+  unsigned int width, height;
+  boolean mouse_off;
+
+  x = AllegroDefaultScreen().x;
+  y = AllegroDefaultScreen().y;
+  width = AllegroDefaultScreen().width;
+  height = AllegroDefaultScreen().height;
+
+  mouse_off = hide_mouse(display, x, y, width, height);
+  blit((BITMAP *)window, video_bitmap, 0, 0, x, y, width, height);
+
+  if (mouse_off)
+    unhide_mouse(display);
+}
+
 Display *XOpenDisplay(char *display_name)
 {
   Screen *screen;
@@ -311,8 +315,8 @@ Display *XOpenDisplay(char *display_name)
   screen[0].white_pixel = 0xFF;
   screen[0].black_pixel = 0x00;
 #else
-  screen[0].white_pixel = AllocColorCell(0xFFFF, 0xFFFF, 0xFFFF);
-  screen[0].black_pixel = AllocColorCell(0x0000, 0x0000, 0x0000);
+  screen[0].white_pixel = AllegroAllocColorCell(0xFFFF, 0xFFFF, 0xFFFF);
+  screen[0].black_pixel = AllegroAllocColorCell(0x0000, 0x0000, 0x0000);
 #endif
   screen[0].video_bitmap = NULL;
 
@@ -562,9 +566,9 @@ static BITMAP *Image_to_AllegroBitmap(Image *image)
       pixel_mapping[i] = j;
     }
 #else
-    pixel_mapping[i] = AllocColorCell(image->rgb.red[i],
-                                     image->rgb.green[i],
-                                     image->rgb.blue[i]);
+    pixel_mapping[i] = AllegroAllocColorCell(image->rgb.red[i],
+                                            image->rgb.green[i],
+                                            image->rgb.blue[i]);
 #endif
 
   }
@@ -604,7 +608,17 @@ int Read_PCX_to_Pixmap(Display *display, Window window, GC gc, char *filename,
     return errno_pcx;
 
   *pixmap = (Pixmap)bitmap;
+#if 0
   *pixmap_mask = (Pixmap)bitmap;
+  /* !!! two pointers on same bitmap => second free() fails !!! */
+#else
+  /* pixmap_mask will never be used in Allegro (which uses masked_blit()),
+     so use non-NULL dummy pointer to empty Pixmap */
+  /*
+  *pixmap_mask = (Pixmap)checked_calloc(sizeof(Pixmap));
+  */
+  *pixmap_mask = (Pixmap)DUMMY_MASK;
+#endif
 
   return PCX_Success;
 }
@@ -952,6 +966,11 @@ void AllegroDrawLine(Drawable d, int from_x, int from_y, int to_x, int to_y,
   freeze_mouse_flag = FALSE;
 }
 
+Pixel AllegroGetPixel(Drawable d, int x, int y)
+{
+  return getpixel((BITMAP *)d, x, y);
+}
+
 void MSDOSOpenAudio(void)
 {
   if (allegro_init_audio())
index af8652353e47c84a41b33ff0cd0e9003de2b0851..40a42da2600d6e1b3f344bcbed58b38b9b4a8dc6 100644 (file)
@@ -694,6 +694,8 @@ typedef union _XEvent
   XKeyEvent xkey;
 } XEvent;
 
+Pixel AllegroAllocColorCell(int, int, int);
+
 void XMapWindow(Display *, Window);
 Display *XOpenDisplay(char *);
 Window XCreateSimpleWindow(Display *, Window, int, int,
@@ -732,6 +734,7 @@ void XAutoRepeatOn(Display *);
 void XAutoRepeatOff(Display *);
 
 void AllegroDrawLine(Drawable, int, int, int, int, Pixel);
+Pixel AllegroGetPixel(Drawable, int, int);
 
 void MSDOSOpenAudio(void);
 void MSDOSCloseAudio(void);
index 5217460d47f80ed11a9dc3dcb4b14b7de09790cf..22e9f2f1bda51bbe253367997c80a1d10bd2c069 100644 (file)
@@ -441,6 +441,8 @@ inline Pixel GetPixelFromRGB(Bitmap *bitmap, unsigned int color_r,
 
 #if defined(TARGET_SDL)
   pixel = SDL_MapRGB(bitmap->surface->format, color_r, color_g, color_b);
+#elif defined(TARGET_ALLEGRO)
+  pixel = AllegroAllocColorCell(color_r << 8, color_g << 8, color_b << 8);
 #elif defined(TARGET_X11_NATIVE)
   XColor xcolor;
 
index 0ef3af3bf416752680d24a6bf2b7bc030059b613..521e4b351d76f254b31ec6b14d28850d1fd31fd2 100644 (file)
@@ -273,7 +273,7 @@ char *element_info[] =
   "normal wall (BD style)",
   "rock (BD style)",
   "open exit",
-  "unknown",
+  "black orb bomb",
   "amoeba",
   "mole",                                      /* 110 */
   "penguin",
@@ -284,7 +284,7 @@ char *element_info[] =
   "arrow down",
   "pig",
   "fire breathing dragon",
-  "unknown",
+  "red key (EM style)",
   "letter ' '",                                        /* 120 */
   "letter '!'",
   "letter '\"'",
@@ -368,13 +368,13 @@ char *element_info[] =
   "growing wall (horizontal)",                 /* 200 */
   "growing wall (vertical)",
   "growing wall (all directions)",
-  "unused",
-  "unused",
-  "unused",
-  "unused",
-  "unused",
-  "unused",
-  "unused",
+  "red door (EM style)",
+  "yellow door (EM style)",
+  "green door (EM style)",
+  "blue door (EM style)",
+  "yellow key (EM style)",
+  "green key (EM style)",
+  "blue key (EM style)",
   "empty space",                               /* 210 */
   "zonk",
   "base",
@@ -415,10 +415,10 @@ char *element_info[] =
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
-  "unknown",                                   /* 250 */
-  "unknown",
-  "unknown",
-  "unknown",
+  "gray door (EM style, red key)",             /* 250 */
+  "gray door (EM style, yellow key)",
+  "gray door (EM style, green key)",
+  "gray door (EM style, blue key)",
   "unknown",
   "unknown",
 
index 486ad6d9415040f7627f8f6bd075ec3d140cbd1c..556cc29ec4b07e7b019b47ce6313cf90014aef4b 100644 (file)
@@ -700,7 +700,9 @@ void DrawHelpScreenMusicText(int num)
 
   DrawTextFCentered(ybottom, FC_BLUE, "Press any key or button for next page");
 
+#if 0
   PlaySoundLoop(background_loop[num]);
+#endif
 }
 
 void DrawHelpScreenCreditsText()