#include "conf_e2g.c" /* include auto-generated data structure definitions */
#include "conf_esg.c" /* include auto-generated data structure definitions */
+#include "conf_e2s.c" /* include auto-generated data structure definitions */
+#include "conf_fnt.c" /* include auto-generated data structure definitions */
+#define CONFIG_TOKEN_FONT_INITIAL "font.initial"
-static Bitmap *bitmap_font_initial = NULL;
+struct FontBitmapInfo font_initial[NUM_INITIAL_FONTS];
static void InitGlobal();
static void InitSetup();
static void InitGfx();
static void InitGfxBackground();
static void InitGadgets();
+static void InitFontGraphicInfo();
static void InitElementSmallImages();
static void InitElementGraphicInfo();
static void InitElementSpecialGraphicInfo();
return;
}
+ game_status = MAINMENU;
+
DrawMainMenu();
InitNetworkServer();
LoadArtworkInfo();
}
+static char *get_element_class_token(int element)
+{
+ char *element_class_name = element_info[element].class_name;
+ char *element_class_token = checked_malloc(strlen(element_class_name) + 3);
+
+ sprintf(element_class_token, "[%s]", element_class_name);
+
+ return element_class_token;
+}
+
static void InitArtworkConfig()
{
- static char *element_prefix[MAX_NUM_ELEMENTS + 1];
- static char *sound_class_prefix[MAX_NUM_ELEMENTS + 1];
- static char *action_suffix[NUM_ACTIONS + 1];
- static char *direction_suffix[NUM_DIRECTIONS + 1];
- static char *special_suffix[NUM_SPECIAL_GFX_ARGS + 1];
+ static char *image_id_prefix[MAX_NUM_ELEMENTS + NUM_FONTS + 1];
+ static char *sound_id_prefix[MAX_NUM_ELEMENTS + MAX_NUM_ELEMENTS + 1];
+ static char *action_id_suffix[NUM_ACTIONS + 1];
+ static char *direction_id_suffix[NUM_DIRECTIONS + 1];
+ static char *special_id_suffix[NUM_SPECIAL_GFX_ARGS + 1];
static char *dummy[1] = { NULL };
+ static char *ignore_image_tokens[] =
+ {
+ "name",
+ "sort_priority",
+ "global.num_toons",
+ NULL
+ };
+ static char *ignore_sound_tokens[] =
+ {
+ "name",
+ "sort_priority",
+ NULL
+ };
int i;
- for (i=0; i<MAX_NUM_ELEMENTS + 1; i++)
- element_prefix[i] = element_info[i].token_name;
- for (i=0; i<MAX_NUM_ELEMENTS + 1; i++)
- sound_class_prefix[i] = element_info[i].sound_class_name;
- for (i=0; i<NUM_ACTIONS + 1; i++)
- action_suffix[i] = element_action_info[i].suffix;
- for (i=0; i<NUM_DIRECTIONS + 1; i++)
- direction_suffix[i] = element_direction_info[i].suffix;
- for (i=0; i<NUM_SPECIAL_GFX_ARGS + 1; i++)
- special_suffix[i] = special_suffix_info[i].suffix;
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ image_id_prefix[i] = element_info[i].token_name;
+ for (i=0; i<NUM_FONTS; i++)
+ image_id_prefix[MAX_NUM_ELEMENTS + i] = font_info[i].token_name;
+ image_id_prefix[MAX_NUM_ELEMENTS + NUM_FONTS] = NULL;
+
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ sound_id_prefix[i] = element_info[i].token_name;
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ sound_id_prefix[MAX_NUM_ELEMENTS + i] = get_element_class_token(i);
+ sound_id_prefix[MAX_NUM_ELEMENTS + MAX_NUM_ELEMENTS] = NULL;
+
+ for (i=0; i<NUM_ACTIONS; i++)
+ action_id_suffix[i] = element_action_info[i].suffix;
+ action_id_suffix[NUM_ACTIONS] = NULL;
+
+ for (i=0; i<NUM_DIRECTIONS; i++)
+ direction_id_suffix[i] = element_direction_info[i].suffix;
+ direction_id_suffix[NUM_DIRECTIONS] = NULL;
+
+ for (i=0; i<NUM_SPECIAL_GFX_ARGS; i++)
+ special_id_suffix[i] = special_suffix_info[i].suffix;
+ special_id_suffix[NUM_SPECIAL_GFX_ARGS] = NULL;
InitImageList(image_config, NUM_IMAGE_FILES, image_config_suffix,
- element_prefix, action_suffix,direction_suffix,special_suffix);
+ image_id_prefix, action_id_suffix, direction_id_suffix,
+ special_id_suffix, ignore_image_tokens);
InitSoundList(sound_config, NUM_SOUND_FILES, sound_config_suffix,
- sound_class_prefix, action_suffix, dummy, dummy);
+ sound_id_prefix, action_id_suffix, dummy,
+ dummy, ignore_sound_tokens);
}
void InitLevelArtworkInfo()
InitGraphicInfo(); /* graphic properties mapping */
InitElementSmallImages(); /* create editor and preview images */
+ InitFontGraphicInfo(); /* initialize text drawing functions */
- InitFontInfo(bitmap_font_initial,
- graphic_info[IMG_FONT_BIG].bitmap,
- graphic_info[IMG_FONT_MEDIUM].bitmap,
- graphic_info[IMG_FONT_SMALL].bitmap,
- graphic_info[IMG_FONT_EM].bitmap);
-
- SetMainBackgroundImage(IMG_BACKGROUND_DEFAULT);
+ SetMainBackgroundImage(IMG_BACKGROUND);
SetDoorBackgroundImage(IMG_BACKGROUND_DOOR);
InitGadgets();
InitElementSoundInfo(); /* element game sound mapping */
InitSoundInfo(); /* sound properties mapping */
+#if 1
+ InitElementSoundInfo(); /* element game sound mapping */
+#endif
+
InitPlaySoundLevel(); /* internal game sound settings */
}
static void InitImages()
{
ReloadCustomImages();
- ReinitializeGraphics();
LoadCustomElementDescriptions();
LoadSpecialMenuDesignSettings();
+
+ ReinitializeGraphics();
}
static void InitSound()
void InitGfx()
{
- char *config_token_font_initial = "font.small";
char *filename_font_initial = NULL;
- int i;
+ Bitmap *bitmap_font_initial = NULL;
+ int i, j;
- /* determine filename for initial font (for displaying startup messages) */
+ /* determine settings for initial font (for displaying startup messages) */
for (i=0; image_config[i].token != NULL; i++)
- if (strcmp(image_config[i].token, config_token_font_initial) == 0)
- filename_font_initial = image_config[i].value;
+ {
+ for (j=0; j < NUM_INITIAL_FONTS; j++)
+ {
+ char font_token[128];
+ int len_font_token;
+
+ sprintf(font_token, "%s_%d", CONFIG_TOKEN_FONT_INITIAL, j + 1);
+ len_font_token = strlen(font_token);
+
+ if (strcmp(image_config[i].token, font_token) == 0)
+ filename_font_initial = image_config[i].value;
+ else if (strlen(image_config[i].token) > len_font_token &&
+ strncmp(image_config[i].token, font_token, len_font_token) == 0)
+ {
+ if (strcmp(&image_config[i].token[len_font_token], ".x") == 0)
+ font_initial[j].src_x = atoi(image_config[i].value);
+ else if (strcmp(&image_config[i].token[len_font_token], ".y") == 0)
+ font_initial[j].src_y = atoi(image_config[i].value);
+ else if (strcmp(&image_config[i].token[len_font_token], ".width") == 0)
+ font_initial[j].width = atoi(image_config[i].value);
+ else if (strcmp(&image_config[i].token[len_font_token],".height") == 0)
+ font_initial[j].height = atoi(image_config[i].value);
+ }
+ }
+ }
if (filename_font_initial == NULL) /* should not happen */
- Error(ERR_EXIT, "cannot get filename for '%s'", config_token_font_initial);
+ Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_FONT_INITIAL);
/* initialize screen properties */
InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE,
bitmap_font_initial = LoadCustomImage(filename_font_initial);
- InitFontInfo(bitmap_font_initial, NULL, NULL, NULL, NULL);
+ for (j=0; j < NUM_INITIAL_FONTS; j++)
+ font_initial[j].bitmap = bitmap_font_initial;
+
+ InitFontGraphicInfo();
DrawInitText(WINDOW_TITLE_STRING, 20, FC_YELLOW);
DrawInitText(WINDOW_SUBTITLE_STRING, 50, FC_RED);
ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE);
- ReloadCustomImages();
- ReinitializeGraphics();
-
- LoadCustomElementDescriptions();
- LoadSpecialMenuDesignSettings();
+ InitImages();
FreeTileClipmasks();
InitTileClipmasks();
/* initialize images from dynamic configuration */
for (i=0; i < num_property_mappings; i++)
- CreateImageWithSmallImages(property_mapping[i].artwork_index);
+ if (property_mapping[i].artwork_index < MAX_NUM_ELEMENTS)
+ CreateImageWithSmallImages(property_mapping[i].artwork_index);
+}
+
+static int getFontBitmapID(int font_nr)
+{
+ int special = -1;
+
+ if (game_status == MAINMENU || game_status == TYPENAME)
+ special = GFX_SPECIAL_ARG_MAIN;
+ else if (game_status == CHOOSELEVEL)
+ special = GFX_SPECIAL_ARG_LEVELS;
+ else if (game_status == HALLOFFAME)
+ special = GFX_SPECIAL_ARG_SCORES;
+ else if (game_status == LEVELED)
+ special = GFX_SPECIAL_ARG_EDITOR;
+ else if (game_status == HELPSCREEN)
+ special = GFX_SPECIAL_ARG_INFO;
+ else if (game_status == SETUP)
+ special = GFX_SPECIAL_ARG_SETUP;
+ else if (game_status == PSEUDO_PREVIEW)
+ special = GFX_SPECIAL_ARG_PREVIEW;
+ else if (game_status == PLAYING || game_status == PSEUDO_DOOR)
+ special = GFX_SPECIAL_ARG_DOOR;
+
+ if (special != -1)
+ return font_info[font_nr].special_bitmap_id[special];
+ else
+ return font_nr;
+}
+
+void InitFontGraphicInfo()
+{
+ static struct FontBitmapInfo *font_bitmap_info = NULL;
+ struct PropertyMapping *property_mapping = getImageListPropertyMapping();
+ int num_property_mappings = getImageListPropertyMappingSize();
+ int num_font_bitmaps = NUM_FONTS;
+ int i, j;
+
+ if (graphic_info == NULL) /* still at startup phase */
+ {
+ InitFontInfo(font_initial, NUM_INITIAL_FONTS, getFontBitmapID);
+
+ return;
+ }
+
+ /* ---------- initialize font graphic definitions ---------- */
+
+ /* always start with reliable default values (normal font graphics) */
+ for (i=0; i < NUM_FONTS; i++)
+ font_info[i].graphic = FONT_INITIAL_1;
+
+ /* initialize normal font/graphic mapping from static configuration */
+ for (i=0; font_to_graphic[i].font_nr > -1; i++)
+ {
+ int font_nr = font_to_graphic[i].font_nr;
+ int special = font_to_graphic[i].special;
+ int graphic = font_to_graphic[i].graphic;
+
+ if (special != -1)
+ continue;
+
+ font_info[font_nr].graphic = graphic;
+ }
+
+ /* always start with reliable default values (special font graphics) */
+ for (i=0; i < NUM_FONTS; i++)
+ {
+ for (j=0; j < NUM_SPECIAL_GFX_ARGS; j++)
+ {
+ font_info[i].special_graphic[j] = font_info[i].graphic;
+ font_info[i].special_bitmap_id[j] = i;
+ }
+ }
+
+ /* initialize special font/graphic mapping from static configuration */
+ for (i=0; font_to_graphic[i].font_nr > -1; i++)
+ {
+ int font_nr = font_to_graphic[i].font_nr;
+ int special = font_to_graphic[i].special;
+ int graphic = font_to_graphic[i].graphic;
+
+ if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS)
+ {
+ font_info[font_nr].special_graphic[special] = graphic;
+ font_info[font_nr].special_bitmap_id[special] = num_font_bitmaps;
+ num_font_bitmaps++;
+ }
+ }
+
+ /* initialize special element/graphic mapping from dynamic configuration */
+ for (i=0; i < num_property_mappings; i++)
+ {
+ int font_nr = property_mapping[i].base_index - MAX_NUM_ELEMENTS;
+ int special = property_mapping[i].ext3_index;
+ int graphic = property_mapping[i].artwork_index;
+
+ if (font_nr < 0)
+ continue;
+
+ if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS)
+ {
+ font_info[font_nr].special_graphic[special] = graphic;
+ font_info[font_nr].special_bitmap_id[special] = num_font_bitmaps;
+ num_font_bitmaps++;
+ }
+ }
+
+ /* ---------- initialize font bitmap array ---------- */
+
+ if (font_bitmap_info != NULL)
+ free(font_bitmap_info);
+
+ font_bitmap_info =
+ checked_calloc(num_font_bitmaps * sizeof(struct FontBitmapInfo));
+
+ /* ---------- initialize font bitmap definitions ---------- */
+
+ for (i=0; i < NUM_FONTS; i++)
+ {
+ if (i < NUM_INITIAL_FONTS)
+ {
+ font_bitmap_info[i] = font_initial[i];
+ continue;
+ }
+
+ for (j=0; j < NUM_SPECIAL_GFX_ARGS; j++)
+ {
+ int font_bitmap_id = font_info[i].special_bitmap_id[j];
+ int graphic = font_info[i].special_graphic[j];
+
+ /* copy font relevant information from graphics information */
+ font_bitmap_info[font_bitmap_id].bitmap = graphic_info[graphic].bitmap;
+ font_bitmap_info[font_bitmap_id].src_x = graphic_info[graphic].src_x;
+ font_bitmap_info[font_bitmap_id].src_y = graphic_info[graphic].src_y;
+ font_bitmap_info[font_bitmap_id].width = graphic_info[graphic].width;
+ font_bitmap_info[font_bitmap_id].height = graphic_info[graphic].height;
+ font_bitmap_info[font_bitmap_id].draw_x = graphic_info[graphic].draw_x;
+ font_bitmap_info[font_bitmap_id].draw_y = graphic_info[graphic].draw_y;
+ }
+ }
+
+ InitFontInfo(font_bitmap_info, num_font_bitmaps, getFontBitmapID);
}
void InitElementGraphicInfo()
}
}
-#if 0
- for (i=EL_CHAR_START; i<=EL_CHAR_END; i++)
- element_info[i].graphic[ACTION_DEFAULT] =
- IMG_CHAR_START + (i - EL_CHAR_START);
-
- for (i=EL_CUSTOM_START; i<=EL_CUSTOM_END; i++)
- element_info[i].graphic[ACTION_DEFAULT] =
- IMG_CUSTOM_START + (i - EL_CUSTOM_START);
-#endif
-
/* initialize normal element/graphic mapping from static configuration */
for (i=0; element_to_graphic[i].element > -1; i++)
{
int special = property_mapping[i].ext3_index;
int graphic = property_mapping[i].artwork_index;
- if (special != -1)
+ if (element >= MAX_NUM_ELEMENTS || special != -1)
continue;
if (action < 0)
}
}
-#if 1
+#if 0
#if DEBUG
if (options.verbose)
{
{
struct PropertyMapping *property_mapping = getImageListPropertyMapping();
int num_property_mappings = getImageListPropertyMappingSize();
- int i;
+ int i, j;
/* always start with reliable default values */
- for (i=0; i<MAX_NUM_ELEMENTS; i++)
- {
- element_info[i].editor_graphic = element_info[i].graphic[ACTION_DEFAULT];
- element_info[i].preview_graphic = element_info[i].graphic[ACTION_DEFAULT];
- }
+ for (i=0; i < MAX_NUM_ELEMENTS; i++)
+ for (j=0; j < NUM_SPECIAL_GFX_ARGS; j++)
+ element_info[i].special_graphic[j] =
+ element_info[i].graphic[ACTION_DEFAULT];
/* initialize special element/graphic mapping from static configuration */
for (i=0; element_to_special_graphic[i].element > -1; i++)
if (base_redefined && !special_redefined)
continue;
- if (special == GFX_SPECIAL_ARG_EDITOR)
- element_info[element].editor_graphic = graphic;
- else if (special == GFX_SPECIAL_ARG_PREVIEW)
- element_info[element].preview_graphic = graphic;
+ element_info[element].special_graphic[special] = graphic;
}
/* initialize special element/graphic mapping from dynamic configuration */
int special = property_mapping[i].ext3_index;
int graphic = property_mapping[i].artwork_index;
- if (special == GFX_SPECIAL_ARG_EDITOR)
- element_info[element].editor_graphic = graphic;
- else if (special == GFX_SPECIAL_ARG_PREVIEW)
- element_info[element].preview_graphic = graphic;
- }
-}
+ if (element >= MAX_NUM_ELEMENTS)
+ continue;
-static void InitElementSoundInfo()
-{
- /* soon to come */
+ if (special >= 0 && special < NUM_SPECIAL_GFX_ARGS)
+ element_info[element].special_graphic[special] = graphic;
+ }
}
static void set_graphic_parameters(int graphic, char **parameter_raw)
/* get integer values from string parameters */
for (i=0; i < NUM_GFX_ARGS; i++)
parameter[i] =
- get_parameter_value(image_config_suffix[i].type, parameter_raw[i]);
+ get_parameter_value(image_config_suffix[i].token, parameter_raw[i],
+ image_config_suffix[i].type);
graphic_info[graphic].bitmap = src_bitmap;
if (graphic_info[graphic].anim_delay == 0) /* delay must be at least 1 */
graphic_info[graphic].anim_delay = 1;
- /* set mode for animation frame order */
- if (parameter[GFX_ARG_MODE_LOOP])
- graphic_info[graphic].anim_mode = ANIM_LOOP;
- else if (parameter[GFX_ARG_MODE_LINEAR])
- graphic_info[graphic].anim_mode = ANIM_LINEAR;
- else if (parameter[GFX_ARG_MODE_PINGPONG])
- graphic_info[graphic].anim_mode = ANIM_PINGPONG;
- else if (parameter[GFX_ARG_MODE_PINGPONG2])
- graphic_info[graphic].anim_mode = ANIM_PINGPONG2;
- else if (parameter[GFX_ARG_MODE_RANDOM])
- graphic_info[graphic].anim_mode = ANIM_RANDOM;
+ if (parameter[GFX_ARG_ANIM_MODE] != ANIM_NONE)
+ graphic_info[graphic].anim_mode = parameter[GFX_ARG_ANIM_MODE];
else if (graphic_info[graphic].anim_frames > 1)
graphic_info[graphic].anim_mode = ANIM_LOOP;
- else
- graphic_info[graphic].anim_mode = ANIM_NONE;
-
- /* set additional flag to play animation frames in reverse order */
- if (parameter[GFX_ARG_MODE_REVERSE])
- graphic_info[graphic].anim_mode |= ANIM_REVERSE;
/* automatically determine correct start frame, if not defined */
if (parameter[GFX_ARG_START_FRAME] == ARG_UNDEFINED_VALUE)
/* this is only used for toon animations */
graphic_info[graphic].step_offset = parameter[GFX_ARG_STEP_OFFSET];
graphic_info[graphic].step_delay = parameter[GFX_ARG_STEP_DELAY];
+
+ /* this is only used for drawing font characters */
+ graphic_info[graphic].draw_x = parameter[GFX_ARG_DRAW_XOFFSET];
+ graphic_info[graphic].draw_y = parameter[GFX_ARG_DRAW_YOFFSET];
}
static void InitGraphicInfo()
{
- static boolean clipmasks_initialized = FALSE;
int fallback_graphic = IMG_CHAR_EXCLAM;
struct FileInfo *fallback_image = getImageListEntry(fallback_graphic);
Bitmap *fallback_bitmap = getBitmapFromImageID(fallback_graphic);
int num_images = getImageListSize();
int i;
+
#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
+ static boolean clipmasks_initialized = FALSE;
Pixmap src_pixmap;
XGCValues clip_gc_values;
unsigned long clip_gc_valuemask;
clip_gc_values.graphics_exposures = False;
clip_gc_values.clip_mask = graphic_info[i].clip_mask;
clip_gc_valuemask = GCGraphicsExposures | GCClipMask;
+
graphic_info[i].clip_gc =
XCreateGC(display, window->drawable, clip_gc_valuemask, &clip_gc_values);
#endif
#if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
if (copy_clipmask_gc)
XFreeGC(display, copy_clipmask_gc);
-#endif
clipmasks_initialized = TRUE;
+#endif
+}
+
+static void InitElementSoundInfo()
+{
+ struct PropertyMapping *property_mapping = getSoundListPropertyMapping();
+ int num_property_mappings = getSoundListPropertyMappingSize();
+ int i, j, act;
+
+ /* set values to -1 to identify later as "uninitialized" values */
+ for (i=0; i < MAX_NUM_ELEMENTS; i++)
+ for (act=0; act < NUM_ACTIONS; act++)
+ element_info[i].sound[act] = -1;
+
+ /* initialize element/sound mapping from static configuration */
+ for (i=0; element_to_sound[i].element > -1; i++)
+ {
+ int element = element_to_sound[i].element;
+ int action = element_to_sound[i].action;
+ int sound = element_to_sound[i].sound;
+ boolean is_class = element_to_sound[i].is_class;
+
+ if (action < 0)
+ action = ACTION_DEFAULT;
+
+ if (!is_class)
+ element_info[element].sound[action] = sound;
+ else
+ for (j=0; j < MAX_NUM_ELEMENTS; j++)
+ if (strcmp(element_info[j].class_name,
+ element_info[element].class_name) == 0)
+ element_info[j].sound[action] = sound;
+ }
+
+ /* initialize element/sound mapping from dynamic configuration */
+ for (i=0; i < num_property_mappings; i++)
+ {
+ int element = property_mapping[i].base_index;
+ int action = property_mapping[i].ext1_index;
+ int sound = property_mapping[i].artwork_index;
+
+ if (element >= MAX_NUM_ELEMENTS)
+ continue;
+
+ if (action < 0)
+ action = ACTION_DEFAULT;
+
+ element_info[element].sound[action] = sound;
+ }
+
+ /* initialize element class/sound mapping from dynamic configuration */
+ for (i=0; i < num_property_mappings; i++)
+ {
+ int element_class = property_mapping[i].base_index - MAX_NUM_ELEMENTS;
+ int action = property_mapping[i].ext1_index;
+ int sound = property_mapping[i].artwork_index;
+
+ if (element_class < 0 || element_class >= MAX_NUM_ELEMENTS)
+ continue;
+
+ if (action < 0)
+ action = ACTION_DEFAULT;
+
+ for (j=0; j < MAX_NUM_ELEMENTS; j++)
+ if (strcmp(element_info[j].class_name,
+ element_info[element_class].class_name) == 0)
+ element_info[j].sound[action] = sound;
+ }
+
+ /* now set all '-1' values to element specific default values */
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ {
+ int default_action_sound = element_info[i].sound[ACTION_DEFAULT];
+
+ for (act=0; act < NUM_ACTIONS; act++)
+ {
+ /* no sound for this specific action -- use default action sound */
+ if (element_info[i].sound[act] == -1)
+ element_info[i].sound[act] = default_action_sound;
+ }
+ }
}
static void set_sound_parameters(int sound, char **parameter_raw)
/* get integer values from string parameters */
for (i=0; i < NUM_SND_ARGS; i++)
parameter[i] =
- get_parameter_value(sound_config_suffix[i].type, parameter_raw[i]);
+ get_parameter_value(sound_config_suffix[i].token, parameter_raw[i],
+ sound_config_suffix[i].type);
/* explicit loop mode setting in configuration overrides default value */
if (parameter[SND_ARG_MODE_LOOP] != ARG_UNDEFINED_VALUE)
static void InitSoundInfo()
{
+ struct PropertyMapping *property_mapping = getSoundListPropertyMapping();
+ int num_property_mappings = getSoundListPropertyMappingSize();
int *sound_effect_properties;
int num_sounds = getSoundListSize();
int i, j;
for (j=0; j<MAX_NUM_ELEMENTS; j++)
{
- if (element_info[j].sound_class_name)
+ if (element_info[j].class_name)
{
- int len_class_text = strlen(element_info[j].sound_class_name);
+ int len_class_text = strlen(element_info[j].class_name);
if (len_class_text + 1 < len_effect_text &&
strncmp(sound->token,
- element_info[j].sound_class_name, len_class_text) == 0 &&
+ element_info[j].class_name, len_class_text) == 0 &&
sound->token[len_class_text] == '.')
{
int sound_action_value = sound_effect_properties[i];
free(sound_effect_properties);
+ /* initialize element/sound mapping from dynamic configuration */
+ for (i=0; i < num_property_mappings; i++)
+ {
+ int element = property_mapping[i].base_index;
+ int action = property_mapping[i].ext1_index;
+ int sound = property_mapping[i].artwork_index;
+
+ if (action < 0)
+ action = ACTION_DEFAULT;
+
+ element_info[element].sound[action] = sound;
+ }
+
+#if 0
+ /* TEST ONLY */
+ {
+ int element = EL_CUSTOM_11;
+ int j = 0;
+
+ while (element_action_info[j].suffix)
+ {
+ printf("element %d, sound action '%s' == %d\n",
+ element, element_action_info[j].suffix,
+ element_info[element].sound[j]);
+ j++;
+ }
+ }
+
+ PlaySoundLevelElementAction(0,0, EL_CUSTOM_11, ACTION_PUSHING);
+#endif
+
#if 0
/* TEST ONLY */
{
if (element_action_info[j].value == sound_action)
printf("element %d, sound action '%s' == %d\n",
element, element_action_info[j].suffix,
- element_info_[element].sound[sound_action]);
+ element_info[element].sound[sound_action]);
j++;
}
}
static int ep_schluessel[] =
{
- EL_KEY1,
- EL_KEY2,
- EL_KEY3,
- EL_KEY4,
- EL_EM_KEY1,
- EL_EM_KEY2,
- EL_EM_KEY3,
- EL_EM_KEY4
+ EL_KEY_1,
+ EL_KEY_2,
+ EL_KEY_3,
+ EL_KEY_4,
+ EL_EM_KEY_1,
+ EL_EM_KEY_2,
+ EL_EM_KEY_3,
+ EL_EM_KEY_4
};
static int ep_schluessel_num = SIZEOF_ARRAY_INT(ep_schluessel);
static int ep_pforte[] =
{
- EL_GATE1,
- EL_GATE2,
- EL_GATE3,
- EL_GATE4,
- EL_GATE1_GRAY,
- EL_GATE2_GRAY,
- EL_GATE3_GRAY,
- EL_GATE4_GRAY,
- EL_EM_GATE1,
- EL_EM_GATE2,
- EL_EM_GATE3,
- EL_EM_GATE4,
- EL_EM_GATE1_GRAY,
- EL_EM_GATE2_GRAY,
- EL_EM_GATE3_GRAY,
- EL_EM_GATE4_GRAY,
+ EL_GATE_1,
+ EL_GATE_2,
+ EL_GATE_3,
+ EL_GATE_4,
+ EL_GATE_1_GRAY,
+ EL_GATE_2_GRAY,
+ EL_GATE_3_GRAY,
+ EL_GATE_4_GRAY,
+ EL_EM_GATE_1,
+ EL_EM_GATE_2,
+ EL_EM_GATE_3,
+ EL_EM_GATE_4,
+ EL_EM_GATE_1_GRAY,
+ EL_EM_GATE_2_GRAY,
+ EL_EM_GATE_3_GRAY,
+ EL_EM_GATE_4_GRAY,
EL_SWITCHGATE_OPEN,
EL_SWITCHGATE_OPENING,
EL_SWITCHGATE_CLOSED,
EL_TIMEGATE_OPENING,
EL_TIMEGATE_CLOSED,
EL_TIMEGATE_CLOSING,
- EL_TUBE_ALL,
+ EL_TUBE_ANY,
EL_TUBE_VERTICAL,
EL_TUBE_HORIZONTAL,
EL_TUBE_VERTICAL_LEFT,
static int ep_solid[] =
{
- EL_STEELWALL,
EL_WALL,
- EL_WALL_GROWING,
- EL_WALL_GROWING_X,
- EL_WALL_GROWING_Y,
- EL_WALL_GROWING_XY,
+ EL_EXPANDABLE_WALL,
+ EL_EXPANDABLE_WALL_HORIZONTAL,
+ EL_EXPANDABLE_WALL_VERTICAL,
+ EL_EXPANDABLE_WALL_ANY,
EL_BD_WALL,
EL_WALL_CRUMBLED,
EL_EXIT_CLOSED,
EL_AMOEBA_DRY,
EL_AMOEBA_FULL,
EL_BD_AMOEBA,
- EL_QUICKSAND_FULL,
EL_QUICKSAND_EMPTY,
+ EL_QUICKSAND_FULL,
EL_QUICKSAND_FILLING,
EL_QUICKSAND_EMPTYING,
EL_MAGIC_WALL,
EL_BD_MAGIC_WALL_FULL,
EL_BD_MAGIC_WALL_FILLING,
EL_BD_MAGIC_WALL_DEAD,
- EL_GAMEOFLIFE,
+ EL_GAME_OF_LIFE,
EL_BIOMAZE,
- EL_ACIDPOOL_TOPLEFT,
- EL_ACIDPOOL_TOPRIGHT,
- EL_ACIDPOOL_BOTTOMLEFT,
- EL_ACIDPOOL_BOTTOM,
- EL_ACIDPOOL_BOTTOMRIGHT,
EL_SP_CHIP_SINGLE,
EL_SP_CHIP_LEFT,
EL_SP_CHIP_RIGHT,
- EL_SP_CHIP_UPPER,
- EL_SP_CHIP_LOWER,
- EL_SP_HARD_GRAY,
- EL_SP_HARD_GREEN,
- EL_SP_HARD_BLUE,
- EL_SP_HARD_RED,
- EL_SP_HARD_YELLOW,
- EL_SP_HARD_BASE1,
- EL_SP_HARD_BASE2,
- EL_SP_HARD_BASE3,
- EL_SP_HARD_BASE4,
- EL_SP_HARD_BASE5,
- EL_SP_HARD_BASE6,
+ EL_SP_CHIP_TOP,
+ EL_SP_CHIP_BOTTOM,
EL_SP_TERMINAL,
EL_SP_TERMINAL_ACTIVE,
EL_SP_EXIT_CLOSED,
EL_SP_EXIT_OPEN,
- EL_INVISIBLE_STEELWALL,
- EL_INVISIBLE_STEELWALL_ACTIVE,
EL_INVISIBLE_WALL,
EL_INVISIBLE_WALL_ACTIVE,
- EL_CONVEYOR_BELT1_SWITCH_LEFT,
- EL_CONVEYOR_BELT1_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT1_SWITCH_RIGHT,
- EL_CONVEYOR_BELT2_SWITCH_LEFT,
- EL_CONVEYOR_BELT2_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT2_SWITCH_RIGHT,
- EL_CONVEYOR_BELT3_SWITCH_LEFT,
- EL_CONVEYOR_BELT3_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT3_SWITCH_RIGHT,
- EL_CONVEYOR_BELT4_SWITCH_LEFT,
- EL_CONVEYOR_BELT4_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT4_SWITCH_RIGHT,
EL_SWITCHGATE_SWITCH_UP,
EL_SWITCHGATE_SWITCH_DOWN,
- EL_LIGHT_SWITCH,
- EL_LIGHT_SWITCH_ACTIVE,
EL_TIMEGATE_SWITCH,
EL_TIMEGATE_SWITCH_ACTIVE,
+ EL_EMC_WALL_1,
+ EL_EMC_WALL_2,
+ EL_EMC_WALL_3,
+ EL_EMC_WALL_4,
+ EL_EMC_WALL_5,
+ EL_EMC_WALL_6,
+ EL_EMC_WALL_7,
+ EL_EMC_WALL_8,
+ EL_WALL_PEARL,
+ EL_WALL_CRYSTAL,
+
+ /* the following elements are a direct copy of "indestructible" elements,
+ except "EL_ACID", which is "indestructible", but not "solid"! */
+#if 0
+ EL_ACID,
+#endif
+ EL_STEELWALL,
+ EL_ACID_POOL_TOPLEFT,
+ EL_ACID_POOL_TOPRIGHT,
+ EL_ACID_POOL_BOTTOMLEFT,
+ EL_ACID_POOL_BOTTOM,
+ EL_ACID_POOL_BOTTOMRIGHT,
+ EL_SP_HARDWARE_GRAY,
+ EL_SP_HARDWARE_GREEN,
+ EL_SP_HARDWARE_BLUE,
+ EL_SP_HARDWARE_RED,
+ EL_SP_HARDWARE_YELLOW,
+ EL_SP_HARDWARE_BASE_1,
+ EL_SP_HARDWARE_BASE_2,
+ EL_SP_HARDWARE_BASE_3,
+ EL_SP_HARDWARE_BASE_4,
+ EL_SP_HARDWARE_BASE_5,
+ EL_SP_HARDWARE_BASE_6,
+ EL_INVISIBLE_STEELWALL,
+ EL_INVISIBLE_STEELWALL_ACTIVE,
+ EL_CONVEYOR_BELT_1_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_1_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_1_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_2_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_2_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_2_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_3_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_3_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_3_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_4_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_4_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_4_SWITCH_RIGHT,
+ EL_LIGHT_SWITCH,
+ EL_LIGHT_SWITCH_ACTIVE,
EL_SIGN_EXCLAMATION,
EL_SIGN_RADIOACTIVITY,
EL_SIGN_STOP,
EL_SIGN_YINYANG,
EL_SIGN_OTHER,
EL_STEELWALL_SLANTED,
- EL_EMC_STEELWALL1,
- EL_EMC_STEELWALL2,
- EL_EMC_STEELWALL3,
- EL_EMC_STEELWALL4,
- EL_EMC_WALL_PILLAR_UPPER,
- EL_EMC_WALL_PILLAR_MIDDLE,
- EL_EMC_WALL_PILLAR_LOWER,
- EL_EMC_WALL4,
- EL_EMC_WALL5,
- EL_EMC_WALL6,
- EL_EMC_WALL7,
- EL_EMC_WALL8,
+ EL_EMC_STEELWALL_1,
+ EL_EMC_STEELWALL_2,
+ EL_EMC_STEELWALL_3,
+ EL_EMC_STEELWALL_4,
EL_CRYSTAL,
- EL_WALL_PEARL,
- EL_WALL_CRYSTAL,
- EL_GATE1,
- EL_GATE2,
- EL_GATE3,
- EL_GATE4,
- EL_GATE1_GRAY,
- EL_GATE2_GRAY,
- EL_GATE3_GRAY,
- EL_GATE4_GRAY,
- EL_EM_GATE1,
- EL_EM_GATE2,
- EL_EM_GATE3,
- EL_EM_GATE4,
- EL_EM_GATE1_GRAY,
- EL_EM_GATE2_GRAY,
- EL_EM_GATE3_GRAY,
- EL_EM_GATE4_GRAY,
+ EL_GATE_1,
+ EL_GATE_2,
+ EL_GATE_3,
+ EL_GATE_4,
+ EL_GATE_1_GRAY,
+ EL_GATE_2_GRAY,
+ EL_GATE_3_GRAY,
+ EL_GATE_4_GRAY,
+ EL_EM_GATE_1,
+ EL_EM_GATE_2,
+ EL_EM_GATE_3,
+ EL_EM_GATE_4,
+ EL_EM_GATE_1_GRAY,
+ EL_EM_GATE_2_GRAY,
+ EL_EM_GATE_3_GRAY,
+ EL_EM_GATE_4_GRAY,
EL_SWITCHGATE_OPEN,
EL_SWITCHGATE_OPENING,
EL_SWITCHGATE_CLOSED,
EL_TIMEGATE_OPENING,
EL_TIMEGATE_CLOSED,
EL_TIMEGATE_CLOSING,
- EL_TUBE_ALL,
+ EL_TUBE_ANY,
EL_TUBE_VERTICAL,
EL_TUBE_HORIZONTAL,
EL_TUBE_VERTICAL_LEFT,
};
static int ep_solid_num = SIZEOF_ARRAY_INT(ep_solid);
- static int ep_massive[] =
+ static int ep_indestructible[] =
{
EL_STEELWALL,
EL_ACID,
- EL_ACIDPOOL_TOPLEFT,
- EL_ACIDPOOL_TOPRIGHT,
- EL_ACIDPOOL_BOTTOMLEFT,
- EL_ACIDPOOL_BOTTOM,
- EL_ACIDPOOL_BOTTOMRIGHT,
- EL_SP_HARD_GRAY,
- EL_SP_HARD_GREEN,
- EL_SP_HARD_BLUE,
- EL_SP_HARD_RED,
- EL_SP_HARD_YELLOW,
- EL_SP_HARD_BASE1,
- EL_SP_HARD_BASE2,
- EL_SP_HARD_BASE3,
- EL_SP_HARD_BASE4,
- EL_SP_HARD_BASE5,
- EL_SP_HARD_BASE6,
+ EL_ACID_POOL_TOPLEFT,
+ EL_ACID_POOL_TOPRIGHT,
+ EL_ACID_POOL_BOTTOMLEFT,
+ EL_ACID_POOL_BOTTOM,
+ EL_ACID_POOL_BOTTOMRIGHT,
+ EL_SP_HARDWARE_GRAY,
+ EL_SP_HARDWARE_GREEN,
+ EL_SP_HARDWARE_BLUE,
+ EL_SP_HARDWARE_RED,
+ EL_SP_HARDWARE_YELLOW,
+ EL_SP_HARDWARE_BASE_1,
+ EL_SP_HARDWARE_BASE_2,
+ EL_SP_HARDWARE_BASE_3,
+ EL_SP_HARDWARE_BASE_4,
+ EL_SP_HARDWARE_BASE_5,
+ EL_SP_HARDWARE_BASE_6,
EL_INVISIBLE_STEELWALL,
EL_INVISIBLE_STEELWALL_ACTIVE,
- EL_CONVEYOR_BELT1_SWITCH_LEFT,
- EL_CONVEYOR_BELT1_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT1_SWITCH_RIGHT,
- EL_CONVEYOR_BELT2_SWITCH_LEFT,
- EL_CONVEYOR_BELT2_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT2_SWITCH_RIGHT,
- EL_CONVEYOR_BELT3_SWITCH_LEFT,
- EL_CONVEYOR_BELT3_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT3_SWITCH_RIGHT,
- EL_CONVEYOR_BELT4_SWITCH_LEFT,
- EL_CONVEYOR_BELT4_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT4_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_1_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_1_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_1_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_2_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_2_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_2_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_3_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_3_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_3_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_4_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_4_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_4_SWITCH_RIGHT,
EL_LIGHT_SWITCH,
EL_LIGHT_SWITCH_ACTIVE,
EL_SIGN_EXCLAMATION,
EL_SIGN_YINYANG,
EL_SIGN_OTHER,
EL_STEELWALL_SLANTED,
- EL_EMC_STEELWALL1,
- EL_EMC_STEELWALL2,
- EL_EMC_STEELWALL3,
- EL_EMC_STEELWALL4,
+ EL_EMC_STEELWALL_1,
+ EL_EMC_STEELWALL_2,
+ EL_EMC_STEELWALL_3,
+ EL_EMC_STEELWALL_4,
EL_CRYSTAL,
- EL_GATE1,
- EL_GATE2,
- EL_GATE3,
- EL_GATE4,
- EL_GATE1_GRAY,
- EL_GATE2_GRAY,
- EL_GATE3_GRAY,
- EL_GATE4_GRAY,
- EL_EM_GATE1,
- EL_EM_GATE2,
- EL_EM_GATE3,
- EL_EM_GATE4,
- EL_EM_GATE1_GRAY,
- EL_EM_GATE2_GRAY,
- EL_EM_GATE3_GRAY,
- EL_EM_GATE4_GRAY,
+ EL_GATE_1,
+ EL_GATE_2,
+ EL_GATE_3,
+ EL_GATE_4,
+ EL_GATE_1_GRAY,
+ EL_GATE_2_GRAY,
+ EL_GATE_3_GRAY,
+ EL_GATE_4_GRAY,
+ EL_EM_GATE_1,
+ EL_EM_GATE_2,
+ EL_EM_GATE_3,
+ EL_EM_GATE_4,
+ EL_EM_GATE_1_GRAY,
+ EL_EM_GATE_2_GRAY,
+ EL_EM_GATE_3_GRAY,
+ EL_EM_GATE_4_GRAY,
EL_SWITCHGATE_OPEN,
EL_SWITCHGATE_OPENING,
EL_SWITCHGATE_CLOSED,
EL_TIMEGATE_OPENING,
EL_TIMEGATE_CLOSED,
EL_TIMEGATE_CLOSING,
- EL_TUBE_ALL,
+ EL_TUBE_ANY,
EL_TUBE_VERTICAL,
EL_TUBE_HORIZONTAL,
EL_TUBE_VERTICAL_LEFT,
EL_TUBE_RIGHT_UP,
EL_TUBE_RIGHT_DOWN
};
- static int ep_massive_num = SIZEOF_ARRAY_INT(ep_massive);
+ static int ep_indestructible_num = SIZEOF_ARRAY_INT(ep_indestructible);
static int ep_slippery[] =
{
EL_TIME_ORB_EMPTY,
EL_LAMP_ACTIVE,
EL_LAMP,
- EL_ACIDPOOL_TOPLEFT,
- EL_ACIDPOOL_TOPRIGHT,
+ EL_ACID_POOL_TOPLEFT,
+ EL_ACID_POOL_TOPRIGHT,
EL_SATELLITE,
EL_SP_ZONK,
EL_SP_INFOTRON,
EL_SP_CHIP_SINGLE,
EL_SP_CHIP_LEFT,
EL_SP_CHIP_RIGHT,
- EL_SP_CHIP_UPPER,
- EL_SP_CHIP_LOWER,
+ EL_SP_CHIP_TOP,
+ EL_SP_CHIP_BOTTOM,
EL_SPEED_PILL,
EL_STEELWALL_SLANTED,
EL_PEARL,
static int ep_mauer[] =
{
EL_STEELWALL,
- EL_GATE1,
- EL_GATE2,
- EL_GATE3,
- EL_GATE4,
- EL_GATE1_GRAY,
- EL_GATE2_GRAY,
- EL_GATE3_GRAY,
- EL_GATE4_GRAY,
- EL_EM_GATE1,
- EL_EM_GATE2,
- EL_EM_GATE3,
- EL_EM_GATE4,
- EL_EM_GATE1_GRAY,
- EL_EM_GATE2_GRAY,
- EL_EM_GATE3_GRAY,
- EL_EM_GATE4_GRAY,
+ EL_GATE_1,
+ EL_GATE_2,
+ EL_GATE_3,
+ EL_GATE_4,
+ EL_GATE_1_GRAY,
+ EL_GATE_2_GRAY,
+ EL_GATE_3_GRAY,
+ EL_GATE_4_GRAY,
+ EL_EM_GATE_1,
+ EL_EM_GATE_2,
+ EL_EM_GATE_3,
+ EL_EM_GATE_4,
+ EL_EM_GATE_1_GRAY,
+ EL_EM_GATE_2_GRAY,
+ EL_EM_GATE_3_GRAY,
+ EL_EM_GATE_4_GRAY,
EL_EXIT_CLOSED,
EL_EXIT_OPENING,
EL_EXIT_OPEN,
EL_WALL,
EL_WALL_CRUMBLED,
- EL_WALL_GROWING,
- EL_WALL_GROWING_X,
- EL_WALL_GROWING_Y,
- EL_WALL_GROWING_XY,
- EL_WALL_GROWING_ACTIVE,
+ EL_EXPANDABLE_WALL,
+ EL_EXPANDABLE_WALL_HORIZONTAL,
+ EL_EXPANDABLE_WALL_VERTICAL,
+ EL_EXPANDABLE_WALL_ANY,
+ EL_EXPANDABLE_WALL_GROWING,
EL_BD_WALL,
EL_SP_CHIP_SINGLE,
EL_SP_CHIP_LEFT,
EL_SP_CHIP_RIGHT,
- EL_SP_CHIP_UPPER,
- EL_SP_CHIP_LOWER,
- EL_SP_HARD_GRAY,
- EL_SP_HARD_GREEN,
- EL_SP_HARD_BLUE,
- EL_SP_HARD_RED,
- EL_SP_HARD_YELLOW,
- EL_SP_HARD_BASE1,
- EL_SP_HARD_BASE2,
- EL_SP_HARD_BASE3,
- EL_SP_HARD_BASE4,
- EL_SP_HARD_BASE5,
- EL_SP_HARD_BASE6,
+ EL_SP_CHIP_TOP,
+ EL_SP_CHIP_BOTTOM,
+ EL_SP_HARDWARE_GRAY,
+ EL_SP_HARDWARE_GREEN,
+ EL_SP_HARDWARE_BLUE,
+ EL_SP_HARDWARE_RED,
+ EL_SP_HARDWARE_YELLOW,
+ EL_SP_HARDWARE_BASE_1,
+ EL_SP_HARDWARE_BASE_2,
+ EL_SP_HARDWARE_BASE_3,
+ EL_SP_HARDWARE_BASE_4,
+ EL_SP_HARDWARE_BASE_5,
+ EL_SP_HARDWARE_BASE_6,
EL_SP_TERMINAL,
EL_SP_TERMINAL_ACTIVE,
EL_SP_EXIT_CLOSED,
EL_INVISIBLE_WALL,
EL_INVISIBLE_WALL_ACTIVE,
EL_STEELWALL_SLANTED,
- EL_EMC_STEELWALL1,
- EL_EMC_STEELWALL2,
- EL_EMC_STEELWALL3,
- EL_EMC_STEELWALL4,
- EL_EMC_WALL_PILLAR_UPPER,
- EL_EMC_WALL_PILLAR_MIDDLE,
- EL_EMC_WALL_PILLAR_LOWER,
- EL_EMC_WALL4,
- EL_EMC_WALL5,
- EL_EMC_WALL6,
- EL_EMC_WALL7,
- EL_EMC_WALL8
+ EL_EMC_STEELWALL_1,
+ EL_EMC_STEELWALL_2,
+ EL_EMC_STEELWALL_3,
+ EL_EMC_STEELWALL_4,
+ EL_EMC_WALL_1,
+ EL_EMC_WALL_2,
+ EL_EMC_WALL_3,
+ EL_EMC_WALL_4,
+ EL_EMC_WALL_5,
+ EL_EMC_WALL_6,
+ EL_EMC_WALL_7,
+ EL_EMC_WALL_8
};
static int ep_mauer_num = SIZEOF_ARRAY_INT(ep_mauer);
EL_EMERALD_RED,
EL_EMERALD_PURPLE,
EL_DIAMOND,
- EL_KEY1,
- EL_KEY2,
- EL_KEY3,
- EL_KEY4,
- EL_EM_KEY1,
- EL_EM_KEY2,
- EL_EM_KEY3,
- EL_EM_KEY4,
EL_BOMB,
EL_NUT,
EL_AMOEBA_DROP,
EL_EXIT_CLOSED,
EL_EXIT_OPEN,
EL_STEELWALL,
- EL_PLAYER1,
+ EL_PLAYER_1,
EL_BD_FIREFLY,
EL_BD_FIREFLY_1,
EL_BD_FIREFLY_2,
EL_SOKOBAN_OBJECT,
EL_SOKOBAN_FIELD_EMPTY,
EL_SOKOBAN_FIELD_FULL,
- EL_PLAYER1,
+ EL_PLAYER_1,
EL_INVISIBLE_STEELWALL
};
static int ep_sb_element_num = SIZEOF_ARRAY_INT(ep_sb_element);
EL_QUICKSAND_EMPTY,
EL_STONEBLOCK,
EL_ROBOT_WHEEL,
- EL_KEY1,
- EL_KEY2,
- EL_KEY3,
- EL_KEY4,
- EL_EM_KEY1,
- EL_EM_KEY2,
- EL_EM_KEY3,
- EL_EM_KEY4,
- EL_GATE1,
- EL_GATE2,
- EL_GATE3,
- EL_GATE4,
- EL_GATE1_GRAY,
- EL_GATE2_GRAY,
- EL_GATE3_GRAY,
- EL_GATE4_GRAY,
- EL_EM_GATE1,
- EL_EM_GATE2,
- EL_EM_GATE3,
- EL_EM_GATE4,
- EL_EM_GATE1_GRAY,
- EL_EM_GATE2_GRAY,
- EL_EM_GATE3_GRAY,
- EL_EM_GATE4_GRAY,
+ EL_KEY_1,
+ EL_KEY_2,
+ EL_KEY_3,
+ EL_KEY_4,
+ EL_EM_KEY_1,
+ EL_EM_KEY_2,
+ EL_EM_KEY_3,
+ EL_EM_KEY_4,
+ EL_GATE_1,
+ EL_GATE_2,
+ EL_GATE_3,
+ EL_GATE_4,
+ EL_GATE_1_GRAY,
+ EL_GATE_2_GRAY,
+ EL_GATE_3_GRAY,
+ EL_GATE_4_GRAY,
+ EL_EM_GATE_1,
+ EL_EM_GATE_2,
+ EL_EM_GATE_3,
+ EL_EM_GATE_4,
+ EL_EM_GATE_1_GRAY,
+ EL_EM_GATE_2_GRAY,
+ EL_EM_GATE_3_GRAY,
+ EL_EM_GATE_4_GRAY,
EL_DYNAMITE,
EL_INVISIBLE_STEELWALL,
EL_INVISIBLE_WALL,
EL_WALL_DIAMOND,
EL_WALL_BD_DIAMOND,
EL_WALL_EMERALD_YELLOW,
- EL_DYNABOMB_NR,
- EL_DYNABOMB_SZ,
- EL_DYNABOMB_XL,
+ EL_DYNABOMB_INCREASE_NUMBER,
+ EL_DYNABOMB_INCREASE_SIZE,
+ EL_DYNABOMB_INCREASE_POWER,
EL_SOKOBAN_OBJECT,
EL_SOKOBAN_FIELD_EMPTY,
EL_SOKOBAN_FIELD_FULL,
EL_WALL_EMERALD_RED,
EL_WALL_EMERALD_PURPLE,
- EL_ACIDPOOL_TOPLEFT,
- EL_ACIDPOOL_TOPRIGHT,
- EL_ACIDPOOL_BOTTOMLEFT,
- EL_ACIDPOOL_BOTTOM,
- EL_ACIDPOOL_BOTTOMRIGHT,
+ EL_ACID_POOL_TOPLEFT,
+ EL_ACID_POOL_TOPRIGHT,
+ EL_ACID_POOL_BOTTOMLEFT,
+ EL_ACID_POOL_BOTTOM,
+ EL_ACID_POOL_BOTTOMRIGHT,
EL_MAGIC_WALL,
EL_MAGIC_WALL_DEAD,
EL_BD_MAGIC_WALL,
EL_BLOCKED,
EL_SP_EMPTY,
EL_SP_BASE,
- EL_SP_PORT1_RIGHT,
- EL_SP_PORT1_DOWN,
- EL_SP_PORT1_LEFT,
- EL_SP_PORT1_UP,
- EL_SP_PORT2_RIGHT,
- EL_SP_PORT2_DOWN,
- EL_SP_PORT2_LEFT,
- EL_SP_PORT2_UP,
- EL_SP_PORT_X,
- EL_SP_PORT_Y,
- EL_SP_PORT_XY,
+ EL_SP_PORT_RIGHT,
+ EL_SP_PORT_DOWN,
+ EL_SP_PORT_LEFT,
+ EL_SP_PORT_UP,
+ EL_SP_GRAVITY_PORT_RIGHT,
+ EL_SP_GRAVITY_PORT_DOWN,
+ EL_SP_GRAVITY_PORT_LEFT,
+ EL_SP_GRAVITY_PORT_UP,
+ EL_SP_PORT_HORIZONTAL,
+ EL_SP_PORT_VERTICAL,
+ EL_SP_PORT_ANY,
EL_SP_DISK_RED,
EL_SP_DISK_YELLOW,
EL_SP_CHIP_SINGLE,
EL_SP_CHIP_LEFT,
EL_SP_CHIP_RIGHT,
- EL_SP_CHIP_UPPER,
- EL_SP_CHIP_LOWER,
- EL_SP_HARD_GRAY,
- EL_SP_HARD_GREEN,
- EL_SP_HARD_BLUE,
- EL_SP_HARD_RED,
- EL_SP_HARD_YELLOW,
- EL_SP_HARD_BASE1,
- EL_SP_HARD_BASE2,
- EL_SP_HARD_BASE3,
- EL_SP_HARD_BASE4,
- EL_SP_HARD_BASE5,
- EL_SP_HARD_BASE6,
- EL_CONVEYOR_BELT1_SWITCH_LEFT,
- EL_CONVEYOR_BELT1_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT1_SWITCH_RIGHT,
- EL_CONVEYOR_BELT2_SWITCH_LEFT,
- EL_CONVEYOR_BELT2_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT2_SWITCH_RIGHT,
- EL_CONVEYOR_BELT3_SWITCH_LEFT,
- EL_CONVEYOR_BELT3_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT3_SWITCH_RIGHT,
- EL_CONVEYOR_BELT4_SWITCH_LEFT,
- EL_CONVEYOR_BELT4_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT4_SWITCH_RIGHT,
+ EL_SP_CHIP_TOP,
+ EL_SP_CHIP_BOTTOM,
+ EL_SP_HARDWARE_GRAY,
+ EL_SP_HARDWARE_GREEN,
+ EL_SP_HARDWARE_BLUE,
+ EL_SP_HARDWARE_RED,
+ EL_SP_HARDWARE_YELLOW,
+ EL_SP_HARDWARE_BASE_1,
+ EL_SP_HARDWARE_BASE_2,
+ EL_SP_HARDWARE_BASE_3,
+ EL_SP_HARDWARE_BASE_4,
+ EL_SP_HARDWARE_BASE_5,
+ EL_SP_HARDWARE_BASE_6,
+ EL_CONVEYOR_BELT_1_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_1_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_1_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_2_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_2_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_2_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_3_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_3_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_3_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_4_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_4_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_4_SWITCH_RIGHT,
EL_SIGN_EXCLAMATION,
EL_SIGN_RADIOACTIVITY,
EL_SIGN_STOP,
EL_SIGN_YINYANG,
EL_SIGN_OTHER,
EL_STEELWALL_SLANTED,
- EL_EMC_STEELWALL1,
- EL_EMC_STEELWALL2,
- EL_EMC_STEELWALL3,
- EL_EMC_STEELWALL4,
- EL_EMC_WALL_PILLAR_UPPER,
- EL_EMC_WALL_PILLAR_MIDDLE,
- EL_EMC_WALL_PILLAR_LOWER,
- EL_EMC_WALL4,
- EL_EMC_WALL5,
- EL_EMC_WALL6,
- EL_EMC_WALL7,
- EL_EMC_WALL8
+ EL_EMC_STEELWALL_1,
+ EL_EMC_STEELWALL_2,
+ EL_EMC_STEELWALL_3,
+ EL_EMC_STEELWALL_4,
+ EL_EMC_WALL_1,
+ EL_EMC_WALL_2,
+ EL_EMC_WALL_3,
+ EL_EMC_WALL_4,
+ EL_EMC_WALL_5,
+ EL_EMC_WALL_6,
+ EL_EMC_WALL_7,
+ EL_EMC_WALL_8
};
static int ep_inactive_num = SIZEOF_ARRAY_INT(ep_inactive);
EL_BOMB,
EL_DYNAMITE_ACTIVE,
EL_DYNAMITE,
- EL_DYNABOMB_PLAYER1_ACTIVE,
- EL_DYNABOMB_PLAYER2_ACTIVE,
- EL_DYNABOMB_PLAYER3_ACTIVE,
- EL_DYNABOMB_PLAYER4_ACTIVE,
- EL_DYNABOMB_NR,
- EL_DYNABOMB_SZ,
- EL_DYNABOMB_XL,
+ EL_DYNABOMB_PLAYER_1_ACTIVE,
+ EL_DYNABOMB_PLAYER_2_ACTIVE,
+ EL_DYNABOMB_PLAYER_3_ACTIVE,
+ EL_DYNABOMB_PLAYER_4_ACTIVE,
+ EL_DYNABOMB_INCREASE_NUMBER,
+ EL_DYNABOMB_INCREASE_SIZE,
+ EL_DYNABOMB_INCREASE_POWER,
+ EL_SP_DISK_RED_ACTIVE,
EL_BUG,
EL_MOLE,
EL_PENGUIN,
static int ep_player[] =
{
- EL_PLAYER1,
- EL_PLAYER2,
- EL_PLAYER3,
- EL_PLAYER4
+ EL_PLAYER_1,
+ EL_PLAYER_2,
+ EL_PLAYER_3,
+ EL_PLAYER_4
};
static int ep_player_num = SIZEOF_ARRAY_INT(ep_player);
EL_SP_MURPHY,
EL_SP_INFOTRON,
EL_SP_CHIP_SINGLE,
- EL_SP_HARD_GRAY,
+ EL_SP_HARDWARE_GRAY,
EL_SP_EXIT_CLOSED,
EL_SP_EXIT_OPEN,
EL_SP_DISK_ORANGE,
- EL_SP_PORT1_RIGHT,
- EL_SP_PORT1_DOWN,
- EL_SP_PORT1_LEFT,
- EL_SP_PORT1_UP,
- EL_SP_PORT2_RIGHT,
- EL_SP_PORT2_DOWN,
- EL_SP_PORT2_LEFT,
- EL_SP_PORT2_UP,
+ EL_SP_PORT_RIGHT,
+ EL_SP_PORT_DOWN,
+ EL_SP_PORT_LEFT,
+ EL_SP_PORT_UP,
+ EL_SP_GRAVITY_PORT_RIGHT,
+ EL_SP_GRAVITY_PORT_DOWN,
+ EL_SP_GRAVITY_PORT_LEFT,
+ EL_SP_GRAVITY_PORT_UP,
EL_SP_SNIKSNAK,
EL_SP_DISK_YELLOW,
EL_SP_TERMINAL,
EL_SP_DISK_RED,
- EL_SP_PORT_Y,
- EL_SP_PORT_X,
- EL_SP_PORT_XY,
+ EL_SP_PORT_VERTICAL,
+ EL_SP_PORT_HORIZONTAL,
+ EL_SP_PORT_ANY,
EL_SP_ELECTRON,
EL_SP_BUGGY_BASE,
EL_SP_CHIP_LEFT,
EL_SP_CHIP_RIGHT,
- EL_SP_HARD_BASE1,
- EL_SP_HARD_GREEN,
- EL_SP_HARD_BLUE,
- EL_SP_HARD_RED,
- EL_SP_HARD_YELLOW,
- EL_SP_HARD_BASE2,
- EL_SP_HARD_BASE3,
- EL_SP_HARD_BASE4,
- EL_SP_HARD_BASE5,
- EL_SP_HARD_BASE6,
- EL_SP_CHIP_UPPER,
- EL_SP_CHIP_LOWER,
+ EL_SP_HARDWARE_BASE_1,
+ EL_SP_HARDWARE_GREEN,
+ EL_SP_HARDWARE_BLUE,
+ EL_SP_HARDWARE_RED,
+ EL_SP_HARDWARE_YELLOW,
+ EL_SP_HARDWARE_BASE_2,
+ EL_SP_HARDWARE_BASE_3,
+ EL_SP_HARDWARE_BASE_4,
+ EL_SP_HARDWARE_BASE_5,
+ EL_SP_HARDWARE_BASE_6,
+ EL_SP_CHIP_TOP,
+ EL_SP_CHIP_BOTTOM,
/* additional elements that appeared in newer Supaplex levels */
EL_INVISIBLE_WALL,
/* more than one murphy in a level results in an inactive clone */
static int ep_quick_gate[] =
{
- EL_EM_GATE1,
- EL_EM_GATE2,
- EL_EM_GATE3,
- EL_EM_GATE4,
- EL_EM_GATE1_GRAY,
- EL_EM_GATE2_GRAY,
- EL_EM_GATE3_GRAY,
- EL_EM_GATE4_GRAY,
- EL_SP_PORT1_LEFT,
- EL_SP_PORT2_LEFT,
- EL_SP_PORT1_RIGHT,
- EL_SP_PORT2_RIGHT,
- EL_SP_PORT1_UP,
- EL_SP_PORT2_UP,
- EL_SP_PORT1_DOWN,
- EL_SP_PORT2_DOWN,
- EL_SP_PORT_X,
- EL_SP_PORT_Y,
- EL_SP_PORT_XY,
+ EL_EM_GATE_1,
+ EL_EM_GATE_2,
+ EL_EM_GATE_3,
+ EL_EM_GATE_4,
+ EL_EM_GATE_1_GRAY,
+ EL_EM_GATE_2_GRAY,
+ EL_EM_GATE_3_GRAY,
+ EL_EM_GATE_4_GRAY,
+ EL_SP_PORT_LEFT,
+ EL_SP_PORT_RIGHT,
+ EL_SP_PORT_UP,
+ EL_SP_PORT_DOWN,
+ EL_SP_GRAVITY_PORT_LEFT,
+ EL_SP_GRAVITY_PORT_RIGHT,
+ EL_SP_GRAVITY_PORT_UP,
+ EL_SP_GRAVITY_PORT_DOWN,
+ EL_SP_PORT_HORIZONTAL,
+ EL_SP_PORT_VERTICAL,
+ EL_SP_PORT_ANY,
EL_SWITCHGATE_OPEN,
EL_TIMEGATE_OPEN
};
static int ep_over_player[] =
{
- EL_SP_PORT1_LEFT,
- EL_SP_PORT2_LEFT,
- EL_SP_PORT1_RIGHT,
- EL_SP_PORT2_RIGHT,
- EL_SP_PORT1_UP,
- EL_SP_PORT2_UP,
- EL_SP_PORT1_DOWN,
- EL_SP_PORT2_DOWN,
- EL_SP_PORT_X,
- EL_SP_PORT_Y,
- EL_SP_PORT_XY,
- EL_TUBE_ALL,
+ EL_SP_PORT_LEFT,
+ EL_SP_PORT_RIGHT,
+ EL_SP_PORT_UP,
+ EL_SP_PORT_DOWN,
+ EL_SP_GRAVITY_PORT_LEFT,
+ EL_SP_GRAVITY_PORT_RIGHT,
+ EL_SP_GRAVITY_PORT_UP,
+ EL_SP_GRAVITY_PORT_DOWN,
+ EL_SP_PORT_HORIZONTAL,
+ EL_SP_PORT_VERTICAL,
+ EL_SP_PORT_ANY,
+ EL_TUBE_ANY,
EL_TUBE_VERTICAL,
EL_TUBE_HORIZONTAL,
EL_TUBE_VERTICAL_LEFT,
static int ep_active_bomb[] =
{
EL_DYNAMITE_ACTIVE,
- EL_DYNABOMB_PLAYER1_ACTIVE,
- EL_DYNABOMB_PLAYER2_ACTIVE,
- EL_DYNABOMB_PLAYER3_ACTIVE,
- EL_DYNABOMB_PLAYER4_ACTIVE
+ EL_DYNABOMB_PLAYER_1_ACTIVE,
+ EL_DYNABOMB_PLAYER_2_ACTIVE,
+ EL_DYNABOMB_PLAYER_3_ACTIVE,
+ EL_DYNABOMB_PLAYER_4_ACTIVE,
+ EL_SP_DISK_RED_ACTIVE
};
static int ep_active_bomb_num = SIZEOF_ARRAY_INT(ep_active_bomb);
static int ep_belt[] =
{
- EL_CONVEYOR_BELT1_LEFT,
- EL_CONVEYOR_BELT1_MIDDLE,
- EL_CONVEYOR_BELT1_RIGHT,
- EL_CONVEYOR_BELT2_LEFT,
- EL_CONVEYOR_BELT2_MIDDLE,
- EL_CONVEYOR_BELT2_RIGHT,
- EL_CONVEYOR_BELT3_LEFT,
- EL_CONVEYOR_BELT3_MIDDLE,
- EL_CONVEYOR_BELT3_RIGHT,
- EL_CONVEYOR_BELT4_LEFT,
- EL_CONVEYOR_BELT4_MIDDLE,
- EL_CONVEYOR_BELT4_RIGHT,
+ EL_CONVEYOR_BELT_1_LEFT,
+ EL_CONVEYOR_BELT_1_MIDDLE,
+ EL_CONVEYOR_BELT_1_RIGHT,
+ EL_CONVEYOR_BELT_2_LEFT,
+ EL_CONVEYOR_BELT_2_MIDDLE,
+ EL_CONVEYOR_BELT_2_RIGHT,
+ EL_CONVEYOR_BELT_3_LEFT,
+ EL_CONVEYOR_BELT_3_MIDDLE,
+ EL_CONVEYOR_BELT_3_RIGHT,
+ EL_CONVEYOR_BELT_4_LEFT,
+ EL_CONVEYOR_BELT_4_MIDDLE,
+ EL_CONVEYOR_BELT_4_RIGHT,
};
static int ep_belt_num = SIZEOF_ARRAY_INT(ep_belt);
static int ep_belt_active[] =
{
- EL_CONVEYOR_BELT1_LEFT_ACTIVE,
- EL_CONVEYOR_BELT1_MIDDLE_ACTIVE,
- EL_CONVEYOR_BELT1_RIGHT_ACTIVE,
- EL_CONVEYOR_BELT2_LEFT_ACTIVE,
- EL_CONVEYOR_BELT2_MIDDLE_ACTIVE,
- EL_CONVEYOR_BELT2_RIGHT_ACTIVE,
- EL_CONVEYOR_BELT3_LEFT_ACTIVE,
- EL_CONVEYOR_BELT3_MIDDLE_ACTIVE,
- EL_CONVEYOR_BELT3_RIGHT_ACTIVE,
- EL_CONVEYOR_BELT4_LEFT_ACTIVE,
- EL_CONVEYOR_BELT4_MIDDLE_ACTIVE,
- EL_CONVEYOR_BELT4_RIGHT_ACTIVE,
+ EL_CONVEYOR_BELT_1_LEFT_ACTIVE,
+ EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE,
+ EL_CONVEYOR_BELT_1_RIGHT_ACTIVE,
+ EL_CONVEYOR_BELT_2_LEFT_ACTIVE,
+ EL_CONVEYOR_BELT_2_MIDDLE_ACTIVE,
+ EL_CONVEYOR_BELT_2_RIGHT_ACTIVE,
+ EL_CONVEYOR_BELT_3_LEFT_ACTIVE,
+ EL_CONVEYOR_BELT_3_MIDDLE_ACTIVE,
+ EL_CONVEYOR_BELT_3_RIGHT_ACTIVE,
+ EL_CONVEYOR_BELT_4_LEFT_ACTIVE,
+ EL_CONVEYOR_BELT_4_MIDDLE_ACTIVE,
+ EL_CONVEYOR_BELT_4_RIGHT_ACTIVE,
};
static int ep_belt_active_num = SIZEOF_ARRAY_INT(ep_belt_active);
static int ep_belt_switch[] =
{
- EL_CONVEYOR_BELT1_SWITCH_LEFT,
- EL_CONVEYOR_BELT1_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT1_SWITCH_RIGHT,
- EL_CONVEYOR_BELT2_SWITCH_LEFT,
- EL_CONVEYOR_BELT2_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT2_SWITCH_RIGHT,
- EL_CONVEYOR_BELT3_SWITCH_LEFT,
- EL_CONVEYOR_BELT3_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT3_SWITCH_RIGHT,
- EL_CONVEYOR_BELT4_SWITCH_LEFT,
- EL_CONVEYOR_BELT4_SWITCH_MIDDLE,
- EL_CONVEYOR_BELT4_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_1_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_1_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_1_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_2_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_2_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_2_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_3_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_3_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_3_SWITCH_RIGHT,
+ EL_CONVEYOR_BELT_4_SWITCH_LEFT,
+ EL_CONVEYOR_BELT_4_SWITCH_MIDDLE,
+ EL_CONVEYOR_BELT_4_SWITCH_RIGHT,
};
static int ep_belt_switch_num = SIZEOF_ARRAY_INT(ep_belt_switch);
static int ep_tube[] =
{
- EL_TUBE_ALL,
+ EL_TUBE_ANY,
EL_TUBE_VERTICAL,
EL_TUBE_HORIZONTAL,
EL_TUBE_VERTICAL_LEFT,
EP_BIT_SCHLUESSEL,
EP_BIT_PFORTE,
EP_BIT_SOLID,
- EP_BIT_MASSIVE,
+ EP_BIT_INDESTRUCTIBLE,
EP_BIT_SLIPPERY,
EP_BIT_ENEMY,
EP_BIT_MAUER,
ep_schluessel,
ep_pforte,
ep_solid,
- ep_massive,
+ ep_indestructible,
ep_slippery,
ep_enemy,
ep_mauer,
&ep_schluessel_num,
&ep_pforte_num,
&ep_solid_num,
- &ep_massive_num,
+ &ep_indestructible_num,
&ep_slippery_num,
&ep_enemy_num,
&ep_mauer_num,
FreeAllImages();
FreeTileClipmasks();
- if (bitmap_font_initial)
- FreeBitmap(bitmap_font_initial);
-
CloseVideoDisplay();
ClosePlatformDependantStuff();