#define MIN_SCROLL_DELAY 0
#define STD_SCROLL_DELAY 3
-#define MAX_SCROLL_DELAY 9
+#define MAX_SCROLL_DELAY 8
#define SCREENX(a) ((a) - scroll_x)
#define SCREENY(a) ((a) - scroll_y)
#define IS_OBSOLETE(e) HAS_PROPERTY(e, EP_OBSOLETE)
/* special macros used in game engine */
+#define IS_FILE_ELEMENT(e) ((e) >= 0 && \
+ (e) <= NUM_FILE_ELEMENTS)
+
+#define IS_DRAWABLE_ELEMENT(e) ((e) >= 0 && \
+ (e) <= NUM_DRAWABLE_ELEMENTS)
+
+#define IS_RUNTIME_ELEMENT(e) ((e) >= 0 && \
+ (e) <= NUM_RUNTIME_ELEMENTS)
+
+#define IS_VALID_ELEMENT(e) ((e) >= 0 && \
+ (e) <= MAX_NUM_ELEMENTS)
+
#define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \
(e) <= EL_CUSTOM_END)
#define EM_KEY_NR(e) ((e) - EL_EM_KEY_1)
#define EMC_KEY_NR(e) ((e) - EL_EMC_KEY_5 + 4)
#define KEY_NR(e) (IS_RND_KEY(e) ? RND_KEY_NR(e) : \
- IS_EM_KEY(e) ? EM_KEY_NR(e) : \
+ IS_EM_KEY(e) ? EM_KEY_NR(e) : \
IS_EMC_KEY(e) ? EMC_KEY_NR(e) : 0)
#define IS_RND_GATE(e) ((e) >= EL_GATE_1 && \
(d) == MV_UP ? "MV_UP" : \
(d) == MV_DOWN ? "MV_DOWN" : "(various)")
+#define ELEMENT_ACTIVE(e) (ActiveElement[e])
+
+#define FONT_ACTIVE(f) (ActiveFont[f])
+
+
/* fundamental game speed values */
#define MICROLEVEL_SCROLL_DELAY 50 /* delay for scrolling micro level */
#define MICROLEVEL_LABEL_DELAY 250 /* delay for micro level label */
#define MAX_NUM_AMOEBA 100
-#define NUM_BELTS 4
-#define NUM_BELT_PARTS 3
#define NUM_ENVELOPES 4
#define MIN_ENVELOPE_XSIZE 1
#define MIN_ENVELOPE_YSIZE 1
#define EL_EMC_DRIPPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 70)
#define EL_EMC_SPRING_BUMPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 71)
+#define NUM_DRAWABLE_ELEMENTS (EL_FIRST_RUNTIME_REAL + 72)
+
/* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 72)
+#define EL_FIRST_RUNTIME_UNREAL (NUM_DRAWABLE_ELEMENTS)
#define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0)
#define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1)
#define GFX_SPECIAL_ARG_SETUP 8
#define GFX_SPECIAL_ARG_PLAYING 9
#define GFX_SPECIAL_ARG_DOOR 10
-#define GFX_SPECIAL_ARG_PREVIEW 11
-#define GFX_SPECIAL_ARG_CRUMBLED 12
+#define GFX_SPECIAL_ARG_PANEL 11
+#define GFX_SPECIAL_ARG_PREVIEW 12
+#define GFX_SPECIAL_ARG_CRUMBLED 13
-#define NUM_SPECIAL_GFX_ARGS 13
+#define NUM_SPECIAL_GFX_ARGS 14
/* these additional definitions are currently only used for draw offsets */
#define GFX_SPECIAL_ARG_INFO_MAIN 0
#define NUM_FONTS 37
#define NUM_INITIAL_FONTS 4
+#if 0
#define FONT_ACTIVE(f) \
((f) == FONT_MENU_1 ? FONT_MENU_1_ACTIVE : \
(f) == FONT_MENU_2 ? FONT_MENU_2_ACTIVE : \
(f) == FONT_INPUT_2 ? FONT_INPUT_2_ACTIVE : \
(f) == FONT_LEVEL_NUMBER ? FONT_LEVEL_NUMBER_ACTIVE : \
(f))
-
+#endif
/* values for game_status (must match special image configuration suffixes) */
#define GAME_MODE_DEFAULT 0
#define GAME_MODE_SETUP 8
#define GAME_MODE_PLAYING 9
#define GAME_MODE_PSEUDO_DOOR 10
-#define GAME_MODE_PSEUDO_PREVIEW 11
-#define GAME_MODE_PSEUDO_CRUMBLED 12
+#define GAME_MODE_PSEUDO_PANEL 11
+#define GAME_MODE_PSEUDO_PREVIEW 12
+#define GAME_MODE_PSEUDO_CRUMBLED 13
/* there are no special config file suffixes for these modes */
-#define GAME_MODE_PSEUDO_TYPENAME 13
-#define GAME_MODE_QUIT 14
+#define GAME_MODE_PSEUDO_TYPENAME 14
+#define GAME_MODE_QUIT 15
/* special definitions currently only used for custom artwork configuration */
#define MUSIC_PREFIX_BACKGROUND 0
struct TitleFadingInfo enter_menu;
struct TitleFadingInfo leave_menu;
- struct TitleFadingInfo start_item;
+ struct TitleFadingInfo enter_screen[NUM_SPECIAL_GFX_ARGS];
+ struct TitleFadingInfo leave_screen[NUM_SPECIAL_GFX_ARGS];
int sound[NUM_SPECIAL_GFX_ARGS];
int music[NUM_SPECIAL_GFX_ARGS];
extern int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
extern int GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern int ActiveElement[MAX_NUM_ELEMENTS];
+extern int ActiveFont[NUM_FONTS];
+
extern int lev_fieldx, lev_fieldy;
extern int scroll_x, scroll_y;