rnd-20060816-2-src
[rocksndiamonds.git] / src / main.h
index ddd1218669d2e0a7377e412f899928b971edb27d..cd6ffe2b3bd8d9f020f56221c6a802e26321c2aa 100644 (file)
@@ -42,6 +42,8 @@
 #define WIN_XSIZE                      672
 #define WIN_YSIZE                      560
 
+#define DEFAULT_FULLSCREEN_MODE                "800x600"
+
 #define SCR_FIELDX                     17
 #define SCR_FIELDY                     17
 #define MAX_BUF_XSIZE                  (SCR_FIELDX + 2)
 #define IS_IN_GROUP(e, nr)     (element_info[e].in_group[nr] == TRUE)
 #define IS_IN_GROUP_EL(e, ge)  (IS_IN_GROUP(e, (ge) - EL_GROUP_START))
 
+#if 1
+#define IS_EQUAL_OR_IN_GROUP(e, ge)                                    \
+       (ge == EL_ANY_ELEMENT ? TRUE :                                  \
+        IS_GROUP_ELEMENT(ge) ? IS_IN_GROUP(e, GROUP_NR(ge)) : (e) == (ge))
+#else
 #define IS_EQUAL_OR_IN_GROUP(e, ge)                                    \
        (IS_GROUP_ELEMENT(ge) ? IS_IN_GROUP(e, GROUP_NR(ge)) : (e) == (ge))
 #endif
 
+#endif
+
 #define IS_PLAYER(x, y)                (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
 #define IS_FREE(x, y)          (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x, y))
 #define ANIM_DELAY(g)          (graphic_info[g].anim_delay)
 #define ANIM_MODE(g)           (graphic_info[g].anim_mode)
 
+#define IS_ANIM_MODE_CE(g)     (graphic_info[g].anim_mode & (ANIM_CE_VALUE |  \
+                                                             ANIM_CE_SCORE |  \
+                                                             ANIM_CE_DELAY))
 #define IS_ANIMATED(g)         (ANIM_FRAMES(g) > 1)
 #define IS_NEW_DELAY(f, g)     ((f) % ANIM_DELAY(g) == 0)
 #define IS_NEW_FRAME(f, g)     (IS_ANIMATED(g) && IS_NEW_DELAY(f, g))
 #define MICROLEVEL_XSIZE       ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
 #define MICROLEVEL_YSIZE       ((STD_LEV_FIELDY + 2) * MICRO_TILEY)
 #define MICROLEVEL_XPOS                (SX + (SXSIZE - MICROLEVEL_XSIZE) / 2)
-#define MICROLEVEL_YPOS                (SX + 12 * TILEY - MICRO_TILEY)
+#define MICROLEVEL_YPOS                (SY + 12 * TILEY - MICRO_TILEY)
 #define MICROLABEL1_YPOS       (MICROLEVEL_YPOS - 36)
 #define MICROLABEL2_YPOS       (MICROLEVEL_YPOS + MICROLEVEL_YSIZE + 7)
 
 #define EL_YAMYAM_UP                   711
 #define EL_YAMYAM_DOWN                 712
 
-#define NUM_FILE_ELEMENTS              713
+#define EL_BD_EXPANDABLE_WALL          713
+
+#define EL_LAST_CE_8                   714
+#define EL_LAST_CE_7                   715
+#define EL_LAST_CE_6                   716
+#define EL_LAST_CE_5                   717
+#define EL_LAST_CE_4                   718
+#define EL_LAST_CE_3                   719
+#define EL_LAST_CE_2                   720
+#define EL_LAST_CE_1                   721
+#define EL_SELF                                722
+#define EL_NEXT_CE_1                   723
+#define EL_NEXT_CE_2                   724
+#define EL_NEXT_CE_3                   725
+#define EL_NEXT_CE_4                   726
+#define EL_NEXT_CE_5                   727
+#define EL_NEXT_CE_6                   728
+#define EL_NEXT_CE_7                   729
+#define EL_NEXT_CE_8                   730
+#define EL_ANY_ELEMENT                 731
+
+#define NUM_FILE_ELEMENTS              732
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define EL_INTERNAL_CASCADE_CE_ACTIVE          (EL_FIRST_INTERNAL + 23)
 #define EL_INTERNAL_CASCADE_GE                 (EL_FIRST_INTERNAL + 24)
 #define EL_INTERNAL_CASCADE_GE_ACTIVE          (EL_FIRST_INTERNAL + 25)
-#define EL_INTERNAL_CASCADE_USER               (EL_FIRST_INTERNAL + 26)
-#define EL_INTERNAL_CASCADE_USER_ACTIVE                (EL_FIRST_INTERNAL + 27)
-#define EL_INTERNAL_CASCADE_GENERIC            (EL_FIRST_INTERNAL + 28)
-#define EL_INTERNAL_CASCADE_GENERIC_ACTIVE     (EL_FIRST_INTERNAL + 29)
+#define EL_INTERNAL_CASCADE_REF                        (EL_FIRST_INTERNAL + 26)
+#define EL_INTERNAL_CASCADE_REF_ACTIVE         (EL_FIRST_INTERNAL + 27)
+#define EL_INTERNAL_CASCADE_USER               (EL_FIRST_INTERNAL + 28)
+#define EL_INTERNAL_CASCADE_USER_ACTIVE                (EL_FIRST_INTERNAL + 29)
 #define EL_INTERNAL_CASCADE_DYNAMIC            (EL_FIRST_INTERNAL + 30)
 #define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE     (EL_FIRST_INTERNAL + 31)
 
 /* program information and versioning definitions */
 #define PROGRAM_VERSION_MAJOR          3
 #define PROGRAM_VERSION_MINOR          2
