rocksndiamonds-2.0.1
authorHolger Schemel <info@artsoft.org>
Tue, 19 Mar 2002 03:28:26 +0000 (04:28 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:36:20 +0000 (10:36 +0200)
CHANGES
Makefile
src/Makefile
src/libgame/misc.c
src/libgame/sdl.c
src/libgame/sdl.h
src/libgame/system.c
src/libgame/system.h

diff --git a/CHANGES b/CHANGES
index ebd7c3a9d2e629f7a5bde79b8e8bdd9845a1ca1b..4cac89f6eeedc1227d630b6e9dc8632e835cd538 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,4 @@
-Release Version 2.0.1 [?? ??? 2002]
+Release Version 2.0.1 [19 MAR 2002]
 -----------------------------------
        - bug in explosion code fixed that broke level 24 of "Baby Ghost Mine"
        - several Supaplex emulation bugs fixed (thanks to Mihail Milushev):
@@ -16,6 +16,15 @@ Release Version 2.0.1 [?? ??? 2002]
        - /dev/dsp support for NetBSD added (thanks to Krister Walfridsson)
        - file permissions when saving files and creating directories changed
        - some small sound bugs fixed
+       - added new contributed levels from the following players:
+         + Arno Luppold
+         + Barak Shacked
+         + Ben Braithwaite
+         + Dominik Seichter
+         + Emilio Hemken
+         + Glenn Alexander
+         + Helge Hafting
+         + Paul Sutton
 
 Release Version 2.0.0 [01 JAN 2001]
 -----------------------------------
index 4da272c5b5d28980543322dc1ecb5335373f4406..3794cd878840e9bb6928fe6e8690ea0dc2dcdf2e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -100,7 +100,13 @@ dist-win32:
 dist-clean:
        @$(MAKE_CMD) dist-clean
 
-dist: dist-unix dist-msdos dist-win32
+dist-build-all:
+       $(MAKE) clean
+       @BUILD_DIST=TRUE $(MAKE) x11            ; $(MAKE) dist-clean
+       @BUILD_DIST=TRUE $(MAKE) cross-win32    ; $(MAKE) dist-clean
+       @BUILD_DIST=TRUE $(MAKE) cross-msdos    ; $(MAKE) dist-clean
+
+dist-all: dist-build-all dist-unix dist-msdos dist-win32
 
 depend dep:
        $(MAKE_CMD) depend
index 4010bcfb1bcf537af3ff81766e40e90c0a6dd237..f4f503fc9cf2555e6242422fe1ab605f6af7a198 100644 (file)
@@ -108,6 +108,10 @@ OPTIONS = $(DEBUG) -O3 -Wall                       # only for debugging purposes
 # OPTIONS = -O3
 # OPTIONS = -DSYSV -Ae                         # may be needed for HP-UX
 
+ifdef BUILD_DIST                               # distribution build
+OPTIONS = -O3 -Wall
+endif
+
 CFLAGS = $(OPTIONS) $(SYS_CFLAGS) $(CONFIG)
 LDFLAGS = $(SYS_LDFLAGS) $(EXTRA_LDFLAGS) -lm
 
index b3edef75f1bbf367d8a8d244ad6ef3b67a3ac8c8..7a55d94de4e5ebf8ae1881ca330828937a9a4a73 100644 (file)
@@ -1306,6 +1306,12 @@ inline void swap_number_pairs(int *x1, int *y1, int *x2, int *y2)
 #ifndef S_IXOTH
 #define S_IXOTH S_IXUSR
 #endif
+#ifndef S_IRWXG
+#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+#endif
+#ifndef S_ISGID
+#define S_ISGID 0
+#endif
 #endif /* PLATFORM_WIN32 */
 
 /* file permissions for newly written files */
@@ -1343,29 +1349,39 @@ char *getSetupDir()
   return getUserDataDir();
 }
 
-void createDirectory(char *dir, char *text, int permission_class)
+static mode_t posix_umask(mode_t mask)
 {
 #if defined(PLATFORM_UNIX)
+  return umask(mask);
+#else
+  return 0;
+#endif
+}
+
+static int posix_mkdir(const char *pathname, mode_t mode)
+{
+#if defined(PLATFORM_WIN32)
+  return mkdir(pathname);
+#else
+  return mkdir(pathname, mode);
+#endif
+}
+
+void createDirectory(char *dir, char *text, int permission_class)
+{
   /* leave "other" permissions in umask untouched, but ensure group parts
      of USERDATA_DIR_MODE are not masked */
   mode_t dir_mode = (permission_class == PERMS_PRIVATE ?
                     DIR_PERMS_PRIVATE : DIR_PERMS_PUBLIC);
-  mode_t normal_umask = umask(0);
+  mode_t normal_umask = posix_umask(0);
   mode_t group_umask = ~(dir_mode & S_IRWXG);
-  umask(normal_umask & group_umask);
-#endif
+  posix_umask(normal_umask & group_umask);
 
   if (access(dir, F_OK) != 0)
-#if defined(PLATFORM_WIN32)
-    if (mkdir(dir) != 0)
-#else
-    if (mkdir(dir, dir_mode) != 0)
-#endif
+    if (posix_mkdir(dir, dir_mode) != 0)
       Error(ERR_WARN, "cannot create %s directory '%s'", text, dir);
 
-#if defined(PLATFORM_UNIX)
-  umask(normal_umask);         /* reset normal umask */
-#endif
+  posix_umask(normal_umask);           /* reset normal umask */
 }
 
 void InitUserDataDirectory()
