#include "conf_gfx.h"
#include "conf_snd.h"
+#define IMG_EMPTY IMG_EMPTY_SPACE
+#define IMG_SP_EMPTY IMG_SP_EMPTY_SPACE
#define WIN_XSIZE 672
#define WIN_YSIZE 560
#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
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][NUM_MV_DIRECTIONS];
- boolean has_direction_graphic[NUM_GFX_ACTIONS_MAPPED];
};
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;
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];