rnd-20021006-1-src
[rocksndiamonds.git] / src / main.h
index a6db091175f0cf7a12959d5f1b27f95ad2ffa87d..7b82f5e3a138adc4801cf5273e064a22b90fad14 100644 (file)
@@ -30,6 +30,9 @@
 #include "conf_gfx.h"
 #include "conf_snd.h"
 
+#define IMG_EMPTY      IMG_EMPTY_SPACE
+#define IMG_SP_EMPTY   IMG_SP_EMPTY_SPACE
+#define IMG_CHAR_START IMG_CHAR_SPACE
 
 #define WIN_XSIZE      672
 #define WIN_YSIZE      560
 #define EL_EM_KEY1_FILE                        119
 
 #define EL_CHAR_START                  120
-#define EL_CHAR_ASCII0                 (EL_CHAR_START-32)
-#define EL_CHAR_EXCLAM                 (EL_CHAR_ASCII0+33)
-#define EL_CHAR_QUOTEDBL               (EL_CHAR_ASCII0+34)
-#define EL_CHAR_NUMBERSIGN             (EL_CHAR_ASCII0+35)
-#define EL_CHAR_DOLLAR                 (EL_CHAR_ASCII0+36)
-#define EL_CHAR_PROCENT                        (EL_CHAR_ASCII0+37)
-#define EL_CHAR_AMPERSAND              (EL_CHAR_ASCII0+38)
-#define EL_CHAR_APOSTROPHE             (EL_CHAR_ASCII0+39)
-#define EL_CHAR_PARENLEFT              (EL_CHAR_ASCII0+40)
-#define EL_CHAR_PARENRIGHT             (EL_CHAR_ASCII0+41)
-#define EL_CHAR_ASTERISK               (EL_CHAR_ASCII0+42)
-#define EL_CHAR_PLUS                   (EL_CHAR_ASCII0+43)
-#define EL_CHAR_COMMA                  (EL_CHAR_ASCII0+44)
-#define EL_CHAR_MINUS                  (EL_CHAR_ASCII0+45)
-#define EL_CHAR_PERIOD                 (EL_CHAR_ASCII0+46)
-#define EL_CHAR_SLASH                  (EL_CHAR_ASCII0+47)
-#define EL_CHAR_0                      (EL_CHAR_ASCII0+48)
-#define EL_CHAR_9                      (EL_CHAR_ASCII0+57)
-#define EL_CHAR_COLON                  (EL_CHAR_ASCII0+58)
-#define EL_CHAR_SEMICOLON              (EL_CHAR_ASCII0+59)
-#define EL_CHAR_LESS                   (EL_CHAR_ASCII0+60)
-#define EL_CHAR_EQUAL                  (EL_CHAR_ASCII0+61)
-#define EL_CHAR_GREATER                        (EL_CHAR_ASCII0+62)
-#define EL_CHAR_QUESTION               (EL_CHAR_ASCII0+63)
-#define EL_CHAR_AT                     (EL_CHAR_ASCII0+64)
-#define EL_CHAR_A                      (EL_CHAR_ASCII0+65)
-#define EL_CHAR_Z                      (EL_CHAR_ASCII0+90)
-#define EL_CHAR_AE                     (EL_CHAR_ASCII0+91)
-#define EL_CHAR_OE                     (EL_CHAR_ASCII0+92)
-#define EL_CHAR_UE                     (EL_CHAR_ASCII0+93)
-#define EL_CHAR_COPYRIGHT              (EL_CHAR_ASCII0+94)
-#define EL_CHAR_END                    (EL_CHAR_START+79)
+#define EL_CHAR_ASCII0                 (EL_CHAR_START  - 32)
+#define EL_CHAR_EXCLAM                 (EL_CHAR_ASCII0 + 33)
+#define EL_CHAR_QUOTEDBL               (EL_CHAR_ASCII0 + 34)
+#define EL_CHAR_NUMBERSIGN             (EL_CHAR_ASCII0 + 35)
+#define EL_CHAR_DOLLAR                 (EL_CHAR_ASCII0 + 36)
+#define EL_CHAR_PROCENT                        (EL_CHAR_ASCII0 + 37)
+#define EL_CHAR_AMPERSAND              (EL_CHAR_ASCII0 + 38)
+#define EL_CHAR_APOSTROPHE             (EL_CHAR_ASCII0 + 39)
+#define EL_CHAR_PARENLEFT              (EL_CHAR_ASCII0 + 40)
+#define EL_CHAR_PARENRIGHT             (EL_CHAR_ASCII0 + 41)
+#define EL_CHAR_ASTERISK               (EL_CHAR_ASCII0 + 42)
+#define EL_CHAR_PLUS                   (EL_CHAR_ASCII0 + 43)
+#define EL_CHAR_COMMA                  (EL_CHAR_ASCII0 + 44)
+#define EL_CHAR_MINUS                  (EL_CHAR_ASCII0 + 45)
+#define EL_CHAR_PERIOD                 (EL_CHAR_ASCII0 + 46)
+#define EL_CHAR_SLASH                  (EL_CHAR_ASCII0 + 47)
+#define EL_CHAR_0                      (EL_CHAR_ASCII0 + 48)
+#define EL_CHAR_9                      (EL_CHAR_ASCII0 + 57)
+#define EL_CHAR_COLON                  (EL_CHAR_ASCII0 + 58)
+#define EL_CHAR_SEMICOLON              (EL_CHAR_ASCII0 + 59)
+#define EL_CHAR_LESS                   (EL_CHAR_ASCII0 + 60)
+#define EL_CHAR_EQUAL                  (EL_CHAR_ASCII0 + 61)
+#define EL_CHAR_GREATER                        (EL_CHAR_ASCII0 + 62)
+#define EL_CHAR_QUESTION               (EL_CHAR_ASCII0 + 63)
+#define EL_CHAR_AT                     (EL_CHAR_ASCII0 + 64)
+#define EL_CHAR_A                      (EL_CHAR_ASCII0 + 65)
+#define EL_CHAR_Z                      (EL_CHAR_ASCII0 + 90)
+#define EL_CHAR_AE                     (EL_CHAR_ASCII0 + 91)
+#define EL_CHAR_OE                     (EL_CHAR_ASCII0 + 92)
+#define EL_CHAR_UE                     (EL_CHAR_ASCII0 + 93)
+#define EL_CHAR_COPYRIGHT              (EL_CHAR_ASCII0 + 94)
+#define EL_CHAR_END                    (EL_CHAR_START  + 79)
 
 #define EL_CHAR(x)                     ((x) == 'Ä' ? EL_CHAR_AE : \
                                         (x) == 'Ö' ? EL_CHAR_OE : \
 #define EL_BD_AMOEBA_PART2                     (EL_FIRST_DUMMY + 14)
 #define EL_BD_AMOEBA_PART3                     (EL_FIRST_DUMMY + 15)
 #define EL_BD_AMOEBA_PART4                     (EL_FIRST_DUMMY + 16)
