separated graphic and control definitions for global animations
[rocksndiamonds.git] / src / main.h
index faf24a99a057b426d5411c8f517246d260bfabfa..3e58df38a601d58203f83bc32086445f0699e0e8 100644 (file)
 
 #define IS_SPECIAL_GFX_ARG(a)  ((a) >= 0 && (a) < NUM_SPECIAL_GFX_ARGS)
 
+#define IS_GLOBAL_ANIM_PART(a) ((a) >= 0 && (a) < NUM_GLOBAL_ANIM_PARTS)
+
 #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 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 ACTION_PAGE_30                 81
 #define ACTION_PAGE_31                 82
 #define ACTION_PAGE_32                 83
-#define ACTION_OTHER                   84
-
-#define NUM_ACTIONS                    85
+#define ACTION_PART_1                  84
+#define ACTION_PART_2                  85
+#define ACTION_PART_3                  86
+#define ACTION_PART_4                  87
+#define ACTION_PART_5                  88
+#define ACTION_PART_6                  89
+#define ACTION_PART_7                  90
+#define ACTION_PART_8                  91
+#define ACTION_OTHER                   92
+
+#define NUM_ACTIONS                    93
 
 #define ACTION_BORING_LAST             ACTION_BORING_10
 #define ACTION_SLEEPING_LAST           ACTION_SLEEPING_3
 #define GFX_ARG_DIGGABLE_LIKE          23
 #define GFX_ARG_BORDER_SIZE            24
 #define GFX_ARG_STEP_OFFSET            25
-#define GFX_ARG_STEP_DELAY             26
-#define GFX_ARG_DIRECTION              27
-#define GFX_ARG_POSITION               28
-#define GFX_ARG_DRAW_XOFFSET           29
-#define GFX_ARG_DRAW_YOFFSET           30
-#define GFX_ARG_DRAW_MASKED            31
-#define GFX_ARG_ANIM_DELAY_FIXED       32
-#define GFX_ARG_ANIM_DELAY_RANDOM      33
-#define GFX_ARG_POST_DELAY_FIXED       34
-#define GFX_ARG_POST_DELAY_RANDOM      35
-#define GFX_ARG_NAME                   36
-#define GFX_ARG_SCALE_UP_FACTOR                37
-#define GFX_ARG_TILE_SIZE              38
-#define GFX_ARG_CLONE_FROM             39
-#define GFX_ARG_FADE_MODE              40
-#define GFX_ARG_FADE_DELAY             41
-#define GFX_ARG_POST_DELAY             42
-#define GFX_ARG_AUTO_DELAY             43
-#define GFX_ARG_ALIGN                  44
-#define GFX_ARG_VALIGN                 45
-#define GFX_ARG_SORT_PRIORITY          46
-#define GFX_ARG_CLASS                  47
-#define GFX_ARG_STYLE                  48
-#define GFX_ARG_ACTIVE_XOFFSET         49
-#define GFX_ARG_ACTIVE_YOFFSET         50
-#define GFX_ARG_PRESSED_XOFFSET                51
-#define GFX_ARG_PRESSED_YOFFSET                52
-
-#define NUM_GFX_ARGS                   53
+#define GFX_ARG_STEP_XOFFSET           26
+#define GFX_ARG_STEP_YOFFSET           27
+#define GFX_ARG_STEP_FRAMES            28
+#define GFX_ARG_STEP_DELAY             29
+#define GFX_ARG_DIRECTION              30
+#define GFX_ARG_POSITION               31
+#define GFX_ARG_DRAW_XOFFSET           32
+#define GFX_ARG_DRAW_YOFFSET           33
+#define GFX_ARG_DRAW_MASKED            34
+#define GFX_ARG_ANIM_DELAY_FIXED       35
+#define GFX_ARG_ANIM_DELAY_RANDOM      36
+#define GFX_ARG_POST_DELAY_FIXED       37
+#define GFX_ARG_POST_DELAY_RANDOM      38
+#define GFX_ARG_NAME                   39
+#define GFX_ARG_SCALE_UP_FACTOR                40
+#define GFX_ARG_TILE_SIZE              41
+#define GFX_ARG_CLONE_FROM             42
+#define GFX_ARG_FADE_MODE              43
+#define GFX_ARG_FADE_DELAY             44
+#define GFX_ARG_POST_DELAY             45
+#define GFX_ARG_AUTO_DELAY             46
+#define GFX_ARG_ALIGN                  47
+#define GFX_ARG_VALIGN                 48
+#define GFX_ARG_SORT_PRIORITY          49
+#define GFX_ARG_CLASS                  50
+#define GFX_ARG_STYLE                  51
+#define GFX_ARG_ACTIVE_XOFFSET         52
+#define GFX_ARG_ACTIVE_YOFFSET         53
+#define GFX_ARG_PRESSED_XOFFSET                54
+#define GFX_ARG_PRESSED_YOFFSET                55
+
+#define NUM_GFX_ARGS                   56
 
 
 /* values for sound configuration suffixes */
 #define NUM_FONTS                      38
 #define NUM_INITIAL_FONTS              4
 
