added configurability of different window size for title screens
[rocksndiamonds.git] / src / main.h
index 1357db711ec600a931715f596bb09f0635a8f464..a8edcee71ea33d8c76b534843b1bb39e487c7aa7 100644 (file)
@@ -1,15 +1,13 @@
-/***********************************************************
-* Rocks'n'Diamonds -- McDuffin Strikes Back!               *
-*----------------------------------------------------------*
-* (c) 1995-2006 Artsoft Entertainment                      *
-*               Holger Schemel                             *
-*               Detmolder Strasse 189                      *
-*               33604 Bielefeld                            *
-*               Germany                                    *
-*               e-mail: info@artsoft.org                   *
-*----------------------------------------------------------*
-* main.h                                                   *
-***********************************************************/
+// ============================================================================
+// Rocks'n'Diamonds - McDuffin Strikes Back!
+// ----------------------------------------------------------------------------
+// (c) 1995-2014 by Artsoft Entertainment
+//                         Holger Schemel
+//                 info@artsoft.org
+//                 http://www.artsoft.org/
+// ----------------------------------------------------------------------------
+// main.h
+// ============================================================================
 
 #ifndef MAIN_H
 #define MAIN_H
 #include "conf_mus.h"  /* include auto-generated data structure definitions */
 
 
-#define NEW_GAME_TILESIZE              1
-#define NEW_TILESIZE                   1
-#define NEW_SCROLL                     1
-
 #define IMG_UNDEFINED                  (-1)
 #define IMG_EMPTY                      IMG_EMPTY_SPACE
 #define IMG_SP_EMPTY                   IMG_EMPTY_SPACE
 #define SND_UNDEFINED                  (-1)
 #define MUS_UNDEFINED                  (-1)
 
-#if 0
-#define WIN_XSIZE                      672
-#define WIN_YSIZE                      560
-#endif
-
 #define DEFAULT_FULLSCREEN_MODE                "800x600"
 
-#if 0
-#define SCR_FIELDX                     17
-#define SCR_FIELDY                     17
-#endif
+#define WIN_XSIZE_DEFAULT              672
+#define WIN_YSIZE_DEFAULT              560
+
+#define SCR_FIELDX_DEFAULT             17
+#define SCR_FIELDY_DEFAULT             17
+
+#define SXSIZE_DEFAULT                 (SCR_FIELDX_DEFAULT * TILEX)
+#define SYSIZE_DEFAULT                 (SCR_FIELDY_DEFAULT * TILEY)
+
 #define MAX_BUF_XSIZE                  (SCR_FIELDX + 2)
 #define MAX_BUF_YSIZE                  (SCR_FIELDY + 2)
 #define MIN_LEV_FIELDX                 3
 #define IS_DC_STEELWALL_2(e)   ((e) >= EL_DC_STEELWALL_2_LEFT &&       \
                                 (e) <= EL_DC_STEELWALL_2_SINGLE)
 
-#if 1
-
-#if 1
 #define GFX_ELEMENT(e)         (element_info[e].gfx_element)
-#else
-#define GFX_ELEMENT(e)         (element_info[e].gfx_element ==         \
-                                (element_info[e].use_gfx_element ?     \
-                                 element_info[e].gfx_element : e)  ?   \
-                                element_info[e].gfx_element :          \
-                                element_info[e].gfx_element +          \
-                                0 * printf("::: %d: %d <-> %d\n",      \
-                                           e,                          \
-                                           element_info[e].gfx_element,      \
-                                           element_info[e].use_gfx_element ? \
-                                           element_info[e].gfx_element : e))
-#endif
-
-#else
-#define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
-                                element_info[e].gfx_element : e)
-#endif
 
 /* !!! CHECK THIS !!! */
 #if 1
 #define BUTTON_ACTIVE(b)       (ActiveButton[b])
 #define FONT_ACTIVE(f)         (ActiveFont[f])
 
-
 /* fundamental game speed values */
 #define MICROLEVEL_SCROLL_DELAY        50      /* delay for scrolling micro level */
 #define MICROLEVEL_LABEL_DELAY 250     /* delay for micro level label */
 #define MAX_INITIAL_INVENTORY_SIZE     8
 
 /* often used screen positions */
