rnd-20070331-1-src
[rocksndiamonds.git] / src / main.h
index 28b4574afbb5522cafe243456039b76d8ae9d050..32d81de6e43e9fa9a91281378a63033b364718b3 100644 (file)
 #define MAX_LEV_FIELDX                 MAX_PLAYFIELD_WIDTH
 #define MAX_LEV_FIELDY                 MAX_PLAYFIELD_HEIGHT
 
+#define MIN_SCROLL_DELAY               0
+#define STD_SCROLL_DELAY               3
+#define MAX_SCROLL_DELAY               9
+
 #define SCREENX(a)                     ((a) - scroll_x)
 #define SCREENY(a)                     ((a) - scroll_y)
 #define LEVELX(a)                      ((a) + scroll_x)
 #define EP_BELT_ACTIVE                 47
 #define EP_BELT_SWITCH                 48
 #define EP_TUBE                                49
-#define EP_KEYGATE                     50
-#define EP_AMOEBOID                    51
-#define EP_AMOEBALIVE                  52
-#define EP_HAS_EDITOR_CONTENT          53
-#define EP_CAN_TURN_EACH_MOVE          54
-#define EP_CAN_GROW                    55
-#define EP_ACTIVE_BOMB                 56
-#define EP_INACTIVE                    57
+#define EP_ACID_POOL                   50
+#define EP_KEYGATE                     51
+#define EP_AMOEBOID                    52
+#define EP_AMOEBALIVE                  53
+#define EP_HAS_EDITOR_CONTENT          54
+#define EP_CAN_TURN_EACH_MOVE          55
+#define EP_CAN_GROW                    56
+#define EP_ACTIVE_BOMB                 57
+#define EP_INACTIVE                    58
 
 /* values for special configurable properties (depending on level settings) */
-#define EP_EM_SLIPPERY_WALL            58
+#define EP_EM_SLIPPERY_WALL            59
 
 /* values for special graphics properties (no effect on game engine) */
-#define EP_GFX_CRUMBLED                        59
+#define EP_GFX_CRUMBLED                        60
 
 /* values for derived properties (determined from properties above) */
-#define EP_ACCESSIBLE_OVER             60
-#define EP_ACCESSIBLE_INSIDE           61
-#define EP_ACCESSIBLE_UNDER            62
-#define EP_WALKABLE                    63
-#define EP_PASSABLE                    64
-#define EP_ACCESSIBLE                  65
-#define EP_COLLECTIBLE                 66
-#define EP_SNAPPABLE                   67
-#define EP_WALL                                68
-#define EP_SOLID_FOR_PUSHING           69
-#define EP_DRAGONFIRE_PROOF            70
-#define EP_EXPLOSION_PROOF             71
-#define EP_CAN_SMASH                   72
-#define EP_EXPLODES_3X3_OLD            73
-#define EP_CAN_EXPLODE_BY_FIRE         74
-#define EP_CAN_EXPLODE_SMASHED         75
-#define EP_CAN_EXPLODE_IMPACT          76
-#define EP_SP_PORT                     77
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   78
-#define EP_CAN_EXPLODE_BY_EXPLOSION    79
-#define EP_COULD_MOVE_INTO_ACID                80
-#define EP_MAYBE_DONT_COLLIDE_WITH     81
-#define EP_CAN_BE_CLONED_BY_ANDROID    82
+#define EP_ACCESSIBLE_OVER             61
+#define EP_ACCESSIBLE_INSIDE           62
+#define EP_ACCESSIBLE_UNDER            63
+#define EP_WALKABLE                    64
+#define EP_PASSABLE                    65
+#define EP_ACCESSIBLE                  66
+#define EP_COLLECTIBLE                 67
+#define EP_SNAPPABLE                   68
+#define EP_WALL                                69
+#define EP_SOLID_FOR_PUSHING           70
+#define EP_DRAGONFIRE_PROOF            71
+#define EP_EXPLOSION_PROOF             72
+#define EP_CAN_SMASH                   73
+#define EP_EXPLODES_3X3_OLD            74
+#define EP_CAN_EXPLODE_BY_FIRE         75
+#define EP_CAN_EXPLODE_SMASHED         76
+#define EP_CAN_EXPLODE_IMPACT          77
+#define EP_SP_PORT                     78
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   79
+#define EP_CAN_EXPLODE_BY_EXPLOSION    80
+#define EP_COULD_MOVE_INTO_ACID                81
+#define EP_MAYBE_DONT_COLLIDE_WITH     82
+#define EP_CAN_BE_CLONED_BY_ANDROID    83
 
 /* values for internal purpose only (level editor) */
