X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=6d32cd3b46158d149470e58a04e890ffd37a147e;hb=aacdd16335c68a011fab047272b828792a2a884e;hp=5274a2ac5a30aaa3f2808727564f0a60f90a95d7;hpb=87faaa07872dcc20b7a36a720529d284fc4447fd;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 5274a2ac..6d32cd3b 100644 --- a/src/init.c +++ b/src/init.c @@ -481,19 +481,19 @@ void InitElementGraphicInfo() /* now set all '-1' values to element specific default values */ for (i=0; i= MAX_NUM_ELEMENTS) + if (element_class < 0 || element_class >= MAX_NUM_ELEMENTS) continue; if (action < 0) action = ACTION_DEFAULT; - element_info[element].sound[action] = sound; + 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; } - /* initialize element class/sound mapping from dynamic configuration */ + /* initialize element/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; + int element = property_mapping[i].base_index; + int action = property_mapping[i].ext1_index; + int sound = property_mapping[i].artwork_index; - if (element_class < 0 || element_class >= MAX_NUM_ELEMENTS) + if (element >= 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; + element_info[element].sound[action] = sound; } /* now set all '-1' values to element specific default values */ for (i=0; i dont_collide_with */ - SET_PROPERTY(i, EP_DONT_COLLIDE_WITH, TRUE); + if (IS_CUSTOM_ELEMENT(i)) + { + /* ---------- DONT_COLLIDE_WITH / DONT_RUN_INTO ---------------------- */ + if (DONT_TOUCH(i)) + SET_PROPERTY(i, EP_DONT_COLLIDE_WITH, TRUE); + if (DONT_COLLIDE_WITH(i)) + SET_PROPERTY(i, EP_DONT_RUN_INTO, TRUE); + + /* ---------- CAN_SMASH_ENEMIES / CAN_SMASH_PLAYER ------------------- */ + if (CAN_SMASH_EVERYTHING(i)) + SET_PROPERTY(i, EP_CAN_SMASH_ENEMIES, TRUE); + if (CAN_SMASH_ENEMIES(i)) + SET_PROPERTY(i, EP_CAN_SMASH_PLAYER, TRUE); + } - /* ---------- DONT_RUN_INTO -------------------------------------------- */ - if (DONT_COLLIDE_WITH(i)) /* dont_collide_with => dont_run_into */ - SET_PROPERTY(i, EP_DONT_RUN_INTO, TRUE); + /* ---------- CAN_SMASH ------------------------------------------------ */ + SET_PROPERTY(i, EP_CAN_SMASH, (CAN_SMASH_PLAYER(i) || + CAN_SMASH_ENEMIES(i) || + CAN_SMASH_EVERYTHING(i))); + + /* ---------- CAN_EXPLODE ---------------------------------------------- */ + SET_PROPERTY(i, EP_CAN_EXPLODE, (CAN_EXPLODE_BY_FIRE(i) || + CAN_EXPLODE_SMASHED(i) || + CAN_EXPLODE_BY_FIRE(i))); } #if 0 @@ -2541,6 +2659,7 @@ void InitElementPropertiesEngine(int engine_version) engine_version > VERSION_IDENT(2,0,1))); } +#if 0 /* dynamically adjust element properties according to game engine version */ #if 0 if (engine_version < RELEASE_IDENT(2,2,0,7)) @@ -2554,6 +2673,7 @@ void InitElementPropertiesEngine(int engine_version) element_info[element].push_delay_random = 8; } } +#endif } static void InitGlobal() @@ -2687,6 +2807,16 @@ static void InitArtworkInfo() LoadArtworkInfo(); } +static char *get_string_in_brackets(char *string) +{ + char *string_in_brackets = checked_malloc(strlen(string) + 3); + + sprintf(string_in_brackets, "[%s]", string); + + return string_in_brackets; +} + +#if 0 static char *get_element_class_token(int element) { char *element_class_name = element_info[element].class_name; @@ -2697,10 +2827,21 @@ static char *get_element_class_token(int element) return element_class_token; } +static char *get_action_class_token(int action) +{ + char *action_class_name = &element_action_info[action].suffix[1]; + char *action_class_token = checked_malloc(strlen(action_class_name) + 3); + + sprintf(action_class_token, "[%s]", action_class_name); + + return action_class_token; +} +#endif + static void InitArtworkConfig() { 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 *sound_id_prefix[2 * 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]; @@ -2751,8 +2892,9 @@ static void InitArtworkConfig() for (i=0; i