#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
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
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];
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[];