-#define EL_AMOEBA_PART1                                (EL_FIRST_DUMMY + 17)
-#define EL_AMOEBA_PART2                                (EL_FIRST_DUMMY + 18)
-#define EL_AMOEBA_PART3                                (EL_FIRST_DUMMY + 19)
-#define EL_AMOEBA_PART4                                (EL_FIRST_DUMMY + 20)
-#define EL_AMOEBA_DEAD_PART1                   (EL_FIRST_DUMMY + 21)
-#define EL_AMOEBA_DEAD_PART2                   (EL_FIRST_DUMMY + 22)
-#define EL_AMOEBA_DEAD_PART3                   (EL_FIRST_DUMMY + 23)
-#define EL_AMOEBA_DEAD_PART4                   (EL_FIRST_DUMMY + 24)
-#define EL_DYNABOMB_ACTIVE                     (EL_FIRST_DUMMY + 25)
-#define EL_SHIELD_NORMAL_ACTIVE                        (EL_FIRST_DUMMY + 26)
-#define EL_SHIELD_DEADLY_ACTIVE                        (EL_FIRST_DUMMY + 27)
-#define EL_ARROW_RED_LEFT                      (EL_FIRST_DUMMY + 28)
-#define EL_ARROW_RED_RIGHT                     (EL_FIRST_DUMMY + 29)
-#define EL_ARROW_RED_UP                                (EL_FIRST_DUMMY + 30)
-#define EL_ARROW_RED_DOWN                      (EL_FIRST_DUMMY + 31)
-
-#define MAX_NUM_ELEMENTS                       (EL_FIRST_DUMMY + 32)
+#define EL_AMOEBA_WET_PART1                    (EL_FIRST_DUMMY + 17)
+#define EL_AMOEBA_WET_PART2                    (EL_FIRST_DUMMY + 18)
+#define EL_AMOEBA_WET_PART3                    (EL_FIRST_DUMMY + 19)
+#define EL_AMOEBA_WET_PART4                    (EL_FIRST_DUMMY + 20)
+#define EL_AMOEBA_DRY_PART1                    (EL_FIRST_DUMMY + 21)
+#define EL_AMOEBA_DRY_PART2                    (EL_FIRST_DUMMY + 22)
+#define EL_AMOEBA_DRY_PART3                    (EL_FIRST_DUMMY + 23)
+#define EL_AMOEBA_DRY_PART4                    (EL_FIRST_DUMMY + 24)
+#define EL_AMOEBA_DEAD_PART1                   (EL_FIRST_DUMMY + 25)
+#define EL_AMOEBA_DEAD_PART2                   (EL_FIRST_DUMMY + 26)
+#define EL_AMOEBA_DEAD_PART3                   (EL_FIRST_DUMMY + 27)
+#define EL_AMOEBA_DEAD_PART4                   (EL_FIRST_DUMMY + 28)
+#define EL_DYNABOMB_ACTIVE                     (EL_FIRST_DUMMY + 29)
+#define EL_SHIELD_NORMAL_ACTIVE                        (EL_FIRST_DUMMY + 30)
+#define EL_SHIELD_DEADLY_ACTIVE                        (EL_FIRST_DUMMY + 31)
+#define EL_ARROW_RED_LEFT                      (EL_FIRST_DUMMY + 32)
+#define EL_ARROW_RED_RIGHT                     (EL_FIRST_DUMMY + 33)
+#define EL_ARROW_RED_UP                                (EL_FIRST_DUMMY + 34)
+#define EL_ARROW_RED_DOWN                      (EL_FIRST_DUMMY + 35)
+
+#define MAX_NUM_ELEMENTS                       (EL_FIRST_DUMMY + 36)
 
 
 /* game graphics:
 
 
 /* values for animation action types */