-#define PROGRAM_VERSION_PATCH          0
-#define PROGRAM_VERSION_BUILD          9
+#define PROGRAM_VERSION_PATCH          1
+#define PROGRAM_VERSION_BUILD          0
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright ©1995-2006 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING       "Copyright ©1995-2006 by Holger Schemel"
+#define PROGRAM_EMAIL_STRING           "info@artsoft.org"
+#define PROGRAM_WEBSITE_STRING         "http://www.artsoft.org/"
 
 #define ICON_TITLE_STRING              PROGRAM_TITLE_STRING
 #define COOKIE_PREFIX                  "ROCKSNDIAMONDS"
 #define FILENAME_PREFIX                        "Rocks"
 
-#if defined(PLATFORM_UNIX)
-#define USERDATA_DIRECTORY             ".rocksndiamonds"
-#elif defined(PLATFORM_WIN32)
-#define USERDATA_DIRECTORY             PROGRAM_TITLE_STRING
+#define USERDATA_DIRECTORY_WIN32       PROGRAM_TITLE_STRING
+#define USERDATA_DIRECTORY_MACOSX      PROGRAM_TITLE_STRING
+#define USERDATA_DIRECTORY_UNIX                ".rocksndiamonds"
+#define USERDATA_DIRECTORY_DOS         "userdata"
+
+#if defined(PLATFORM_WIN32)
+#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_WIN32
+#elif defined(PLATFORM_MACOSX)
+#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_MACOSX
+#elif defined(PLATFORM_UNIX)
+#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_UNIX
 #else
-#define USERDATA_DIRECTORY             "userdata"
+#define USERDATA_DIRECTORY             USERDATA_DIRECTORY_DOS
 #endif
 
 #define X11_ICON_FILENAME              "rocks_icon.xbm"
 #define X11_ICONMASK_FILENAME          "rocks_iconmask.xbm"
+#define SDL_ICON_FILENAME              "rocks_icon_32x32.pcx"
 #define MSDOS_POINTER_FILENAME         "mouse.pcx"
 
 /* file version numbers for resource files (levels, tapes, score, setup, etc.)
@@ -1799,6 +1842,9 @@ struct MenuInfo
 
   int list_size[NUM_SPECIAL_GFX_ARGS];
 
+  int fade_delay;
+  int post_delay;
+
   int sound[NUM_SPECIAL_GFX_ARGS];
   int music[NUM_SPECIAL_GFX_ARGS];
 };
@@ -1812,6 +1858,15 @@ struct DoorInfo
   int anim_mode;
 };
 
+struct PreviewInfo
+{
+  int x, y;
+  int xsize, ysize;
+  int tile_size;
+  int step_offset;
+  int step_delay;
+};
+
 struct HiScore
 {
   char Name[MAX_PLAYER_NAME_LEN + 1];
@@ -2181,20 +2236,28 @@ struct GraphicInfo
 
   int src_x, src_y;            /* start position of animation frames */
   int width, height;           /* width/height of each animation frame */
+
   int offset_x, offset_y;      /* x/y offset to next animation frame */
   int offset2_x, offset2_y;    /* x/y offset to second movement tile */
+
   boolean double_movement;     /* animation has second movement tile */
   int swap_double_tiles;       /* explicitely force or forbid tile swapping */
+
   int anim_frames;
   int anim_frames_per_line;
   int anim_start_frame;
   int anim_delay;              /* important: delay of 1 means "no delay"! */
   int anim_mode;
+
   boolean anim_global_sync;
+
   int crumbled_like;           /* element for cloning crumble graphics */
   int diggable_like;           /* element for cloning digging graphics */
+
   int border_size;             /* border size for "crumbled" graphics */
+
   int scale_up_factor;         /* optional factor for scaling image up */
+
   int clone_from;              /* graphic for cloning *all* settings */
 
   int anim_delay_fixed;                /* optional delay values for bored and   */
@@ -2284,8 +2347,9 @@ struct HelpAnimInfo
 };
 
 
-extern Bitmap                 *bitmap_db_title;
+extern Bitmap                 *bitmap_db_cross;
 extern Bitmap                 *bitmap_db_field;
+extern Bitmap                 *bitmap_db_panel;
 extern Bitmap                 *bitmap_db_door;
 extern Pixmap                  tile_clipmask[];
 extern DrawBuffer             *fieldbuffer;
@@ -2374,6 +2438,7 @@ extern struct TapeInfo            tape;
 extern struct GlobalInfo       global;
 extern struct MenuInfo         menu;
 extern struct DoorInfo         door_1, door_2;
+extern struct PreviewInfo      preview;
 extern struct ElementInfo      element_info[];
 extern struct ElementNameInfo  element_name_info[];
 extern struct ElementActionInfo        element_action_info[];