#define MB_RIGHTBUTTON 3
-/* values for basic move directions (effective at runtime) */
+/* values for move directions */
#define MV_BIT_LEFT 0
#define MV_BIT_RIGHT 1
#define MV_BIT_UP 2
#define NUM_DIRECTIONS 4
-/* values for special "button" bitmasks (effective at runtime) */
+/* values for special "button" bitmasks */
#define BUTTON_1 4
#define BUTTON_2 5
-/* values for special move patterns (stored in level files) */
-#define MV_BIT_TOWARDS_PLAYER 6
-#define MV_BIT_AWAY_FROM_PLAYER 7
-#define MV_BIT_ALONG_LEFT_SIDE 8
-#define MV_BIT_ALONG_RIGHT_SIDE 9
-#define MV_BIT_TURNING_LEFT 10
-#define MV_BIT_TURNING_RIGHT 11
-
-/* values for move direction/pattern and special "button" key bitmasks */
+/* values for move direction and special "button" key bitmasks */
#define MV_NO_MOVING 0
#define MV_LEFT (1 << MV_BIT_LEFT)
#define MV_RIGHT (1 << MV_BIT_RIGHT)
(x) == MV_RIGHT ? MV_BIT_RIGHT : \
(x) == MV_UP ? MV_BIT_UP : MV_BIT_DOWN)
-#define MV_HORIZONTAL (MV_LEFT | MV_RIGHT)
-#define MV_VERTICAL (MV_UP | MV_DOWN)
-#define MV_ALL_DIRECTIONS (MV_HORIZONTAL | MV_VERTICAL)
-#define MV_ANY_DIRECTION (MV_ALL_DIRECTIONS)
-#define MV_TOWARDS_PLAYER (1 << MV_BIT_TOWARDS_PLAYER)
-#define MV_AWAY_FROM_PLAYER (1 << MV_BIT_AWAY_FROM_PLAYER)
-#define MV_ALONG_LEFT_SIDE (1 << MV_BIT_ALONG_LEFT_SIDE)
-#define MV_ALONG_RIGHT_SIDE (1 << MV_BIT_ALONG_RIGHT_SIDE)
-#define MV_TURNING_LEFT (1 << MV_BIT_TURNING_LEFT)
-#define MV_TURNING_RIGHT (1 << MV_BIT_TURNING_RIGHT)
-
/* values for animation mode (frame order and direction) */
#define ANIM_NONE 0
#define DOCS_DIRECTORY "docs"
#if !defined(PLATFORM_MSDOS)
-#define GRAPHICS_SUBDIR "gfx_classic"
-#define SOUNDS_SUBDIR "snd_classic"
-#define MUSIC_SUBDIR "mus_classic"
+#define GFX_CLASSIC_SUBDIR "gfx_classic"
+#define SND_CLASSIC_SUBDIR "snd_classic"
+#define MUS_CLASSIC_SUBDIR "mus_classic"
#else
-#define GRAPHICS_SUBDIR "gfx_orig"
-#define SOUNDS_SUBDIR "snd_orig"
-#define MUSIC_SUBDIR "mus_orig"
+#define GFX_CLASSIC_SUBDIR "gfx_orig"
+#define SND_CLASSIC_SUBDIR "snd_orig"
+#define MUS_CLASSIC_SUBDIR "mus_orig"
#endif
+
/* areas in bitmap PIX_DOOR */
/* meaning in PIX_DB_DOOR: (3 PAGEs)
PAGEX1: 1. buffer for DOOR_1
#define DOOR_GFX_PAGEY1 (0)
#define DOOR_GFX_PAGEY2 (gfx.dysize)
-/* functions for version handling */
+
+/* macros for version handling */
#define VERSION_IDENT(x,y,z) ((x) * 1000000 + (y) * 10000 + (z) * 100)
#define RELEASE_IDENT(x,y,z,r) (VERSION_IDENT(x,y,z) + (r))
#define VERSION_MAJOR(x) ((x) / 1000000)
#define VERSION_PATCH(x) (((x) % 10000) / 100)
#define VERSION_RELEASE(x) ((x) % 100)
-/* functions for parent/child process identification */
+
+/* macros for parent/child process identification */
#if defined(PLATFORM_UNIX)
#define IS_PARENT_PROCESS() (audio.mixer_pid != getpid())
#define IS_CHILD_PROCESS() (audio.mixer_pid == getpid())
#define HAS_CHILD_PROCESS() FALSE
#endif
+
+/* values for artwork type */
+#define ARTWORK_TYPE_GRAPHICS 0
+#define ARTWORK_TYPE_SOUNDS 1
+#define ARTWORK_TYPE_MUSIC 2
+
+#define NUM_ARTWORK_TYPES 3
+
+
+/* values for tree type (chosen to match artwork type) */
+#define TREE_TYPE_UNDEFINED -1
+#define TREE_TYPE_GRAPHICS_DIR ARTWORK_TYPE_GRAPHICS
+#define TREE_TYPE_SOUNDS_DIR ARTWORK_TYPE_SOUNDS
+#define TREE_TYPE_MUSIC_DIR ARTWORK_TYPE_MUSIC
+#define TREE_TYPE_LEVEL_DIR 3
+
+#define NUM_TREE_TYPES 4
+
+
+/* values for artwork handling */
+#define LEVELDIR_ARTWORK_SET(leveldir, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ (leveldir)->graphics_set : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ (leveldir)->sounds_set : \
+ (leveldir)->music_set)
+
+#define LEVELDIR_ARTWORK_PATH(leveldir, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ (leveldir)->graphics_path : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ (leveldir)->sounds_path : \
+ (leveldir)->music_path)
+
+#define SETUP_ARTWORK_SET(setup, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ (setup).graphics_set : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ (setup).sounds_set : \
+ (setup).music_set)
+
+#define SETUP_OVERRIDE_ARTWORK(setup, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ (setup).override_level_graphics : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ (setup).override_level_sounds : \
+ (setup).override_level_music)
+
+#define ARTWORK_FIRST_NODE(artwork, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ (artwork).gfx_first : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ (artwork).snd_first : \
+ (artwork).mus_first)
+
+#define ARTWORK_CURRENT_IDENTIFIER(artwork, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ (artwork).gfx_current_identifier : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ (artwork).snd_current_identifier : \
+ (artwork).mus_current_identifier)
+
+
/* type definitions */
typedef int (*EventFilter)(const Event *);
boolean el_dx_boulderdash;
boolean el_chars;
boolean el_custom;
+ boolean el_custom_more;
};
struct SetupShortcutInfo
struct OptionInfo options;
};
-#define TREE_TYPE_GENERIC 0
-#define TREE_TYPE_GRAPHICS_DIR 1
-#define TREE_TYPE_SOUNDS_DIR 2
-#define TREE_TYPE_MUSIC_DIR 3
-#define TREE_TYPE_LEVEL_DIR 4
-
-#define ARTWORK_TYPE_GRAPHICS TREE_TYPE_GRAPHICS_DIR
-#define ARTWORK_TYPE_SOUNDS TREE_TYPE_SOUNDS_DIR
-#define ARTWORK_TYPE_MUSIC TREE_TYPE_MUSIC_DIR
-
struct TreeInfo
{
struct TreeInfo **node_top; /* topmost node in tree */
char *, char *, char *, int);
void InitExitFunction(void (*exit_function)(int));
-void InitPlatformDependantStuff(void);
-void ClosePlatformDependantStuff(void);
+void InitPlatformDependentStuff(void);
+void ClosePlatformDependentStuff(void);
void InitGfxFieldInfo(int, int, int, int, int, int, int, int, Bitmap *);
void InitGfxDoor1Info(int, int, int, int);