-#define GFX_ACTION_UNKNOWN             0
-#define GFX_ACTION_DEFAULT             1
-#define GFX_ACTION_WAITING             2
-#define GFX_ACTION_FALLING             3
-#define GFX_ACTION_MOVING              4
-#define GFX_ACTION_DIGGING             5
-#define GFX_ACTION_SNAPPING            6
-#define GFX_ACTION_COLLECTING          7
-#define GFX_ACTION_PUSHING             8
-#define GFX_ACTION_PASSING             9
-#define GFX_ACTION_IMPACT              10
-#define GFX_ACTION_CRACKING            11
-#define GFX_ACTION_ACTIVATING          12
-#define GFX_ACTION_EATING              13
-#define GFX_ACTION_ATTACKING           14
-#define GFX_ACTION_GROWING             15
-#define GFX_ACTION_OTHER               16
-
-#define NUM_GFX_ACTIONS                        17
+#define GFX_ACTION_DEFAULT             0
+#define GFX_ACTION_WAITING             1
+#define GFX_ACTION_FALLING             2
+#define GFX_ACTION_MOVING              3
+#define GFX_ACTION_DIGGING             4
+#define GFX_ACTION_SNAPPING            5
+#define GFX_ACTION_COLLECTING          6
+#define GFX_ACTION_PUSHING             7
+#define GFX_ACTION_PASSING             8
+#define GFX_ACTION_IMPACT              9
+#define GFX_ACTION_CRACKING            10
+#define GFX_ACTION_ACTIVATING          11
+#define GFX_ACTION_EATING              12
+#define GFX_ACTION_ATTACKING           13
+#define GFX_ACTION_GROWING             14
+#define GFX_ACTION_OTHER               15
+
+#define NUM_GFX_ACTIONS                        16
 #define NUM_GFX_ACTIONS_MAPPED         8
 
 
 /* values for image configuration suffixes */
 #define GFX_ARG_XPOS                           0
 #define GFX_ARG_YPOS                           1