-#if 0
-#define SX                     8
-#define SY                     8
-#define REAL_SX                        (SX - 2)
-#define REAL_SY                        (SY - 2)
-#define DX                     566
-#define DY                     60
-#define VX                     DX
-#define VY                     400
-#define EX                     DX
-#define EY                     (VY - 44)
-#endif
 #define TILESIZE               32
 #define TILEX                  TILESIZE
 #define TILEY                  TILESIZE
 #define MICRO_TILEY            MICRO_TILESIZE
 #define MIDPOSX                        (SCR_FIELDX / 2)
 #define MIDPOSY                        (SCR_FIELDY / 2)
-#if NEW_TILESIZE
-#if NEW_SCROLL
-#if 0
-#define SXSIZE                 (SCR_FIELDX * TILEX_VAR)
-#define SYSIZE                 (SCR_FIELDY * TILEY_VAR)
-#endif
 #define FXSIZE                 ((2 + SCR_FIELDX + 2) * TILEX_VAR)
 #define FYSIZE                 ((2 + SCR_FIELDY + 2) * TILEY_VAR)
-#else
-#if 0
-#define SXSIZE                 (SCR_FIELDX * TILEX_VAR)
-#define SYSIZE                 (SCR_FIELDY * TILEY_VAR)
-#endif
-#define FXSIZE                 ((SCR_FIELDX + 2) * TILEX_VAR)
-#define FYSIZE                 ((SCR_FIELDY + 2) * TILEY_VAR)
-#endif
-#else
-#if NEW_SCROLL
-#if 0
-#define SXSIZE                 (SCR_FIELDX * TILEX)
-#define SYSIZE                 (SCR_FIELDY * TILEY)
-#endif
-#define FXSIZE                 ((2 + SCR_FIELDX + 2) * TILEX)
-#define FYSIZE                 ((2 + SCR_FIELDY + 2) * TILEY)
-#else
-#if 0
-#define SXSIZE                 (SCR_FIELDX * TILEX)
-#define SYSIZE                 (SCR_FIELDY * TILEY)
-#endif
-#define FXSIZE                 ((SCR_FIELDX + 2) * TILEX)
-#define FYSIZE                 ((SCR_FIELDY + 2) * TILEY)
-#endif
-#endif
 
-#if 0
-#define DXSIZE                 100
-#define DYSIZE                 280
-#define VXSIZE                 DXSIZE
-#define VYSIZE                 100
-#define EXSIZE                 DXSIZE
-#define EYSIZE                 (VYSIZE + 44)
-#endif
-
-#if 0
-#define FULL_SXSIZE            (2 + SXSIZE + 2)
-#define FULL_SYSIZE            (2 + SYSIZE + 2)
-#endif
 #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 NUM_FONTS                      38
 #define NUM_INITIAL_FONTS              4
 
-#if 0
-#define FONT_ACTIVE(f)                                                   \
-       ((f) == FONT_MENU_1             ? FONT_MENU_1_ACTIVE            : \
-        (f) == FONT_MENU_2             ? FONT_MENU_2_ACTIVE            : \
-        (f) == FONT_TEXT_1             ? FONT_TEXT_1_ACTIVE            : \
-        (f) == FONT_TEXT_2             ? FONT_TEXT_2_ACTIVE            : \
-        (f) == FONT_TEXT_3             ? FONT_TEXT_3_ACTIVE            : \
-        (f) == FONT_TEXT_4             ? FONT_TEXT_4_ACTIVE            : \
-        (f) == FONT_INPUT_1            ? FONT_INPUT_1_ACTIVE           : \
-        (f) == FONT_INPUT_2            ? FONT_INPUT_2_ACTIVE           : \
-        (f) == FONT_LEVEL_NUMBER       ? FONT_LEVEL_NUMBER_ACTIVE      : \
-        (f))
-#endif
-
 /* values for game_status (must match special image configuration suffixes) */
 #define GAME_MODE_DEFAULT              0
 #define GAME_MODE_LOADING              1
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright ©1995-2014 by Holger Schemel"
 #define PROGRAM_EMAIL_STRING           "info@artsoft.org"
 #define PROGRAM_WEBSITE_STRING         "http://www.artsoft.org/"
-#define PROGRAM_GAME_BY_STRING         "A Game by Artsoft Entertainment"
-#define PROGRAM_UNIX_DATADIR_STRING    ".rocksndiamonds"
-
-#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
-#undef  PROGRAM_TITLE_STRING
-#define PROGRAM_TITLE_STRING           "R'n'D jue"
-#undef  PROGRAM_UNIX_DATADIR_STRING
-#define PROGRAM_UNIX_DATADIR_STRING    ".rnd_jue"
-#endif
+#define PROGRAM_COPYRIGHT_STRING       "Copyright \xa9""1995-2015 by Holger Schemel"
+#define PROGRAM_COMPANY_STRING         "A Game by Artsoft Entertainment"
+
+#define PROGRAM_ICON_FILENAME          "RocksIcon32x32.png"
 