-#define EP_WALK_TO_OBJECT              83
-#define EP_DEADLY                      84
-#define EP_EDITOR_CASCADE              85
-#define EP_EDITOR_CASCADE_ACTIVE       86
-#define EP_EDITOR_CASCADE_INACTIVE     87
+#define EP_WALK_TO_OBJECT              84
+#define EP_DEADLY                      85
+#define EP_EDITOR_CASCADE              86
+#define EP_EDITOR_CASCADE_ACTIVE       87
+#define EP_EDITOR_CASCADE_INACTIVE     88
 
 /* values for internal purpose only (game engine) */
-#define EP_HAS_ACTION                  88
-#define EP_CAN_CHANGE_OR_HAS_ACTION    89
+#define EP_HAS_ACTION                  89
+#define EP_CAN_CHANGE_OR_HAS_ACTION    90
 
 /* values for internal purpose only (other) */
-#define EP_OBSOLETE                    90
+#define EP_OBSOLETE                    91
 
-#define NUM_ELEMENT_PROPERTIES         91
+#define NUM_ELEMENT_PROPERTIES         92
 
 #define NUM_EP_BITFIELDS               ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE_NR            0
 #define IS_BELT_ACTIVE(e)      HAS_PROPERTY(e, EP_BELT_ACTIVE)
 #define IS_BELT_SWITCH(e)      HAS_PROPERTY(e, EP_BELT_SWITCH)
 #define IS_TUBE(e)             HAS_PROPERTY(e, EP_TUBE)
+#define IS_ACID_POOL(e)                HAS_PROPERTY(e, EP_ACID_POOL)
 #define IS_KEYGATE(e)          HAS_PROPERTY(e, EP_KEYGATE)
 #define IS_AMOEBOID(e)         HAS_PROPERTY(e, EP_AMOEBOID)
 #define IS_AMOEBALIVE(e)       HAS_PROPERTY(e, EP_AMOEBALIVE)
                                 IS_EM_GATE_GRAY(e) ?  EM_GATE_GRAY_NR(e) :   \
                                 IS_EMC_GATE_GRAY(e) ? EMC_GATE_GRAY_NR(e) : 0)
 
+#define IS_ACID_POOL_OR_ACID(e)        (IS_ACID_POOL(e) || (e) == EL_ACID)
+
+#define IS_EMC_PILLAR(e)       ((e) >= EL_EMC_WALL_1 &&                \
+                                (e) <= EL_EMC_WALL_3)
+#define IS_SP_CHIP(e)          ((e) == EL_SP_CHIP_SINGLE ||            \
+                                (e) == EL_SP_CHIP_LEFT ||              \
+                                (e) == EL_SP_CHIP_RIGHT ||             \
+                                (e) == EL_SP_CHIP_TOP ||               \
+                                (e) == EL_SP_CHIP_BOTTOM)
+#define IS_SP_HARDWARE_BASE(e) ((e) == EL_SP_HARDWARE_BASE_1 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_2 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_3 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_4 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_5 ||        \
+                                (e) == EL_SP_HARDWARE_BASE_6)
+
+#define IS_DC_STEELWALL_2(e)   ((e) >= EL_DC_STEELWALL_2_LEFT &&       \
+                                (e) <= EL_DC_STEELWALL_2_SINGLE)
+
 #define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
                                 element_info[e].gfx_element : e)
 
 
 #define IS_LOOP_SOUND(s)       (sound_info[s].loop)
 
+#define IS_SPECIAL_GFX_ARG(a)  ((a) >= 0 && (a) < NUM_SPECIAL_GFX_ARGS)
+
 #define EL_CASCADE_ACTIVE(e)   (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 : (e))
 #define EL_CASCADE_INACTIVE(e) (IS_EDITOR_CASCADE_ACTIVE(e)   ? (e) - 1 : (e))
 #define EL_CASCADE_TOGGLE(e)   (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 :    \
 #define MAX_ELEMENT_NAME_LEN   32
 #define MAX_TAPES_PER_SET      1024
 #define MAX_SCORE_ENTRIES      100