-#define GFX_ARG_FRAMES                         2
-#define GFX_ARG_DELAY                          3
-#define GFX_ARG_PINGPONG                       4
-#define GFX_ARG_PINGPONG2                      5
-#define GFX_ARG_REVERSE                                6
-#define GFX_ARG_GLOBAL_SYNC                    7
-#define GFX_ARG_VERTICAL                       8
+#define GFX_ARG_OFFSET                         2
+#define GFX_ARG_VERTICAL                       3
+#define GFX_ARG_FRAMES                         4
+#define GFX_ARG_DELAY                          5
+#define GFX_ARG_MODE_LOOP                      6
+#define GFX_ARG_MODE_LINEAR                    7
+#define GFX_ARG_MODE_PINGPONG                  8
+#define GFX_ARG_MODE_PINGPONG2                 9
+#define GFX_ARG_MODE_REVERSE                   10
+#define GFX_ARG_GLOBAL_SYNC                    11
 
 /* values for sound configuration suffixes */
 /* (currently none) */
                                              PROGRAM_VERSION_MINOR, \
                                              PROGRAM_VERSION_PATCH)
 
-/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
-#define ANIM_NORMAL            0
-#define ANIM_REVERSE           (1 << 0)
-#define ANIM_PINGPONG          (1 << 1)
-#define ANIM_PINGPONG2         (1 << 2)
-
 /* values for game_emulation */
 #define EMU_NONE               0
 #define EMU_BOULDERDASH                1
@@ -1564,11 +1567,11 @@ struct ElementInfo
   char *sound_class_name;      /* classification for custom sound effects */
   char *editor_description;    /* short description for level editor */
 
+                               /* default graphics for several actions */
   int graphic[NUM_GFX_ACTIONS_MAPPED];
 
                                /* special graphics for left/right/up/down */
-  int direction_graphic[NUM_GFX_ACTIONS_MAPPED][4];
-  boolean has_direction_graphic[NUM_GFX_ACTIONS_MAPPED];
+  int direction_graphic[NUM_GFX_ACTIONS_MAPPED][NUM_MV_DIRECTIONS];
 };
 
 struct GraphicInfo
@@ -1580,12 +1583,12 @@ struct GraphicInfo
 struct NewGraphicInfo
 {
   Bitmap *bitmap;
-  int src_x, src_y;
+  int src_x, src_y;            /* derived from (tile sized) .xpos/.ypos */
+  int offset_x, offset_y;      /* x/y offset to next animation frame */
   int anim_frames;
-  int anim_delay;
+  int anim_delay;              /* important: delay of 1 means "no delay"! */
   int anim_mode;
   boolean anim_global_sync;
-  boolean anim_vertical;
 };
 
 extern GC              tile_clip_gc;
@@ -1612,6 +1615,7 @@ extern short              Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean         Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -1639,6 +1643,8 @@ extern int                SiebCount;
 
 extern boolean         network_player_action_received;
 
+extern int             graphics_action_mapping[];
+
 extern struct LevelInfo                level;
 extern struct PlayerInfo       stored_player[], *local_player;
 extern struct HiScore          highscore[];