#define PLAYER_NR_GFX(g,i) ((g) + i * (IMG_PLAYER2 - IMG_PLAYER1))
+#define ANIM_FRAMES(g) (graphic_info[g].anim_frames)
+#define ANIM_DELAY(g) (graphic_info[g].anim_delay)
+#define ANIM_MODE(g) (graphic_info[g].anim_mode)
+
+#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 IS_LOOP_SOUND(s) (sound_info[s].loop)
+
#if 0
#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)
+#define EL_AMOEBA_FULL_PART1 (EL_FIRST_DUMMY + 25)
+#define EL_AMOEBA_FULL_PART2 (EL_FIRST_DUMMY + 26)
+#define EL_AMOEBA_FULL_PART3 (EL_FIRST_DUMMY + 27)
+#define EL_AMOEBA_FULL_PART4 (EL_FIRST_DUMMY + 28)
+#define EL_AMOEBA_DEAD_PART1 (EL_FIRST_DUMMY + 29)
+#define EL_AMOEBA_DEAD_PART2 (EL_FIRST_DUMMY + 30)
+#define EL_AMOEBA_DEAD_PART3 (EL_FIRST_DUMMY + 31)
+#define EL_AMOEBA_DEAD_PART4 (EL_FIRST_DUMMY + 32)
+#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 33)
+#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 34)
+#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 35)
+#define EL_ARROW_RED_LEFT (EL_FIRST_DUMMY + 36)
+#define EL_ARROW_RED_RIGHT (EL_FIRST_DUMMY + 37)
+#define EL_ARROW_RED_UP (EL_FIRST_DUMMY + 38)
+#define EL_ARROW_RED_DOWN (EL_FIRST_DUMMY + 39)
+
+#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 40)
/* values for graphics/sounds action types */
char *token_name; /* element token prefix used in config files */
char *sound_class_name; /* classification for custom sound effects */
char *editor_description; /* short description for level editor */
+ char *custom_description; /* custom description for level editor */
int graphic[NUM_ACTIONS]; /* default graphics for several actions */
/* special graphics for left/right/up/down */
extern unsigned long Properties2[MAX_NUM_ELEMENTS];
extern int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern short GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
extern int lev_fieldx, lev_fieldy;
extern int scroll_x, scroll_y;
extern struct ElementInfo element_info[];
extern struct ElementActionInfo element_action_info[];
extern struct ElementDirectionInfo element_direction_info[];
-extern struct GraphicInfo graphic_info[];
-extern struct SoundInfo sound_info[];
+extern struct GraphicInfo *graphic_info;
+extern struct SoundInfo *sound_info;
extern struct ConfigInfo image_config[], sound_config[];
extern struct ConfigInfo image_config_suffix[], sound_config_suffix[];
-extern struct FileInfo *image_files, *sound_files;
#endif /* MAIN_H */