-#define MAX_NUM_TITLE_SCREENS  5
+#define MAX_NUM_TITLE_IMAGES   5
+#define MAX_NUM_TITLE_MESSAGES 5
 
 #define MAX_NUM_AMOEBA         100
 
 
 /* values for special image configuration suffixes (must match game mode) */
 #define GFX_SPECIAL_ARG_DEFAULT                0
-#define GFX_SPECIAL_ARG_TITLE          1
-#define GFX_SPECIAL_ARG_MESSAGE                2
+#define GFX_SPECIAL_ARG_TITLE_INITIAL  1
+#define GFX_SPECIAL_ARG_TITLE          2
 #define GFX_SPECIAL_ARG_MAIN           3
 #define GFX_SPECIAL_ARG_LEVELS         4
 #define GFX_SPECIAL_ARG_SCORES         5
 #define GFX_SPECIAL_ARG_INFO_MUSIC     3
 #define GFX_SPECIAL_ARG_INFO_CREDITS   4
 #define GFX_SPECIAL_ARG_INFO_PROGRAM   5
-#define GFX_SPECIAL_ARG_INFO_LEVELSET  6
+#define GFX_SPECIAL_ARG_INFO_VERSION   6
+#define GFX_SPECIAL_ARG_INFO_LEVELSET  7
 
-#define NUM_SPECIAL_GFX_INFO_ARGS      7
+#define NUM_SPECIAL_GFX_INFO_ARGS      8
 
 
 /* values for image configuration suffixes */
 #define GFX_ARG_NAME                   36
 #define GFX_ARG_SCALE_UP_FACTOR                37
 #define GFX_ARG_CLONE_FROM             38
-#define GFX_ARG_FADE_DELAY             39
-#define GFX_ARG_POST_DELAY             40
-#define GFX_ARG_AUTO_DELAY             41
+#define GFX_ARG_FADE_MODE              39
+#define GFX_ARG_FADE_DELAY             40
+#define GFX_ARG_POST_DELAY             41
+#define GFX_ARG_AUTO_DELAY             42
+#define GFX_ARG_ALIGN                  43
+#define GFX_ARG_VALIGN                 44
+#define GFX_ARG_SORT_PRIORITY          45
 
-#define NUM_GFX_ARGS                   42
+#define NUM_GFX_ARGS                   46
 
 
 /* values for sound configuration suffixes */
 #define FONT_LEVEL_NUMBER              32
 #define FONT_TAPE_RECORDER             33
 #define FONT_GAME_INFO                 34
+#define FONT_INFO_ELEMENTS             35
+#define FONT_INFO_LEVELSET             36
 
-#define NUM_FONTS                      35
+#define NUM_FONTS                      37
 #define NUM_INITIAL_FONTS              4
 
 #define FONT_ACTIVE(f)                                                   \
 
 /* values for game_status (must match special image configuration suffixes) */
 #define GAME_MODE_DEFAULT              0
-#define GAME_MODE_TITLE                        1
-#define GAME_MODE_MESSAGE              2
+#define GAME_MODE_TITLE_INITIAL                1
+#define GAME_MODE_TITLE                        2
 #define GAME_MODE_MAIN                 3
 #define GAME_MODE_LEVELS               4
 #define GAME_MODE_SCORES               5
 
 struct BorderInfo
 {
-  int draw_masked[NUM_SPECIAL_GFX_ARGS];
-};
-
-struct MenuPosInfo
-{
-  int x, y;
-  int width, height;
-  int align;
+  boolean draw_masked[NUM_SPECIAL_GFX_ARGS];
 };
 
 struct MenuMainButtonInfo
@@ -1987,28 +2015,34 @@ struct MenuMainButtonInfo
 
 struct MenuMainTextInfo
 {
-  struct MenuPosInfo name;
-  struct MenuPosInfo levels;
-  struct MenuPosInfo scores;
-  struct MenuPosInfo editor;
-  struct MenuPosInfo info;
-  struct MenuPosInfo game;
-  struct MenuPosInfo setup;
-  struct MenuPosInfo quit;
-
-  struct MenuPosInfo current_level;
-  struct MenuPosInfo first_level;
-  struct MenuPosInfo last_level;
-  struct MenuPosInfo level_info_1;
-  struct MenuPosInfo level_info_2;
-  struct MenuPosInfo title_1;
-  struct MenuPosInfo title_2;
-  struct MenuPosInfo title_3;
+  struct TextPosInfo name;
+  struct TextPosInfo levels;
+  struct TextPosInfo scores;
+  struct TextPosInfo editor;
+  struct TextPosInfo info;
+  struct TextPosInfo game;
+  struct TextPosInfo setup;
+  struct TextPosInfo quit;
+
+  struct TextPosInfo first_level;
+  struct TextPosInfo last_level;
+  struct TextPosInfo level_number;
+  struct TextPosInfo level_info_1;
+  struct TextPosInfo level_info_2;
+  struct TextPosInfo level_name;
+  struct TextPosInfo level_author;
+  struct TextPosInfo level_year;
+  struct TextPosInfo level_imported_from;
+  struct TextPosInfo level_imported_by;
+  struct TextPosInfo level_tested_by;
+  struct TextPosInfo title_1;
+  struct TextPosInfo title_2;
+  struct TextPosInfo title_3;
 };
 
 struct MenuMainInputInfo
 {
-  struct MenuPosInfo name;
+  struct TextPosInfo name;
 };
 
 struct MenuMainInfo