+/* values for global animation configuration (must match those from main.c) */
+#define NUM_GLOBAL_ANIMS               8
+#define NUM_GLOBAL_ANIM_PARTS          8
+#define NUM_GLOBAL_ANIM_PARTS_ALL      (NUM_GLOBAL_ANIM_PARTS + 1)
+#define NUM_GLOBAL_ANIM_TOKENS         (2 * NUM_GLOBAL_ANIMS)
+
+#define GLOBAL_ANIM_ID_GRAPHIC_FIRST   0
+#define GLOBAL_ANIM_ID_GRAPHIC_LAST    7
+#define GLOBAL_ANIM_ID_CONTROL_FIRST   (NUM_GLOBAL_ANIMS + 0)
+#define GLOBAL_ANIM_ID_CONTROL_LAST    (NUM_GLOBAL_ANIMS + 7)
+
+#define GLOBAL_ANIM_ID_PART_FIRST      0
+#define GLOBAL_ANIM_ID_PART_LAST       7
+#define GLOBAL_ANIM_ID_PART_BASE       8
+
 /* values for game_status (must match special image configuration suffixes) */
 #define GAME_MODE_DEFAULT              0
 #define GAME_MODE_LOADING              1
 
 #define NUM_ENGINE_TYPES               4
 
+/* values for automatically playing tapes */
+#define AUTOPLAY_TEST                  0
+#define AUTOPLAY_PLAY                  1
+#define AUTOPLAY_FFWD                  2
+
 
 struct BorderInfo
 {
@@ -2172,7 +2204,7 @@ struct MenuInfo
   struct TitleFadingInfo leave_menu;
   struct TitleFadingInfo enter_screen[NUM_SPECIAL_GFX_ARGS];
   struct TitleFadingInfo leave_screen[NUM_SPECIAL_GFX_ARGS];
-  struct TitleFadingInfo next_screen;
+  struct TitleFadingInfo next_screen[NUM_SPECIAL_GFX_ARGS];
 
   int sound[NUM_SPECIAL_GFX_ARGS];
   int music[NUM_SPECIAL_GFX_ARGS];
@@ -2322,6 +2354,11 @@ struct EditorPaletteInfo
   struct EditorPaletteElementInfo element_right;
 };
 
+struct EditorDrawingAreaInfo
+{
+  int tile_size;
+};
+
 struct EditorInfo
 {
   struct EditorSettingsInfo settings;
@@ -2329,11 +2366,12 @@ struct EditorInfo
   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];
@@ -2487,6 +2525,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 */
@@ -2516,6 +2555,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;
@@ -2731,6 +2771,14 @@ struct FontInfo
                                /* internal bitmap ID for special graphics */
 };
 
+struct GlobalAnimInfo
+{
+  char *token_name;            /* global animation token in config files */
+
+  /* global animation graphic and control definitions */
+  int graphic[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS];
+};
+
 struct GraphicInfo
 {
   Bitmap **bitmaps;            /* bitmaps in all required sizes */
@@ -2772,7 +2820,12 @@ struct GraphicInfo
   int post_delay_random;       /* next intervall (bored animation only) */
 
   int step_offset;             /* optional step offset of toon animations */
+  int step_xoffset;            /* optional step offset of toon animations */
+  int step_yoffset;            /* optional step offset of toon animations */
+  int step_frames;             /* optional step frames of toon animations */
   int step_delay;              /* optional step delay of toon animations */
+  int direction;               /* optional move direction of toon animations */
+  int position;                        /* optional draw position of toon animations */
 
   int draw_xoffset;            /* optional offset for drawing font chars */
   int draw_yoffset;            /* optional offset for drawing font chars */
@@ -2876,6 +2929,7 @@ 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;
 
@@ -2977,9 +3031,17 @@ extern struct TitleFadingInfo    fading;
 extern struct TitleFadingInfo  fading_none;
 extern struct TitleFadingInfo  title_initial_default;
 extern struct TitleFadingInfo  title_default;
+extern struct TitleMessageInfo titlescreen_initial_default;
+extern struct TitleMessageInfo titlescreen_initial_first[];
+extern struct TitleMessageInfo titlescreen_initial[];
+extern struct TitleMessageInfo titlescreen_default;
+extern struct TitleMessageInfo titlescreen_first[];
+extern struct TitleMessageInfo titlescreen[];
 extern struct TitleMessageInfo titlemessage_initial_default;
+extern struct TitleMessageInfo titlemessage_initial_first[];
 extern struct TitleMessageInfo titlemessage_initial[];
 extern struct TitleMessageInfo titlemessage_default;
+extern struct TitleMessageInfo titlemessage_first[];
 extern struct TitleMessageInfo titlemessage[];
 extern struct TitleMessageInfo readme;
 extern struct InitInfo         init, init_last;
@@ -2995,6 +3057,7 @@ extern struct ElementDirectionInfo element_direction_info[];
 extern struct SpecialSuffixInfo special_suffix_info[];
 extern struct TokenIntPtrInfo  image_config_vars[];
 extern struct FontInfo         font_info[];
+extern struct GlobalAnimInfo   global_anim_info[];
 extern struct MusicPrefixInfo  music_prefix_info[];
 extern struct GraphicInfo      *graphic_info;
 extern struct SoundInfo               *sound_info;