index 2441ede36ab217a67d3b8a760c9133fd7c91fcaf..a2d82fab1d2aa370a617e720fb830a0d0dc032cd 100644 (file)
@@ -320,6 +320,60 @@ inline void SDLDrawLines(SDL_Surface *surface, struct XY *points,
 }
 #endif
 
+inline Pixel SDLGetPixel(Bitmap *dst_bitmap, int x, int y)
+{
+  SDL_Surface *surface = dst_bitmap->surface;
+
+#ifdef FULLSCREEN_BUG
+  if (dst_bitmap == backbuffer || dst_bitmap == window)
+  {
+    x += video_xoffset;
+    y += video_yoffset;
+  }
+#endif
+
+  switch (surface->format->BytesPerPixel)
+  {
+    case 1:            /* assuming 8-bpp */
+    {
+      return *((Uint8 *)surface->pixels + y * surface->pitch + x);
+    }
+    break;
+
+    case 2:            /* probably 15-bpp or 16-bpp */
+    {
+      return *((Uint16 *)surface->pixels + y * surface->pitch / 2 + x);
+    }
+    break;
+
+  case 3:              /* slow 24-bpp mode; usually not used */
+    {
+      /* does this work? */
+      Uint8 *pix = (Uint8 *)surface->pixels + y * surface->pitch + x * 3;
+      Uint32 color = 0;
+      int shift;
+
+      shift = surface->format->Rshift;
+      color |= *(pix + shift / 8) >> shift;
+      shift = surface->format->Gshift;
+      color |= *(pix + shift / 8) >> shift;
+      shift = surface->format->Bshift;
+      color |= *(pix + shift / 8) >> shift;
+
+      return color;
+    }
+    break;
+
+  case 4:              /* probably 32-bpp */
+    {
+      return *((Uint32 *)surface->pixels + y * surface->pitch / 4 + x);
+    }
+    break;
+  }
+
+  return 0;
+}
+
 
 /* ========================================================================= */
 /* The following functions have been taken from the SGE library              */
index 7db0dc2c38ca30a3853009d0b96feca4cd03a40e..fcc566edbc849673b42d7707593ac00c6ed6eeec 100644 (file)
@@ -321,6 +321,7 @@ inline void SDLCopyArea(Bitmap *, Bitmap *, int, int, int, int, int, int, int);
 inline void SDLFillRectangle(Bitmap *, int, int, int, int, unsigned int);
 inline void SDLDrawSimpleLine(Bitmap *, int, int, int, int, unsigned int);
 inline void SDLDrawLine(Bitmap *, int, int, int, int, Uint32);
+inline Pixel SDLGetPixel(Bitmap *, int, int);
 
 Bitmap *SDLLoadImage(char *);
 
index bd9fc229206806112c19f051eb9e02d0615018bc..b4ac9ce4e83a3b8bb4e49a954e78f071a6ab4391 100644 (file)
@@ -438,6 +438,26 @@ inline void DrawLines(Bitmap *bitmap, struct XY *points, int num_points,
 #endif
 }
 
+inline Pixel GetPixel(Bitmap *bitmap, int x, int y)
+{
+#if defined(TARGET_SDL)
+  return SDLGetPixel(bitmap, x, y);
+#elif defined(TARGET_ALLEGRO)
+  return AllegroGetPixel(bitmap->drawable, x, y);
+#else
+  unsigned long pixel_value;
+  XImage *pixel_image;
+
+  pixel_image = XGetImage(display, bitmap->drawable, x, y, 1, 1,
+                         AllPlanes, ZPixmap);
+  pixel_value = XGetPixel(pixel_image, 0, 0);
+
+  XDestroyImage(pixel_image);
+
+  return pixel_value;
+#endif
+}
+
 inline Pixel GetPixelFromRGB(Bitmap *bitmap, unsigned int color_r,
                             unsigned int color_g, unsigned int color_b)
 {
index 71dfc5cf5d00c516a908a365dcae1e398494df25..34a068a543b6f846f5ec1ebfe96dc6e19fbb7250 100644 (file)
@@ -291,6 +291,7 @@ inline void SetClipOrigin(Bitmap *, GC, int, int);
 inline void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int);
 inline void DrawSimpleWhiteLine(Bitmap *, int, int, int, int);
 inline void DrawLines(Bitmap *, struct XY *, int, Pixel);
+inline Pixel GetPixel(Bitmap *, int, int);
 inline Pixel GetPixelFromRGB(Bitmap *, unsigned int,unsigned int,unsigned int);
 inline Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int);