-#define ICON_TITLE_STRING              PROGRAM_TITLE_STRING
 #define COOKIE_PREFIX                  "ROCKSNDIAMONDS"
 
-#define USERDATA_DIRECTORY_WIN32       PROGRAM_TITLE_STRING
-#define USERDATA_DIRECTORY_MACOSX      PROGRAM_TITLE_STRING
-#define USERDATA_DIRECTORY_UNIX                PROGRAM_UNIX_DATADIR_STRING
 #define USERDATA_DIRECTORY_OTHER       "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_DIRECTORY_OTHER
-#endif
-
-#define SDL_ICON_FILENAME              "RocksIcon32x32.png"
-
 /* file version numbers for resource files (levels, tapes, score, setup, etc.)
 ** currently supported/known file version numbers:
 **     1.0 (old)
 
 #define NUM_ENGINE_TYPES               4
 
+/* values for automatically playing tapes */
+#define AUTOPLAY_TEST                  0
+#define AUTOPLAY_PLAY                  1
+#define AUTOPLAY_FFWD                  2
+
 
 struct BorderInfo
 {
@@ -2284,6 +2170,7 @@ struct MenuInfo
   int scrollbar_xoffset;
 
   int list_size[NUM_SPECIAL_GFX_ARGS];
+  int list_size_info[NUM_SPECIAL_GFX_INFO_ARGS];
 
   struct TitleFadingInfo enter_menu;
   struct TitleFadingInfo leave_menu;
@@ -2327,6 +2214,8 @@ struct RequestInfo
   int step_offset;
   int step_delay;
   int anim_mode;
+  int align;
+  int valign;
   boolean autowrap;
   boolean centered;
   boolean wrap_single_words;
@@ -2344,24 +2233,117 @@ struct PreviewInfo
   int anim_mode;
 };
 
+struct EditorTabsInfo
+{
+  int x;
+  int y;
+  int yoffset2;
+  int width;
+  int height;
+  int draw_xoffset;
+  int draw_yoffset;
+};
+
+struct EditorSettingsInfo
+{
+  struct MenuPosInfo headline;
+
+  struct XY element_graphic;
+  struct XY element_name;
+
+  struct EditorTabsInfo tabs;
+};
+
+struct EditorGadgetInfo
+{
+  int normal_spacing;
+  int small_spacing;
+  int tiny_spacing;
+  int line_spacing;
+  int text_spacing;
+  int tab_spacing;
+
+  struct Rect separator_line;
+};
+
+struct EditorButtonInfo
+{
+  struct XY prev_level;
+  struct XY next_level;
+
+  struct XY properties;
+
+  struct XY draw_single;
+  struct XY draw_connected;
+  struct XY draw_line;
+  struct XY draw_arc;
+  struct XY draw_rectangle;
+  struct XY draw_filled_box;
+  struct XY rotate_up;
+  struct XY draw_text;
+  struct XY flood_fill;
+  struct XY rotate_left;
+  struct XY zoom_level;
+  struct XY rotate_right;
+  struct XY draw_random;
+  struct XY grab_brush;
+  struct XY rotate_down;
+  struct XY pick_element;
+
+  struct XY ce_copy_from;
+  struct XY ce_copy_to;
+  struct XY ce_swap;
+  struct XY ce_copy;
+  struct XY ce_paste;
+
+  struct XY undo;
+  struct XY conf;
+  struct XY save;
+  struct XY clear;
+  struct XY test;
+  struct XY exit;
+};
+
+struct EditorInputInfo
+{
+  struct XY level_number;
+};
+
+struct EditorPaletteElementInfo
+{
+  int x, y;
+  int tile_size;
+};
+
 struct EditorPaletteInfo
 {
   int x, y;
   int cols, rows;
+  int tile_size;
+
+  struct EditorPaletteElementInfo element_left;
+  struct EditorPaletteElementInfo element_middle;
+  struct EditorPaletteElementInfo element_right;
+};
 