@@ -2018,15 +2052,30 @@ struct MenuMainInfo
   struct MenuMainInputInfo input;
 };
 
-struct TitleInfo
+struct TitleFadingInfo
 {
+  int fade_mode;
   int fade_delay;
   int post_delay;
   int auto_delay;
+};
 
-  int fade_delay_final;
-  int post_delay_final;
-  int auto_delay_final;
+struct TitleMessageInfo
+{
+  int x, y;
+  int width, height;
+  int chars, lines;
+  int align, valign;
+  int font;
+  boolean autowrap;
+  boolean centered;
+  boolean parse_comments;
+  int sort_priority;
+
+  int fade_mode;
+  int fade_delay;
+  int post_delay;
+  int auto_delay;
 };
 
 struct MenuInfo
@@ -2040,9 +2089,9 @@ struct MenuInfo
 
   int list_size[NUM_SPECIAL_GFX_ARGS];
 
-  int fade_delay;
-  int post_delay;
-  int auto_delay;
+  struct TitleFadingInfo enter_menu;
+  struct TitleFadingInfo leave_menu;
+  struct TitleFadingInfo start_item;
 
   int sound[NUM_SPECIAL_GFX_ARGS];
   int music[NUM_SPECIAL_GFX_ARGS];
@@ -2062,7 +2111,7 @@ struct DoorInfo
 struct PreviewInfo
 {
   int x, y;
-  int align;
+  int align, valign;
   int xsize, ysize;
   int xoffset, yoffset;
   int tile_size;
@@ -2087,6 +2136,9 @@ struct EnvelopeInfo
   int xsize;
   int ysize;
 
+  boolean autowrap;
+  boolean centered;
+
   char text[MAX_ENVELOPE_TEXT_LEN + 1];
 };
 
@@ -2201,6 +2253,7 @@ struct LevelInfo
   boolean use_spring_bug;      /* for compatibility with old levels */
   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 can_pass_to_walkable;        /* player can pass to empty or walkable tile */
   boolean grow_into_diggable;  /* amoeba can grow into anything diggable */
 
@@ -2472,9 +2525,12 @@ struct GraphicInfo
 
   int draw_masked;             /* optional setting for drawing envelope gfx */
 
+  int fade_mode;               /* optional setting for drawing title screens */
   int fade_delay;              /* optional setting for drawing title screens */
   int post_delay;              /* optional setting for drawing title screens */
   int auto_delay;              /* optional setting for drawing title screens */
+  int align, valign;           /* optional setting for drawing title screens */
+  int sort_priority;           /* optional setting for drawing title screens */
 
   boolean use_image_size;      /* use image size as default width and height */
 
@@ -2637,7 +2693,15 @@ extern struct HiScore            highscore[];
 extern struct TapeInfo         tape;
 extern struct GlobalInfo       global;
 extern struct BorderInfo       border;
-extern struct TitleInfo                title;
+extern struct TitleFadingInfo  fading;
+extern struct TitleFadingInfo  fading_none;
+extern struct TitleFadingInfo  title_initial_default;
+extern struct TitleFadingInfo  title_default;
+extern struct TitleMessageInfo titlemessage_initial_default;
+extern struct TitleMessageInfo titlemessage_initial[];
+extern struct TitleMessageInfo titlemessage_default;
+extern struct TitleMessageInfo titlemessage[];
+extern struct TitleMessageInfo readme;
 extern struct MenuInfo         menu;
 extern struct DoorInfo         door_1, door_2;
 extern struct PreviewInfo      preview;