X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=853588131e640718f8e6a5a81f073f7505d4367b;hb=1c636a51bb573815d24a27dcc20b3283d89d1b8b;hp=c0e3fce0f4b15e05c26ab701cc4bf76dab399e2c;hpb=92989af5d5884cbc8a1a9a62c9d05e109eaf78d0;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index c0e3fce0..85358813 100644 --- a/src/init.c +++ b/src/init.c @@ -111,7 +111,7 @@ static void InitTileClipmasks() int i; /* initialize pixmap array for special X11 tile clipping to Pixmap 'None' */ - for (i=0; iclip_mask) { @@ -149,11 +149,11 @@ static void InitTileClipmasks() clip_gc_valuemask, &clip_gc_values); /* create only those clipping Pixmaps we really need */ - for (i=0; tile_needs_clipping[i].start>=0; i++) + for (i = 0; tile_needs_clipping[i].start >= 0; i++) { int j; - for (j=0; jstored_clip_gc) { @@ -246,15 +246,15 @@ void InitElementSmallImages() int i; /* initialize normal images from static configuration */ - for (i=0; element_to_graphic[i].element > -1; i++) + for (i = 0; element_to_graphic[i].element > -1; i++) CreateImageWithSmallImages(element_to_graphic[i].graphic); /* initialize special images from static configuration */ - for (i=0; element_to_special_graphic[i].element > -1; i++) + for (i = 0; element_to_special_graphic[i].element > -1; i++) CreateImageWithSmallImages(element_to_special_graphic[i].graphic); /* initialize images from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + for (i = 0; i < num_property_mappings; i++) if (property_mapping[i].artwork_index < MAX_NUM_ELEMENTS) CreateImageWithSmallImages(property_mapping[i].artwork_index); } @@ -295,15 +295,15 @@ void InitFontGraphicInfo() /* always start with reliable default values (normal font graphics) */ #if 1 - for (i=0; i < NUM_FONTS; i++) + for (i = 0; i < NUM_FONTS; i++) font_info[i].graphic = IMG_FONT_INITIAL_1; #else - for (i=0; i < NUM_FONTS; i++) + for (i = 0; i < NUM_FONTS; i++) font_info[i].graphic = FONT_INITIAL_1; #endif /* initialize normal font/graphic mapping from static configuration */ - for (i=0; font_to_graphic[i].font_nr > -1; i++) + 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; @@ -316,9 +316,9 @@ void InitFontGraphicInfo() } /* always start with reliable default values (special font graphics) */ - for (i=0; i < NUM_FONTS; i++) + for (i = 0; i < NUM_FONTS; i++) { - for (j=0; j < NUM_SPECIAL_GFX_ARGS; j++) + 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; @@ -326,7 +326,7 @@ void InitFontGraphicInfo() } /* initialize special font/graphic mapping from static configuration */ - for (i=0; font_to_graphic[i].font_nr > -1; i++) + 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; @@ -341,7 +341,7 @@ void InitFontGraphicInfo() } /* initialize special element/graphic mapping from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + 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; @@ -368,7 +368,7 @@ void InitFontGraphicInfo() /* ---------- initialize font bitmap definitions ---------- */ - for (i=0; i < NUM_FONTS; i++) + for (i = 0; i < NUM_FONTS; i++) { if (i < NUM_INITIAL_FONTS) { @@ -376,7 +376,7 @@ void InitFontGraphicInfo() continue; } - for (j=0; j < NUM_SPECIAL_GFX_ARGS; j++) + 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]; @@ -413,15 +413,18 @@ void InitElementGraphicInfo() int num_property_mappings = getImageListPropertyMappingSize(); int i, act, dir; + if (graphic_info == NULL) /* still at startup phase */ + return; + /* set values to -1 to identify later as "uninitialized" values */ - for (i=0; i -1; i++) + for (i = 0; element_to_graphic[i].element > -1; i++) { int element = element_to_graphic[i].element; int action = element_to_graphic[i].action; @@ -475,7 +478,7 @@ void InitElementGraphicInfo() } /* initialize normal element/graphic mapping from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + for (i = 0; i < num_property_mappings; i++) { int element = property_mapping[i].base_index; int action = property_mapping[i].ext1_index; @@ -502,7 +505,7 @@ void InitElementGraphicInfo() if (crumbled) { if (direction < 0) - for (dir=0; dir -1) @@ -513,7 +516,7 @@ void InitElementGraphicInfo() else { if (direction < 0) - for (dir=0; dir -1) @@ -524,7 +527,7 @@ void InitElementGraphicInfo() } /* now copy all graphics that are defined to be cloned from other graphics */ - for (i=0; i 0 && graphic_info[graphic].bitmap == NULL) element_info[i].crumbled[act] = -1; - for (dir=0; dir 0 && graphic_info[graphic].bitmap == NULL) @@ -587,7 +590,7 @@ void InitElementGraphicInfo() #endif /* now set all '-1' values to element specific default values */ - for (i=0; i -1; i++) + for (i = 0; element_to_special_graphic[i].element > -1; i++) { int element = element_to_special_graphic[i].element; int special = element_to_special_graphic[i].special; @@ -761,7 +773,7 @@ void InitElementSpecialGraphicInfo() } /* initialize special element/graphic mapping from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + for (i = 0; i < num_property_mappings; i++) { int element = property_mapping[i].base_index; int special = property_mapping[i].ext3_index; @@ -776,8 +788,8 @@ void InitElementSpecialGraphicInfo() #if 1 /* now set all undefined/invalid graphics to default */ - for (i=0; i < MAX_NUM_ELEMENTS; i++) - for (j=0; j < NUM_SPECIAL_GFX_ARGS; j++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) + for (j = 0; j < NUM_SPECIAL_GFX_ARGS; j++) if (graphic_info[element_info[i].special_graphic[j]].bitmap == NULL) element_info[i].special_graphic[j] = element_info[i].graphic[ACTION_DEFAULT]; @@ -788,7 +800,7 @@ static int get_element_from_token(char *token) { int i; - for (i=0; i < MAX_NUM_ELEMENTS; i++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) if (strcmp(element_info[i].token_name, token) == 0) return i; @@ -804,7 +816,7 @@ static void set_graphic_parameters(int graphic, char **parameter_raw) int i; /* get integer values from string parameters */ - for (i=0; i < NUM_GFX_ARGS; i++) + for (i = 0; i < NUM_GFX_ARGS; i++) { parameter[i] = get_parameter_value(image_config_suffix[i].token, parameter_raw[i], @@ -826,6 +838,10 @@ static void set_graphic_parameters(int graphic, char **parameter_raw) graphic_info[graphic].crumbled_like = -1; /* do not use clone element */ graphic_info[graphic].diggable_like = -1; /* do not use clone element */ graphic_info[graphic].border_size = TILEX / 8; /* "CRUMBLED" border size */ + graphic_info[graphic].anim_delay_fixed = 0; + graphic_info[graphic].anim_delay_random = 0; + graphic_info[graphic].post_delay_fixed = 0; + graphic_info[graphic].post_delay_random = 0; /* optional x and y tile position of animation frame sequence */ if (parameter[GFX_ARG_XPOS] != ARG_UNDEFINED_VALUE) @@ -921,6 +937,20 @@ static void set_graphic_parameters(int graphic, char **parameter_raw) if (parameter[GFX_ARG_BORDER_SIZE] != ARG_UNDEFINED_VALUE) graphic_info[graphic].border_size = parameter[GFX_ARG_BORDER_SIZE]; + /* this is only used for player "boring" and "sleeping" actions */ + if (parameter[GFX_ARG_ANIM_DELAY_FIXED] != ARG_UNDEFINED_VALUE) + graphic_info[graphic].anim_delay_fixed = + parameter[GFX_ARG_ANIM_DELAY_FIXED]; + if (parameter[GFX_ARG_ANIM_DELAY_RANDOM] != ARG_UNDEFINED_VALUE) + graphic_info[graphic].anim_delay_random = + parameter[GFX_ARG_ANIM_DELAY_RANDOM]; + if (parameter[GFX_ARG_POST_DELAY_FIXED] != ARG_UNDEFINED_VALUE) + graphic_info[graphic].post_delay_fixed = + parameter[GFX_ARG_POST_DELAY_FIXED]; + if (parameter[GFX_ARG_POST_DELAY_RANDOM] != ARG_UNDEFINED_VALUE) + graphic_info[graphic].post_delay_random = + parameter[GFX_ARG_POST_DELAY_RANDOM]; + /* 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]; @@ -949,8 +979,7 @@ static void InitGraphicInfo() GC copy_clipmask_gc = None; #endif - if (graphic_info != NULL) - free(graphic_info); + checked_free(graphic_info); graphic_info = checked_calloc(num_images * sizeof(struct GraphicInfo)); @@ -961,7 +990,7 @@ static void InitGraphicInfo() #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) if (clipmasks_initialized) { - for (i=0; i -1; i++) + for (i = 0; element_to_sound[i].element > -1; i++) { int element = element_to_sound[i].element; int action = element_to_sound[i].action; @@ -1117,14 +1146,14 @@ static void InitElementSoundInfo() if (!is_class) element_info[element].sound[action] = sound; else - for (j=0; j < MAX_NUM_ELEMENTS; j++) + 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 class/sound mapping from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + 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; @@ -1136,14 +1165,14 @@ static void InitElementSoundInfo() if (action < 0) action = ACTION_DEFAULT; - for (j=0; j < MAX_NUM_ELEMENTS; j++) + 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/sound mapping from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + for (i = 0; i < num_property_mappings; i++) { int element = property_mapping[i].base_index; int action = property_mapping[i].ext1_index; @@ -1159,9 +1188,9 @@ static void InitElementSoundInfo() } /* now set all '-1' values to element specific default values */ - for (i=0; i -1; i++) + for (i = 0; gamemode_to_sound[i].sound > -1; i++) { int gamemode = gamemode_to_sound[i].gamemode; int sound = gamemode_to_sound[i].sound; @@ -1206,13 +1238,13 @@ static void InitGameModeSoundInfo() } /* now set all '-1' values to levelset specific default values */ - for (i=0; i < NUM_SPECIAL_GFX_ARGS; i++) + for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) if (menu.sound[i] == -1) menu.sound[i] = menu.sound[GAME_MODE_DEFAULT]; #if 0 /* TEST ONLY */ - for (i=0; i < NUM_SPECIAL_GFX_ARGS; i++) + for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) if (menu.sound[i] != -1) printf("::: menu.sound[%d] == %d\n", i, menu.sound[i]); #endif @@ -1224,7 +1256,7 @@ static void set_sound_parameters(int sound, char **parameter_raw) int i; /* get integer values from string parameters */ - for (i=0; i < NUM_SND_ARGS; i++) + for (i = 0; i < NUM_SND_ARGS; i++) parameter[i] = get_parameter_value(sound_config_suffix[i].token, parameter_raw[i], sound_config_suffix[i].type); @@ -1244,18 +1276,17 @@ static void InitSoundInfo() int num_sounds = getSoundListSize(); int i, j; - if (sound_info != NULL) - free(sound_info); + checked_free(sound_info); sound_effect_properties = checked_calloc(num_sounds * sizeof(int)); sound_info = checked_calloc(num_sounds * sizeof(struct SoundInfo)); /* initialize sound effect for all elements to "no sound" */ - for (i=0; i < MAX_NUM_ELEMENTS; i++) - for (j=0; j < NUM_ACTIONS; j++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) + for (j = 0; j < NUM_ACTIONS; j++) element_info[i].sound[j] = SND_UNDEFINED; - for (i=0; i < num_sounds; i++) + for (i = 0; i < num_sounds; i++) { struct FileInfo *sound = getSoundListEntry(i); int len_effect_text = strlen(sound->token); @@ -1269,7 +1300,7 @@ static void InitSoundInfo() /* determine all loop sounds and identify certain sound classes */ - for (j=0; element_action_info[j].suffix; j++) + for (j = 0; element_action_info[j].suffix; j++) { int len_action_text = strlen(element_action_info[j].suffix); @@ -1291,7 +1322,7 @@ static void InitSoundInfo() /* associate elements and some selected sound actions */ - for (j=0; j < MAX_NUM_ELEMENTS; j++) + for (j = 0; j < MAX_NUM_ELEMENTS; j++) { if (element_info[j].class_name) { @@ -1317,7 +1348,7 @@ static void InitSoundInfo() #if 0 /* !!! now handled in InitElementSoundInfo() !!! */ /* initialize element/sound mapping from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + for (i = 0; i < num_property_mappings; i++) { int element = property_mapping[i].base_index; int action = property_mapping[i].ext1_index; @@ -1378,13 +1409,13 @@ static void InitGameModeMusicInfo() int i; /* set values to -1 to identify later as "uninitialized" values */ - for (i=0; i < MAX_LEVELS; i++) + for (i = 0; i < MAX_LEVELS; i++) levelset.music[i] = -1; - for (i=0; i < NUM_SPECIAL_GFX_ARGS; i++) + for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) menu.music[i] = -1; /* initialize gamemode/music mapping from static configuration */ - for (i=0; gamemode_to_music[i].music > -1; i++) + for (i = 0; gamemode_to_music[i].music > -1; i++) { int gamemode = gamemode_to_music[i].gamemode; int music = gamemode_to_music[i].music; @@ -1400,7 +1431,7 @@ static void InitGameModeMusicInfo() } /* initialize gamemode/music mapping from dynamic configuration */ - for (i=0; i < num_property_mappings; i++) + for (i = 0; i < num_property_mappings; i++) { int prefix = property_mapping[i].base_index; int gamemode = property_mapping[i].ext1_index; @@ -1437,19 +1468,19 @@ static void InitGameModeMusicInfo() /* now set all '-1' values to menu specific default values */ /* (undefined values of "levelset.music[]" might stay at "-1" to allow dynamic selection of music files from music directory!) */ - for (i=0; i < MAX_LEVELS; i++) + for (i = 0; i < MAX_LEVELS; i++) if (levelset.music[i] == -1) levelset.music[i] = default_levelset_music; - for (i=0; i < NUM_SPECIAL_GFX_ARGS; i++) + for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) if (menu.music[i] == -1) menu.music[i] = menu.music[GAME_MODE_DEFAULT]; #if 0 /* TEST ONLY */ - for (i=0; i < MAX_LEVELS; i++) + for (i = 0; i < MAX_LEVELS; i++) if (levelset.music[i] != -1) printf("::: levelset.music[%d] == %d\n", i, levelset.music[i]); - for (i=0; i < NUM_SPECIAL_GFX_ARGS; i++) + for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) if (menu.music[i] != -1) printf("::: menu.music[%d] == %d\n", i, menu.music[i]); #endif @@ -1461,7 +1492,7 @@ static void set_music_parameters(int music, char **parameter_raw) int i; /* get integer values from string parameters */ - for (i=0; i < NUM_MUS_ARGS; i++) + for (i = 0; i < NUM_MUS_ARGS; i++) parameter[i] = get_parameter_value(music_config_suffix[i].token, parameter_raw[i], music_config_suffix[i].type); @@ -1476,12 +1507,11 @@ static void InitMusicInfo() int num_music = getMusicListSize(); int i, j; - if (music_info != NULL) - free(music_info); + checked_free(music_info); music_info = checked_calloc(num_music * sizeof(struct MusicInfo)); - for (i=0; i < num_music; i++) + for (i = 0; i < num_music; i++) { struct FileInfo *music = getMusicListEntry(i); int len_music_text = strlen(music->token); @@ -1490,7 +1520,7 @@ static void InitMusicInfo() /* determine all loop music */ - for (j=0; music_prefix_info[j].prefix; j++) + for (j = 0; music_prefix_info[j].prefix; j++) { int len_prefix_text = strlen(music_prefix_info[j].prefix); @@ -2049,6 +2079,16 @@ void InitElementPropertiesStatic() -1 }; + static int ep_can_explode_dyna[] = + { + -1 + }; + + static int ep_protected[] = + { + -1 + }; + static int ep_player[] = { EL_PLAYER_1, @@ -2129,6 +2169,7 @@ void InitElementPropertiesStatic() EL_BD_BUTTERFLY_4, EL_BD_AMOEBA, EL_CHAR_QUESTION, + EL_UNKNOWN, -1 }; @@ -2820,6 +2861,8 @@ void InitElementPropertiesStatic() { ep_droppable, EP_DROPPABLE }, { ep_can_explode_1x1, EP_CAN_EXPLODE_1X1 }, { ep_pushable, EP_PUSHABLE }, + { ep_can_explode_dyna, EP_CAN_EXPLODE_DYNA }, + { ep_protected, EP_PROTECTED }, { ep_player, EP_PLAYER }, { ep_can_pass_magic_wall, EP_CAN_PASS_MAGIC_WALL }, @@ -2888,21 +2931,21 @@ void InitElementPropertiesStatic() int i, j, k; /* always start with reliable default values (element has no properties) */ - for (i=0; i < MAX_NUM_ELEMENTS; i++) - for (j=0; j < NUM_ELEMENT_PROPERTIES; j++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) + for (j = 0; j < NUM_ELEMENT_PROPERTIES; j++) SET_PROPERTY(i, j, FALSE); /* set all base element properties from above array definitions */ - for (i=0; element_properties[i].elements != NULL; i++) - for (j=0; (element_properties[i].elements)[j] != -1; j++) + for (i = 0; element_properties[i].elements != NULL; i++) + for (j = 0; (element_properties[i].elements)[j] != -1; j++) SET_PROPERTY((element_properties[i].elements)[j], element_properties[i].property, TRUE); /* copy properties to some elements that are only stored in level file */ - for (i=0; i < NUM_ELEMENT_PROPERTIES; i++) - for (j=0; copy_properties[j][0] != -1; j++) + for (i = 0; i < NUM_ELEMENT_PROPERTIES; i++) + for (j = 0; copy_properties[j][0] != -1; j++) if (HAS_PROPERTY(copy_properties[j][0], i)) - for (k=1; k<=4; k++) + for (k = 1; k <= 4; k++) SET_PROPERTY(copy_properties[j][k], i, TRUE); } @@ -2975,10 +3018,10 @@ void InitElementPropertiesEngine(int engine_version) #endif /* set all special, combined or engine dependent element properties */ - for (i=0; i < MAX_NUM_ELEMENTS; i++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) { #if 0 - for (j=EP_ACCESSIBLE_OVER; j < NUM_ELEMENT_PROPERTIES; j++) + for (j = EP_ACCESSIBLE_OVER; j < NUM_ELEMENT_PROPERTIES; j++) SET_PROPERTY(i, j, FALSE); #endif @@ -3020,7 +3063,7 @@ void InitElementPropertiesEngine(int engine_version) /* ---------- WALL ----------------------------------------------------- */ SET_PROPERTY(i, EP_WALL, TRUE); /* default: element is wall */ - for (j=0; no_wall_properties[j] != -1; j++) + for (j = 0; no_wall_properties[j] != -1; j++) if (HAS_PROPERTY(i, no_wall_properties[j]) || i >= EL_FIRST_RUNTIME_UNREAL) SET_PROPERTY(i, EP_WALL, FALSE); @@ -3044,6 +3087,10 @@ void InitElementPropertiesEngine(int engine_version) SET_PROPERTY(i, EP_DRAGONFIRE_PROOF, (IS_CUSTOM_ELEMENT(i) && IS_INDESTRUCTIBLE(i))); + /* ---------- PROTECTED ------------------------------------------------ */ + if (IS_ACCESSIBLE_INSIDE(i)) + SET_PROPERTY(i, EP_PROTECTED, TRUE); + /* ---------- EXPLOSION_PROOF ------------------------------------------ */ if (i == EL_FLAMES) SET_PROPERTY(i, EP_EXPLOSION_PROOF, TRUE); @@ -3051,8 +3098,7 @@ void InitElementPropertiesEngine(int engine_version) SET_PROPERTY(i, EP_EXPLOSION_PROOF, IS_INDESTRUCTIBLE(i)); else SET_PROPERTY(i, EP_EXPLOSION_PROOF, (IS_INDESTRUCTIBLE(i) && - !IS_WALKABLE_OVER(i) && - !IS_WALKABLE_UNDER(i))); + IS_PROTECTED(i))); if (IS_CUSTOM_ELEMENT(i)) { @@ -3081,11 +3127,25 @@ void InitElementPropertiesEngine(int engine_version) /* ---------- CAN_EXPLODE_3X3 ------------------------------------------ */ SET_PROPERTY(i, EP_CAN_EXPLODE_3X3, (CAN_EXPLODE(i) && - !CAN_EXPLODE_1X1(i))); + !CAN_EXPLODE_1X1(i) && + !CAN_EXPLODE_DYNA(i))); + + /* ---------- SP_PORT -------------------------------------------------- */ + SET_PROPERTY(i, EP_SP_PORT, (IS_SP_ELEMENT(i) && + IS_PASSABLE_INSIDE(i))); + +#if 0 + if (i == EL_CUSTOM_START + 253) + printf("::: %d, %d, %d -> %d\n", + CAN_EXPLODE_1X1(i), + CAN_EXPLODE_3X3(i), + CAN_EXPLODE_DYNA(i), + CAN_EXPLODE(i)); +#endif /* ---------- CAN_CHANGE ----------------------------------------------- */ SET_PROPERTY(i, EP_CAN_CHANGE, FALSE); /* default: cannot change */ - for (j=0; j < element_info[i].num_change_pages; j++) + for (j = 0; j < element_info[i].num_change_pages; j++) if (element_info[i].change_page[j].can_change) SET_PROPERTY(i, EP_CAN_CHANGE, TRUE); @@ -3096,11 +3156,11 @@ void InitElementPropertiesEngine(int engine_version) #if 0 /* determine inactive elements (used for engine main loop optimization) */ - for (i=0; i < MAX_NUM_ELEMENTS; i++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) { boolean active = FALSE; - for (j=0; i < NUM_ELEMENT_PROPERTIES; j++) + for (j = 0; i < NUM_ELEMENT_PROPERTIES; j++) { if (HAS_PROPERTY(i, j)) active = TRUE; @@ -3127,7 +3187,7 @@ void InitElementPropertiesEngine(int engine_version) }; /* special EM style gems behaviour */ - for (i=0; ep_em_slippery_wall[i] != -1; i++) + for (i = 0; ep_em_slippery_wall[i] != -1; i++) SET_PROPERTY(ep_em_slippery_wall[i], EP_EM_SLIPPERY_WALL, level.em_slippery_gems); @@ -3151,7 +3211,7 @@ void InitElementPropertiesEngine(int engine_version) } /* set uninitialized push delay values of custom elements in older levels */ - for (i=0; i < NUM_CUSTOM_ELEMENTS; i++) + for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++) { int element = EL_CUSTOM_START + i; @@ -3161,6 +3221,10 @@ void InitElementPropertiesEngine(int engine_version) element_info[element].push_delay_random = game.default_push_delay_random; } #endif + + /* this is needed because some graphics depend on element properties */ + if (game_status == GAME_MODE_PLAYING) + InitElementGraphicInfo(); } static void InitGlobal() @@ -3174,51 +3238,92 @@ static void InitGlobal() void Execute_Command(char *command) { + int i; + if (strcmp(command, "print graphicsinfo.conf") == 0) { - int i; - printf("# You can configure additional/alternative image files here.\n"); - printf("# (The images below are default and therefore commented out.)\n"); + printf("# (The entries below are default and therefore commented out.)\n"); printf("\n"); printf("%s\n", getFormattedSetupEntry("name", "Classic Graphics")); printf("\n"); printf("%s\n", getFormattedSetupEntry("sort_priority", "100")); printf("\n"); - for (i=0; image_config[i].token != NULL; i++) - printf("# %s\n", - getFormattedSetupEntry(image_config[i].token, - image_config[i].value)); + for (i = 0; image_config[i].token != NULL; i++) + printf("# %s\n", getFormattedSetupEntry(image_config[i].token, + image_config[i].value)); exit(0); } else if (strcmp(command, "print soundsinfo.conf") == 0) { - int i; - printf("# You can configure additional/alternative sound files here.\n"); - printf("# (The sounds below are default and therefore commented out.)\n"); + printf("# (The entries below are default and therefore commented out.)\n"); printf("\n"); printf("%s\n", getFormattedSetupEntry("name", "Classic Sounds")); printf("\n"); printf("%s\n", getFormattedSetupEntry("sort_priority", "100")); printf("\n"); - for (i=0; sound_config[i].token != NULL; i++) - printf("# %s\n", - getFormattedSetupEntry(sound_config[i].token, - sound_config[i].value)); + for (i = 0; sound_config[i].token != NULL; i++) + printf("# %s\n", getFormattedSetupEntry(sound_config[i].token, + sound_config[i].value)); exit(0); } else if (strcmp(command, "print musicinfo.conf") == 0) { - printf("# (Currently only \"name\" and \"sort_priority\" recognized.)\n"); + printf("# You can configure additional/alternative music files here.\n"); + printf("# (The entries below are default and therefore commented out.)\n"); printf("\n"); printf("%s\n", getFormattedSetupEntry("name", "Classic Music")); printf("\n"); printf("%s\n", getFormattedSetupEntry("sort_priority", "100")); + printf("\n"); + + for (i = 0; music_config[i].token != NULL; i++) + printf("# %s\n", getFormattedSetupEntry(music_config[i].token, + music_config[i].value)); + + exit(0); + } + else if (strcmp(command, "print editorsetup.conf") == 0) + { + printf("# You can configure your personal editor element list here.\n"); + printf("# (The entries below are default and therefore commented out.)\n"); + printf("\n"); + + PrintEditorElementList(); + + exit(0); + } + else if (strcmp(command, "print helpanim.conf") == 0) + { + printf("# You can configure different element help animations here.\n"); + printf("# (The entries below are default and therefore commented out.)\n"); + printf("\n"); + + for (i = 0; helpanim_config[i].token != NULL; i++) + { + printf("# %s\n", getFormattedSetupEntry(helpanim_config[i].token, + helpanim_config[i].value)); + + if (strcmp(helpanim_config[i].token, "end") == 0) + printf("#\n"); + } + + exit(0); + } + else if (strcmp(command, "print helptext.conf") == 0) + { + printf("# You can configure different element help text here.\n"); + printf("# (The entries below are default and therefore commented out.)\n"); + printf("\n"); + + for (i = 0; helptext_config[i].token != NULL; i++) + printf("# %s\n", getFormattedSetupEntry(helptext_config[i].token, + helptext_config[i].value)); exit(0); } @@ -3283,7 +3388,7 @@ static void InitPlayerInfo() /* choose default local player */ local_player = &stored_player[0]; - for (i=0; iconnected = TRUE; @@ -3364,18 +3469,18 @@ static void InitArtworkConfig() /* dynamically determine list of generic tokens to be ignored */ num_ignore_generic_tokens = 0; - for (i=0; ignore_generic_tokens[i] != NULL; i++) + for (i = 0; ignore_generic_tokens[i] != NULL; i++) num_ignore_generic_tokens++; /* dynamically determine list of image tokens to be ignored */ num_ignore_image_tokens = num_ignore_generic_tokens; - for (i=0; image_config_vars[i].token != NULL; i++) + for (i = 0; image_config_vars[i].token != NULL; i++) num_ignore_image_tokens++; ignore_image_tokens = checked_malloc((num_ignore_image_tokens + 1) * sizeof(char *)); - for (i=0; i < num_ignore_generic_tokens; i++) + for (i = 0; i < num_ignore_generic_tokens; i++) ignore_image_tokens[i] = ignore_generic_tokens[i]; - for (i=0; i < num_ignore_image_tokens - num_ignore_generic_tokens; i++) + for (i = 0; i < num_ignore_image_tokens - num_ignore_generic_tokens; i++) ignore_image_tokens[num_ignore_generic_tokens + i] = image_config_vars[i].token; ignore_image_tokens[num_ignore_image_tokens] = NULL; @@ -3384,7 +3489,7 @@ static void InitArtworkConfig() num_ignore_sound_tokens = num_ignore_generic_tokens; ignore_sound_tokens = checked_malloc((num_ignore_sound_tokens + 1) * sizeof(char *)); - for (i=0; i < num_ignore_generic_tokens; i++) + for (i = 0; i < num_ignore_generic_tokens; i++) ignore_sound_tokens[i] = ignore_generic_tokens[i]; ignore_sound_tokens[num_ignore_sound_tokens] = NULL; @@ -3392,40 +3497,40 @@ static void InitArtworkConfig() num_ignore_music_tokens = num_ignore_generic_tokens; ignore_music_tokens = checked_malloc((num_ignore_music_tokens + 1) * sizeof(char *)); - for (i=0; i < num_ignore_generic_tokens; i++) + for (i = 0; i < num_ignore_generic_tokens; i++) ignore_music_tokens[i] = ignore_generic_tokens[i]; ignore_music_tokens[num_ignore_music_tokens] = NULL; - for (i=0; i < MAX_NUM_ELEMENTS; i++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) image_id_prefix[i] = element_info[i].token_name; - for (i=0; i < NUM_FONTS; i++) + 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++) + 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++) + for (i = 0; i < MAX_NUM_ELEMENTS; i++) sound_id_prefix[MAX_NUM_ELEMENTS + i] = get_string_in_brackets(element_info[i].class_name); sound_id_prefix[2 * MAX_NUM_ELEMENTS] = NULL; - for (i=0; i < NUM_MUSIC_PREFIXES; i++) + for (i = 0; i < NUM_MUSIC_PREFIXES; i++) music_id_prefix[i] = music_prefix_info[i].prefix; music_id_prefix[MAX_LEVELS] = NULL; - for (i=0; i < NUM_ACTIONS; i++) + 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++) + 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++) + 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; - for (i=0; i < MAX_LEVELS; i++) + for (i = 0; i < MAX_LEVELS; i++) level_id_suffix[i] = get_level_id_suffix(i); level_id_suffix[MAX_LEVELS] = NULL; @@ -3453,9 +3558,9 @@ void InitGfx() int i, j; /* determine settings for initial font (for displaying startup messages) */ - for (i=0; image_config[i].token != NULL; i++) + for (i = 0; image_config[i].token != NULL; i++) { - for (j=0; j < NUM_INITIAL_FONTS; j++) + for (j = 0; j < NUM_INITIAL_FONTS; j++) { char font_token[128]; int len_font_token; @@ -3480,7 +3585,7 @@ void InitGfx() } } - for (j=0; j < NUM_INITIAL_FONTS; j++) + for (j = 0; j < NUM_INITIAL_FONTS; j++) { font_initial[j].num_chars = DEFAULT_NUM_CHARS_PER_FONT; font_initial[j].num_chars_per_line = DEFAULT_NUM_CHARS_PER_LINE; @@ -3503,7 +3608,7 @@ void InitGfx() bitmap_font_initial = LoadCustomImage(filename_font_initial); - for (j=0; j < NUM_INITIAL_FONTS; j++) + for (j = 0; j < NUM_INITIAL_FONTS; j++) font_initial[j].bitmap = bitmap_font_initial; InitFontGraphicInfo(); @@ -3529,8 +3634,8 @@ void InitGfxBackground() ClearRectangle(backbuffer, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE); ClearRectangle(bitmap_db_door, 0, 0, 3 * DXSIZE, DYSIZE + VYSIZE); - for (x=0; x '%s' ['%s', '%s']\n", @@ -3767,7 +3875,7 @@ void ReloadCustomArtwork() redraw_screen = TRUE; } - if (snd_new_identifier != NULL) + if (snd_new_identifier != NULL || force_reload_snd) { ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE); @@ -3776,7 +3884,7 @@ void ReloadCustomArtwork() redraw_screen = TRUE; } - if (mus_new_identifier != NULL) + if (mus_new_identifier != NULL || force_reload_mus) { ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE);