X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=05619cc4c1fecfd35b7204760c04949fbceb1782;hb=7a821f79cb735d048869b503279c402800afa44a;hp=229cba0a6512abd9eb5794ade523d49b9689d00e;hpb=4386c0ac1665619412148f1eb907f6d366a70d7d;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 229cba0a..05619cc4 100644 --- a/src/init.c +++ b/src/init.c @@ -548,6 +548,36 @@ void InitElementGraphicInfo() } } +#if 1 + /* now set all undefined/invalid graphics to -1 to set to default after it */ + for (i=0; i 0 && graphic_info[graphic].bitmap == NULL) + element_info[i].graphic[act] = -1; + + graphic = element_info[i].crumbled[act]; + if (graphic > 0 && graphic_info[graphic].bitmap == NULL) + element_info[i].crumbled[act] = -1; + + for (dir=0; dir 0 && graphic_info[graphic].bitmap == NULL) + element_info[i].direction_graphic[act][dir] = -1; + + graphic = element_info[i].direction_crumbled[act][dir]; + if (graphic > 0 && graphic_info[graphic].bitmap == NULL) + element_info[i].direction_crumbled[act][dir] = -1; + } + } + } +#endif + /* now set all '-1' values to element specific default values */ for (i=0; i= 0 && special < NUM_SPECIAL_GFX_ARGS) element_info[element].special_graphic[special] = graphic; } + +#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++) + if (graphic_info[element_info[i].special_graphic[j]].bitmap == NULL) + element_info[i].special_graphic[j] = + element_info[i].graphic[ACTION_DEFAULT]; +#endif } static int get_element_from_token(char *token) @@ -855,6 +894,10 @@ static void InitGraphicInfo() graphic_info = checked_calloc(num_images * sizeof(struct GraphicInfo)); +#if 0 + printf("::: graphic_info: %d entries\n", num_images); +#endif + #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) if (clipmasks_initialized) { @@ -879,7 +922,7 @@ static void InitGraphicInfo() int first_frame, last_frame; #if 0 - printf("::: image: '%s'\n", image->token); + printf("::: image: '%s' [%d]\n", image->token, i); #endif #if 0 @@ -1284,7 +1327,7 @@ void InitElementPropertiesStatic() -1 }; - static int ep_collectible[] = + static int ep_collectible_only[] = { EL_BD_DIAMOND, EL_EMERALD, @@ -1421,7 +1464,7 @@ void InitElementPropertiesStatic() EL_SIGN_EXIT, EL_SIGN_YINYANG, EL_SIGN_OTHER, - EL_STEELWALL_SLANTED, + EL_STEELWALL_SLIPPERY, EL_EMC_STEELWALL_1, EL_EMC_STEELWALL_2, EL_EMC_STEELWALL_3, @@ -1475,7 +1518,7 @@ void InitElementPropertiesStatic() static int ep_slippery[] = { - EL_WALL_CRUMBLED, + EL_WALL_SLIPPERY, EL_BD_WALL, EL_ROCK, EL_BD_ROCK, @@ -1504,7 +1547,7 @@ void InitElementPropertiesStatic() EL_SP_CHIP_TOP, EL_SP_CHIP_BOTTOM, EL_SPEED_PILL, - EL_STEELWALL_SLANTED, + EL_STEELWALL_SLIPPERY, EL_PEARL, EL_CRYSTAL, -1 @@ -1774,6 +1817,7 @@ void InitElementPropertiesStatic() EL_PLAYER_2, EL_PLAYER_3, EL_PLAYER_4, + EL_SP_MURPHY, -1 }; @@ -1825,7 +1869,7 @@ void InitElementPropertiesStatic() { EL_EMPTY, EL_SAND, - EL_WALL_CRUMBLED, + EL_WALL_SLIPPERY, EL_BD_WALL, EL_ROCK, EL_BD_ROCK, @@ -2002,7 +2046,7 @@ void InitElementPropertiesStatic() EL_EXIT_OPENING, EL_EXIT_OPEN, EL_WALL, - EL_WALL_CRUMBLED, + EL_WALL_SLIPPERY, EL_EXPANDABLE_WALL, EL_EXPANDABLE_WALL_HORIZONTAL, EL_EXPANDABLE_WALL_VERTICAL, @@ -2033,7 +2077,7 @@ void InitElementPropertiesStatic() EL_INVISIBLE_STEELWALL_ACTIVE, EL_INVISIBLE_WALL, EL_INVISIBLE_WALL_ACTIVE, - EL_STEELWALL_SLANTED, + EL_STEELWALL_SLIPPERY, EL_EMC_STEELWALL_1, EL_EMC_STEELWALL_2, EL_EMC_STEELWALL_3, @@ -2057,7 +2101,7 @@ void InitElementPropertiesStatic() EL_EXPANDABLE_WALL_VERTICAL, EL_EXPANDABLE_WALL_ANY, EL_BD_WALL, - EL_WALL_CRUMBLED, + EL_WALL_SLIPPERY, EL_EXIT_CLOSED, EL_EXIT_OPENING, EL_EXIT_OPEN, @@ -2160,7 +2204,7 @@ void InitElementPropertiesStatic() EL_SIGN_EXIT, EL_SIGN_YINYANG, EL_SIGN_OTHER, - EL_STEELWALL_SLANTED, + EL_STEELWALL_SLIPPERY, EL_EMC_STEELWALL_1, EL_EMC_STEELWALL_2, EL_EMC_STEELWALL_3, @@ -2354,7 +2398,7 @@ void InitElementPropertiesStatic() EL_SAND, EL_WALL, EL_BD_WALL, - EL_WALL_CRUMBLED, + EL_WALL_SLIPPERY, EL_STEELWALL, EL_AMOEBA_DEAD, EL_QUICKSAND_EMPTY, @@ -2472,7 +2516,7 @@ void InitElementPropertiesStatic() EL_SIGN_EXIT, EL_SIGN_YINYANG, EL_SIGN_OTHER, - EL_STEELWALL_SLANTED, + EL_STEELWALL_SLIPPERY, EL_EMC_STEELWALL_1, EL_EMC_STEELWALL_2, EL_EMC_STEELWALL_3, @@ -2495,7 +2539,7 @@ void InitElementPropertiesStatic() } element_properties[] = { { ep_diggable, EP_DIGGABLE }, - { ep_collectible, EP_COLLECTIBLE }, + { ep_collectible_only, EP_COLLECTIBLE_ONLY }, { ep_dont_run_into, EP_DONT_RUN_INTO }, { ep_dont_collide_with, EP_DONT_COLLIDE_WITH }, { ep_dont_touch, EP_DONT_TOUCH }, @@ -2639,7 +2683,7 @@ void InitElementPropertiesEngine(int engine_version) static int no_wall_properties[] = { EP_DIGGABLE, - EP_COLLECTIBLE, + EP_COLLECTIBLE_ONLY, EP_DONT_RUN_INTO, EP_DONT_COLLIDE_WITH, EP_CAN_MOVE, @@ -2705,6 +2749,10 @@ void InitElementPropertiesEngine(int engine_version) SET_PROPERTY(i, EP_ACCESSIBLE, (IS_WALKABLE(i) || IS_PASSABLE(i))); + /* ---------- COLLECTIBLE ---------------------------------------------- */ + SET_PROPERTY(i, EP_COLLECTIBLE, (IS_COLLECTIBLE_ONLY(i) || + IS_DROPPABLE(i))); + /* ---------- SNAPPABLE ------------------------------------------------ */ SET_PROPERTY(i, EP_SNAPPABLE, (IS_DIGGABLE(i) || IS_COLLECTIBLE(i) || @@ -2773,6 +2821,10 @@ void InitElementPropertiesEngine(int engine_version) CAN_EXPLODE_SMASHED(i) || CAN_EXPLODE_IMPACT(i))); + /* ---------- CAN_EXPLODE_3X3 ------------------------------------------ */ + SET_PROPERTY(i, EP_CAN_EXPLODE_3X3, (CAN_EXPLODE(i) && + !CAN_EXPLODE_1X1(i))); + /* ---------- CAN_BE_CRUMBLED ------------------------------------------ */ SET_PROPERTY(i, EP_CAN_BE_CRUMBLED, element_info[i].crumbled[ACTION_DEFAULT] != IMG_EMPTY); @@ -2783,6 +2835,12 @@ void InitElementPropertiesEngine(int engine_version) element_info[i].token_name, element_info[i].crumbled[ACTION_DEFAULT]); #endif + + /* ---------- CAN_CHANGE ----------------------------------------------- */ + SET_PROPERTY(i, EP_CAN_CHANGE, FALSE); /* default: cannot change */ + 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); } #if 0 @@ -3200,7 +3258,8 @@ static void InitImages() #endif #if 0 - printf("::: InitImages ['%s', '%s'] ['%s', '%s']\n", + printf("::: InitImages for '%s' ['%s', '%s'] ['%s', '%s']\n", + leveldir_current->identifier, artwork.gfx_current_identifier, artwork.gfx_current->identifier, leveldir_current->graphics_set, @@ -3215,19 +3274,31 @@ static void InitImages() ReinitializeGraphics(); } -static void InitSound() +static void InitSound(char *identifier) { + if (identifier == NULL) + identifier = artwork.snd_current->identifier; + +#if 1 + /* set artwork path to send it to the sound server process */ setLevelArtworkDir(artwork.snd_first); +#endif - InitReloadCustomSounds(artwork.snd_current->identifier); + InitReloadCustomSounds(identifier); ReinitializeSounds(); } -static void InitMusic() +static void InitMusic(char *identifier) { + if (identifier == NULL) + identifier = artwork.mus_current->identifier; + +#if 1 + /* set artwork path to send it to the sound server process */ setLevelArtworkDir(artwork.mus_first); +#endif - InitReloadCustomMusic(artwork.mus_current->identifier); + InitReloadCustomMusic(identifier); ReinitializeMusic(); } @@ -3254,186 +3325,134 @@ void InitNetworkServer() #endif } -void ReloadCustomArtwork() +static char *getNewArtworkIdentifier(int type) { - static char *leveldir_current_identifier = NULL; - static boolean last_override_level_graphics = FALSE; - static boolean last_override_level_sounds = FALSE; - static boolean last_override_level_music = FALSE; - static boolean last_own_level_graphics_set = FALSE; - static boolean last_own_level_sounds_set = FALSE; - static boolean last_own_level_music_set = FALSE; - boolean level_graphics_set_changed = FALSE; - boolean level_sounds_set_changed = FALSE; - boolean level_music_set_changed = FALSE; - /* identifier for new artwork; default: artwork configured in setup */ -#if 0 - char *gfx_new_identifier = artwork.gfx_current->identifier; - char *snd_new_identifier = artwork.snd_current->identifier; - char *mus_new_identifier = artwork.mus_current->identifier; + static char *leveldir_current_identifier[3] = { NULL, NULL, NULL }; + static boolean last_override_level_artwork[3] = { FALSE, FALSE, FALSE }; + static boolean last_has_level_artwork_set[3] = { FALSE, FALSE, FALSE }; + static boolean initialized[3] = { FALSE, FALSE, FALSE }; + TreeInfo *artwork_first_node = ARTWORK_FIRST_NODE(artwork, type); + boolean setup_override_artwork = SETUP_OVERRIDE_ARTWORK(setup, type); + char *setup_artwork_set = SETUP_ARTWORK_SET(setup, type); + char *leveldir_identifier = leveldir_current->identifier; +#if 1 + /* !!! setLevelArtworkDir() should be moved to an earlier stage !!! */ + char *leveldir_artwork_set = setLevelArtworkDir(artwork_first_node); #else - char *gfx_new_identifier = artwork.gfx_current_identifier; - char *snd_new_identifier = artwork.snd_current_identifier; - char *mus_new_identifier = artwork.mus_current_identifier; -#endif - boolean redraw_screen = FALSE; - -#if 0 - if (leveldir_current_identifier == NULL) - leveldir_current_identifier = leveldir_current->identifier; -#endif - -#if 0 - printf("CURRENT GFX: '%s' ['%s']\n", artwork.gfx_current->identifier, - leveldir_current->graphics_set); - printf("CURRENT LEV: '%s' / '%s'\n", leveldir_current_identifier, - leveldir_current->identifier); -#endif - -#if 0 - printf("graphics --> '%s' ('%s')\n", - artwork.gfx_current_identifier, artwork.gfx_current->filename); - printf("sounds --> '%s' ('%s')\n", - artwork.snd_current_identifier, artwork.snd_current->filename); - printf("music --> '%s' ('%s')\n", - artwork.mus_current_identifier, artwork.mus_current->filename); + char *leveldir_artwork_set = LEVELDIR_ARTWORK_SET(leveldir_current, type); #endif + boolean has_level_artwork_set = (leveldir_artwork_set != NULL); + char *artwork_current_identifier; + char *artwork_new_identifier = NULL; /* default: nothing has changed */ /* leveldir_current may be invalid (level group, parent link) */ if (!validLevelSeries(leveldir_current)) - return; - - /* when a new level series was selected, check if there was a change - in custom artwork stored in level series directory */ - if (1 || leveldir_current_identifier != leveldir_current->identifier) - { -#if 0 - char *identifier_old = leveldir_current_identifier; -#endif - char *identifier_new = leveldir_current->identifier; + return NULL; + + /* 1st step: determine artwork set to be activated in descending order: + -------------------------------------------------------------------- + 1. setup artwork (when configured to override everything else) + 2. artwork set configured in "levelinfo.conf" of current level set + (artwork in level directory will have priority when loading later) + 3. artwork in level directory (stored in artwork sub-directory) + 4. setup artwork (currently configured in setup menu) */ + + if (setup_override_artwork) + artwork_current_identifier = setup_artwork_set; + else if (leveldir_artwork_set != NULL) + artwork_current_identifier = leveldir_artwork_set; + else if (getTreeInfoFromIdentifier(artwork_first_node, leveldir_identifier)) + artwork_current_identifier = leveldir_identifier; + else + artwork_current_identifier = setup_artwork_set; -#if 0 - printf("::: 1: ['%s'] '%s', '%s' [%lx, %lx]\n", - gfx_new_identifier, identifier_old, identifier_new, - getTreeInfoFromIdentifier(artwork.gfx_first, identifier_old), - getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new)); -#endif -#if 0 - if (getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new) == NULL) - gfx_new_identifier = GRAPHICS_SUBDIR; - else if (getTreeInfoFromIdentifier(artwork.gfx_first, identifier_old) != - getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new)) - gfx_new_identifier = identifier_new; -#else - if (getTreeInfoFromIdentifier(artwork.gfx_first, identifier_new)) - gfx_new_identifier = identifier_new; - else - gfx_new_identifier = setup.graphics_set; -#endif + /* 2nd step: check if it is really needed to reload artwork set + ------------------------------------------------------------ */ #if 0 - if (getTreeInfoFromIdentifier(artwork.snd_first, identifier_new) == NULL) - snd_new_identifier = SOUNDS_SUBDIR; - else if (getTreeInfoFromIdentifier(artwork.snd_first, identifier_old) != - getTreeInfoFromIdentifier(artwork.snd_first, identifier_new)) - snd_new_identifier = identifier_new; -#else - if (getTreeInfoFromIdentifier(artwork.snd_first, identifier_new)) - snd_new_identifier = identifier_new; - else - snd_new_identifier = setup.sounds_set; + if (type == ARTWORK_TYPE_GRAPHICS) + printf("::: 0: '%s' ['%s', '%s'] ['%s' ('%s')]\n", + artwork_new_identifier, + ARTWORK_CURRENT_IDENTIFIER(artwork, type), + artwork_current_identifier, + leveldir_current->graphics_set, + leveldir_current->identifier); #endif -#if 0 - if (getTreeInfoFromIdentifier(artwork.mus_first, identifier_new) == NULL) - mus_new_identifier = MUSIC_SUBDIR; - else if (getTreeInfoFromIdentifier(artwork.mus_first, identifier_new) != - getTreeInfoFromIdentifier(artwork.mus_first, identifier_new)) - mus_new_identifier = identifier_new; -#else - if (getTreeInfoFromIdentifier(artwork.mus_first, identifier_new)) - mus_new_identifier = identifier_new; - else - mus_new_identifier = setup.music_set; -#endif + /* ---------- reload if level set and also artwork set has changed ------- */ + if (leveldir_current_identifier[type] != leveldir_identifier && + (last_has_level_artwork_set[type] || has_level_artwork_set)) + artwork_new_identifier = artwork_current_identifier; -#if 0 - printf("::: 2: ['%s'] '%s', '%s'\n", - gfx_new_identifier, identifier_old, identifier_new); -#endif + leveldir_current_identifier[type] = leveldir_identifier; + last_has_level_artwork_set[type] = has_level_artwork_set; #if 0 - leveldir_current_identifier = leveldir_current->identifier; + if (type == ARTWORK_TYPE_GRAPHICS) + printf("::: 1: '%s'\n", artwork_new_identifier); #endif - } - /* custom level artwork configured in level series configuration file - always overrides custom level artwork stored in level series directory - and (level independent) custom artwork configured in setup menu */ - if (leveldir_current->graphics_set != NULL) - gfx_new_identifier = leveldir_current->graphics_set; - if (leveldir_current->sounds_set != NULL) - snd_new_identifier = leveldir_current->sounds_set; - if (leveldir_current->music_set != NULL) - mus_new_identifier = leveldir_current->music_set; + /* ---------- reload if "override artwork" setting has changed ----------- */ + if (last_override_level_artwork[type] != setup_override_artwork) + artwork_new_identifier = artwork_current_identifier; - if (leveldir_current_identifier != leveldir_current->identifier) - { - if (last_own_level_graphics_set || leveldir_current->graphics_set != NULL) - level_graphics_set_changed = TRUE; + last_override_level_artwork[type] = setup_override_artwork; - if (last_own_level_sounds_set || leveldir_current->sounds_set != NULL) - level_sounds_set_changed = TRUE; +#if 0 + if (type == ARTWORK_TYPE_GRAPHICS) + printf("::: 2: '%s'\n", artwork_new_identifier); +#endif - if (last_own_level_music_set || leveldir_current->music_set != NULL) - level_music_set_changed = TRUE; + /* ---------- reload if current artwork identifier has changed ----------- */ + if (strcmp(ARTWORK_CURRENT_IDENTIFIER(artwork, type), + artwork_current_identifier) != 0) + artwork_new_identifier = artwork_current_identifier; - last_own_level_graphics_set = (leveldir_current->graphics_set != NULL); - last_own_level_sounds_set = (leveldir_current->sounds_set != NULL); - last_own_level_music_set = (leveldir_current->music_set != NULL); - } + *(&(ARTWORK_CURRENT_IDENTIFIER(artwork, type))) = artwork_current_identifier; -#if 1 - leveldir_current_identifier = leveldir_current->identifier; +#if 0 + if (type == ARTWORK_TYPE_GRAPHICS) + printf("::: 3: '%s'\n", artwork_new_identifier); #endif - if (setup.override_level_graphics) - gfx_new_identifier = artwork.gfx_current->identifier; - if (setup.override_level_sounds) - snd_new_identifier = artwork.snd_current->identifier; - if (setup.override_level_music) - mus_new_identifier = artwork.mus_current->identifier; + /* ---------- do not reload directly after starting ---------------------- */ + if (!initialized[type]) + artwork_new_identifier = NULL; + initialized[type] = TRUE; #if 0 - printf("CHECKING OLD/NEW GFX:\n OLD: '%s'\n NEW: '%s' ['%s', '%s'] [%d]\n", - artwork.gfx_current_identifier, gfx_new_identifier, - artwork.gfx_current->identifier, leveldir_current->graphics_set, - level_graphics_set_changed); + if (type == ARTWORK_TYPE_GRAPHICS) + printf("::: 4: '%s'\n", artwork_new_identifier); #endif - if (strcmp(artwork.gfx_current_identifier, gfx_new_identifier) != 0 || - last_override_level_graphics != setup.override_level_graphics || - level_graphics_set_changed) - { #if 0 - printf("RELOADING GRAPHICS '%s' -> '%s' ['%s']\n", - artwork.gfx_current_identifier, - gfx_new_identifier, - artwork.gfx_current->identifier); + if (type == ARTWORK_TYPE_GRAPHICS) + printf("CHECKING OLD/NEW GFX:\n- OLD: %s\n- NEW: %s ['%s', '%s'] ['%s']\n", + artwork.gfx_current_identifier, artwork_current_identifier, + artwork.gfx_current->identifier, leveldir_current->graphics_set, + artwork_new_identifier); #endif -#if 0 - artwork.gfx_current = - getTreeInfoFromIdentifier(artwork.gfx_first, gfx_new_identifier); -#endif -#if 0 - artwork.gfx_current_identifier = gfx_new_identifier; -#endif + return artwork_new_identifier; +} +void ReloadCustomArtwork() +{ + char *gfx_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_GRAPHICS); + char *snd_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_SOUNDS); + char *mus_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_MUSIC); + boolean redraw_screen = FALSE; + + if (gfx_new_identifier != NULL) + { #if 0 - setLevelArtworkDir(artwork.gfx_first); + printf("RELOADING GRAPHICS '%s' -> '%s' ['%s', '%s']\n", + artwork.gfx_current_identifier, + gfx_new_identifier, + artwork.gfx_current->identifier, + leveldir_current->graphics_set); #endif ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE); @@ -3441,82 +3460,30 @@ void ReloadCustomArtwork() InitImages(); #if 0 - printf("::: %d\n", menu.list_size[GAME_MODE_LEVELS]); + printf("... '%s'\n", + leveldir_current->graphics_set); #endif FreeTileClipmasks(); InitTileClipmasks(); -#if 0 - artwork.gfx_current = - getTreeInfoFromIdentifier(artwork.gfx_first, gfx_new_identifier); -#endif -#if 0 - printf("::: '%s', %lx\n", gfx_new_identifier, artwork.gfx_current); -#endif - -#if 0 - artwork.gfx_current_identifier = artwork.gfx_current->identifier; -#endif - artwork.gfx_current_identifier = gfx_new_identifier; - last_override_level_graphics = setup.override_level_graphics; - -#if 0 - printf("DONE RELOADING GFX: '%s' ['%s']\n", - artwork.gfx_current_identifier, artwork.gfx_current->identifier); -#endif redraw_screen = TRUE; } - if (strcmp(artwork.snd_current_identifier, snd_new_identifier) != 0 || - last_override_level_sounds != setup.override_level_sounds || - level_sounds_set_changed) + if (snd_new_identifier != NULL) { -#if 0 - printf("RELOADING SOUNDS '%s' -> '%s' ('%s')\n", - artwork.snd_current_identifier, - artwork.snd_current->identifier, - snd_new_identifier); -#endif - - /* set artwork path to send it to the sound server process */ - setLevelArtworkDir(artwork.snd_first); - ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE); - InitReloadCustomSounds(snd_new_identifier); - ReinitializeSounds(); - -#if 0 - artwork.snd_current = - getTreeInfoFromIdentifier(artwork.snd_first, setup.sounds_set); - artwork.snd_current_identifier = artwork.snd_current->identifier; -#endif - artwork.snd_current_identifier = snd_new_identifier; - last_override_level_sounds = setup.override_level_sounds; + InitSound(snd_new_identifier); redraw_screen = TRUE; } - if (strcmp(artwork.mus_current_identifier, mus_new_identifier) != 0 || - last_override_level_music != setup.override_level_music || - level_music_set_changed) + if (mus_new_identifier != NULL) { - /* set artwork path to send it to the sound server process */ - setLevelArtworkDir(artwork.mus_first); - ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE); - InitReloadCustomMusic(mus_new_identifier); - ReinitializeMusic(); - -#if 0 - artwork.mus_current = - getTreeInfoFromIdentifier(artwork.mus_first, setup.music_set); - artwork.mus_current_identifier = artwork.mus_current->identifier; -#endif - artwork.mus_current_identifier = mus_new_identifier; - last_override_level_music = setup.override_level_music; + InitMusic(mus_new_identifier); redraw_screen = TRUE; } @@ -3580,6 +3547,7 @@ void OpenAll() InitEventFilter(FilterMouseMotionEvents); InitElementPropertiesStatic(); + InitElementPropertiesEngine(GAME_VERSION_ACTUAL); InitGfx(); @@ -3587,8 +3555,8 @@ void OpenAll() InitLevelArtworkInfo(); InitImages(); /* needs to know current level directory */ - InitSound(); /* needs to know current level directory */ - InitMusic(); /* needs to know current level directory */ + InitSound(NULL); /* needs to know current level directory */ + InitMusic(NULL); /* needs to know current level directory */ InitGfxBackground();