-  struct XY element_left;
-  struct XY element_middle;
-  struct XY element_right;
+struct EditorDrawingAreaInfo
+{
+  int tile_size;
 };
 
 struct EditorInfo
 {
+  struct EditorSettingsInfo settings;
+  struct EditorGadgetInfo gadget;
+  struct EditorButtonInfo button;
+  struct EditorInputInfo input;
   struct EditorPaletteInfo palette;
+  struct EditorDrawingAreaInfo drawingarea;
 };
 
 struct ViewportInfo
 {
-  struct RectWithBorder window;
+  struct RectWithBorder window[NUM_SPECIAL_GFX_ARGS];
   struct RectWithBorder playfield[NUM_SPECIAL_GFX_ARGS];
   struct RectWithBorder door_1[NUM_SPECIAL_GFX_ARGS];
   struct RectWithBorder door_2[NUM_SPECIAL_GFX_ARGS];
@@ -2515,6 +2497,7 @@ struct LevelInfo
   boolean use_time_orb_bug;    /* for compatibility with old levels */
   boolean instant_relocation;  /* no visual delay when relocating player */
   boolean shifted_relocation;  /* no level centering when relocating player */
+  boolean lazy_relocation;     /* only redraw off-screen player relocation */
   boolean can_pass_to_walkable;        /* player can pass to empty or walkable tile */
   boolean grow_into_diggable;  /* amoeba can grow into anything diggable */
   boolean auto_exit_sokoban;   /* automatically finish solved Sokoban levels */
@@ -2544,6 +2527,7 @@ struct GlobalInfo
   char *autoplay_leveldir;
   int autoplay_level[MAX_TAPES_PER_SET];
   boolean autoplay_all;
+  boolean autoplay_mode;
 
   char *convert_leveldir;
   int convert_level_nr;
@@ -2553,15 +2537,9 @@ struct GlobalInfo
   int num_toons;
 
   float frames_per_second;
-  boolean fps_slowdown;
-  int fps_slowdown_factor;
 
   /* global values for fading screens and masking borders */
   int border_status;
-#if 0
-  int fading_status;
-  int fading_type;
-#endif
 
   boolean use_envelope_request;
 };
@@ -2767,7 +2745,9 @@ struct FontInfo
 
 struct GraphicInfo
 {
-  Bitmap *bitmap;
+  Bitmap **bitmaps;            /* bitmaps in all required sizes */
+  Bitmap *bitmap;              /* bitmap in default size */
+
   int src_image_width;         /* scaled bitmap size, but w/o small images */
   int src_image_height;                /* scaled bitmap size, but w/o small images */
 
@@ -2901,17 +2881,14 @@ extern Bitmap                  *bitmap_db_store;
 extern Bitmap                 *bitmap_db_cross;
 extern Bitmap                 *bitmap_db_field;
 extern Bitmap                 *bitmap_db_panel;
-#if 0
-extern Bitmap                 *bitmap_db_door;
-#endif
 extern Bitmap                 *bitmap_db_door_1;
 extern Bitmap                 *bitmap_db_door_2;
 extern Bitmap                 *bitmap_db_toons;
-extern Pixmap                  tile_clipmask[];
 extern DrawBuffer             *fieldbuffer;
 extern DrawBuffer             *drawto_field;
 
 extern int                     game_status;
+extern boolean                 game_status_last_screen;
 extern boolean                 level_editor_test_game;
 extern boolean                 network_playing;
 
@@ -2922,17 +2899,6 @@ extern SDL_Thread               *server_thread;
 
 extern int                     key_joystick_mapping;
 
-#if 1
-#if NEW_SCROLL
-extern boolean                 redraw[2 + MAX_LEV_FIELDX + 2][2 + MAX_LEV_FIELDY + 2];
-#else
-extern boolean                 redraw[MAX_LEV_FIELDX + 2][MAX_LEV_FIELDY + 2];
-#endif
-#else
-extern boolean                 redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
-#endif
-extern int                     redraw_x1, redraw_y1;
-
 extern short                   Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -2990,6 +2956,9 @@ extern int                        VXSIZE, VYSIZE;
 extern int                     EXSIZE, EYSIZE;
 extern int                     TILESIZE_VAR;
 
+extern int                     FADE_SX, FADE_SY;
+extern int                     FADE_SXSIZE, FADE_SYSIZE;
+
 extern int                     FX, FY;
 extern int                     ScrollStepSize;
 extern int                     ScreenMovDir, ScreenMovPos, ScreenGfxPos;